From 8e73a229a95943c110b6b083a2a52fa798f70295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A4=C3=A4n?= <12813916+hartigdan@users.noreply.github.com> Date: Sun, 12 Apr 2026 22:55:54 +0000 Subject: [PATCH 01/71] Pin python version for teyit hook (#11735) teyit fails with python versions >= 3.12 see https://github.com/isidentical/teyit/issues/23 --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a4d6e46287..afdd0795d1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -97,3 +97,4 @@ repos: rev: 0.4.3 hooks: - id: teyit + language_version: python3.11 From fc06aa354a664eb147361e2312ee3565dfea77b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A4=C3=A4n?= <12813916+hartigdan@users.noreply.github.com> Date: Sun, 12 Apr 2026 23:19:34 +0000 Subject: [PATCH 02/71] Add redis database index support (#11732) --- docs/docs/start/config.md | 1 + src/backend/InvenTree/InvenTree/cache.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index 37688941f0..2c8fcbd4ed 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -321,6 +321,7 @@ The following cache settings are available: | INVENTREE_CACHE_PORT | cache.port | Cache server port | 6379 | | INVENTREE_CACHE_PASSWORD | cache.password | Cache server password | none | | INVENTREE_CACHE_USER | cache.user | Cache server username | none | +| INVENTREE_CACHE_DB | cache.db | Cache server database index | 0 | | INVENTREE_CACHE_CONNECT_TIMEOUT | cache.connect_timeout | Cache connection timeout (seconds) | 3 | | INVENTREE_CACHE_TIMEOUT | cache.timeout | Cache timeout (seconds) | 3 | | INVENTREE_CACHE_TCP_KEEPALIVE | cache.tcp_keepalive | Cache TCP keepalive | True | diff --git a/src/backend/InvenTree/InvenTree/cache.py b/src/backend/InvenTree/InvenTree/cache.py index 00214610cc..772d1deb03 100644 --- a/src/backend/InvenTree/InvenTree/cache.py +++ b/src/backend/InvenTree/InvenTree/cache.py @@ -50,6 +50,11 @@ def cache_user(): return cache_setting('user', None) +def cache_db(): + """Return the cache database index.""" + return cache_setting('db', 0, typecast=int) + + def is_global_cache_enabled() -> bool: """Check if the global cache is enabled. @@ -95,9 +100,11 @@ def get_cache_config(global_cache: bool) -> dict: user = cache_user() or '' if password: - redis_url = f'redis://{user}:{password}@{cache_host()}:{cache_port()}/0' + redis_url = ( + f'redis://{user}:{password}@{cache_host()}:{cache_port()}/{cache_db()}' + ) else: - redis_url = f'redis://{cache_host()}:{cache_port()}/0' + redis_url = f'redis://{cache_host()}:{cache_port()}/{cache_db()}' keepalive_options = { 'TCP_KEEPCNT': cache_setting('keepalive_count', 5, typecast=int), From 27ce60dea31afdfbe3917c9b3c0ec870e3d1477c Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Mon, 13 Apr 2026 02:31:08 +0200 Subject: [PATCH 03/71] !refactor(backend): remove API quirks (#11723) * move action to post endpoint * use default return code * remove custom permissions on notifications endpoint * add api bump * update link * fix assertation * fix test to use post - this was refactored --- .../InvenTree/InvenTree/api_version.py | 7 ++++++- src/backend/InvenTree/common/api.py | 19 ++----------------- src/backend/InvenTree/common/test_emails.py | 4 +++- src/backend/InvenTree/common/tests.py | 2 +- .../src/components/nav/NotificationDrawer.tsx | 2 +- src/frontend/src/pages/Notifications.tsx | 2 +- 6 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 1400e67eb4..0b03d4790a 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,16 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 478 +INVENTREE_API_VERSION = 479 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v479 -> 2026-04-11 : https://github.com/inventree/InvenTree/pull/11723 + - POST /api//notifications/readall/ now requires a POST action + - POST /api/admin/email/test/ - now returns a 200 on. a successful test + - GET /api/notifications/ - now uses user-centric permissions, not a general read + v478 -> 2026-04-11 : https://github.com/inventree/InvenTree/pull/11073 - Add OptionalField class for cleaner handling of optional fields in serializers diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index 85f9b10f55..f4d2cd671c 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -395,21 +395,8 @@ class NotificationMessageViewSet( queryset = queryset.filter(user=request.user) return queryset - def get_permissions(self): - """Override permissions for list view.""" - if self.action == 'list': - return [IsAuthenticatedOrReadScope()] - else: - return super().get_permissions() - - def list(self, request, *args, **kwargs): - """List view for all notifications of the current user.""" - # TODO @matmair permissions for this are currently being overwritten in get_permissions - this should be moved to a dedicated endpoint - return super().list(request, *args, **kwargs) - - # TODO @matmair this should really be a POST @action( - detail=False, methods=['get'], permission_classes=[IsAuthenticatedOrReadScope] + detail=False, methods=['post'], permission_classes=[IsAuthenticatedOrReadScope] ) def readall(self, request, *args, **kwargs): """Set all messages for the current user as read.""" @@ -1248,7 +1235,6 @@ class EmailViewSet(BulkDeleteViewsetMixin, RetrieveDestroyModelViewSet): 'thread_id_key', ] - @extend_schema(responses={201: common.serializers.TestEmailSerializer}) @action( detail=False, methods=['post'], @@ -1270,8 +1256,7 @@ class EmailViewSet(BulkDeleteViewsetMixin, RetrieveDestroyModelViewSet): raise serializers.ValidationError( detail=f'Failed to send test email: "{reason}"' ) # pragma: no cover - # TODO @matmair - breaking change: this should be a 200 - return Response(serializer.data, status=201) + return Response(serializer.data) admin_router.register('email', EmailViewSet, basename='api-email') diff --git a/src/backend/InvenTree/common/test_emails.py b/src/backend/InvenTree/common/test_emails.py index 355167d2c5..0ba8b24b9f 100644 --- a/src/backend/InvenTree/common/test_emails.py +++ b/src/backend/InvenTree/common/test_emails.py @@ -103,7 +103,9 @@ class EmailTests(InvenTreeAPITestCase): ) def test_email_api(self): """Test that the email api endpoints work.""" - self.post(reverse('api-email-test'), {'email': 'test@example.org'}) + self.post( + reverse('api-email-test'), {'email': 'test@example.org'}, expected_code=200 + ) response = self.get(reverse('api-email-list'), expected_code=200) self.assertIn('subject', response.data[0]) diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index bf89f8b6c2..21a9474328 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -1332,7 +1332,7 @@ class NotificationTest(InvenTreeAPITestCase): self.assertEqual(len(self.get(url, expected_code=200).data), 1) # Read with readall endpoint - self.get(reverse('api-notifications-readall'), {}, expected_code=200) + self.post(reverse('api-notifications-readall'), {}, expected_code=200) self.assertEqual(NotificationMessage.objects.filter(read=True).count(), 1) self.assertEqual(len(self.get(url, expected_code=200).data), 1) diff --git a/src/frontend/src/components/nav/NotificationDrawer.tsx b/src/frontend/src/components/nav/NotificationDrawer.tsx index b8f93ea8ed..c8d8d890ed 100644 --- a/src/frontend/src/components/nav/NotificationDrawer.tsx +++ b/src/frontend/src/components/nav/NotificationDrawer.tsx @@ -137,7 +137,7 @@ export function NotificationDrawer({ const markAllAsRead = useCallback(() => { api - .get(apiUrl(ApiEndpoints.notifications_readall), { + .post(apiUrl(ApiEndpoints.notifications_readall), { params: { read: false } diff --git a/src/frontend/src/pages/Notifications.tsx b/src/frontend/src/pages/Notifications.tsx index 0de7c798eb..00656f3889 100644 --- a/src/frontend/src/pages/Notifications.tsx +++ b/src/frontend/src/pages/Notifications.tsx @@ -26,7 +26,7 @@ export default function NotificationsPage() { const markAllAsRead = useCallback(() => { api - .get(apiUrl(ApiEndpoints.notifications_readall), { + .post(apiUrl(ApiEndpoints.notifications_readall), { params: { read: false } From 23f43ffd33ff8031af2546f8d9eb19313e77a742 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 Apr 2026 20:36:29 +1000 Subject: [PATCH 04/71] [plugin] Render tables (#11733) * Move useFilterSet state to the @lib * Refactor useTable hook into @lib * Refactor string helper functions * Refactor constructFormUrl func * Refactor Boundary component * Refactor StoredTableState * More refactoring * Refactor CopyButton and CopyableCell * Pass table render func to plugins * Provide internal wrapper function, while allowing the "api" and "navigate" functions to be provided by the caller * Adds component which is exposed to plugins * Update frontend versioning * Update docs * Handle condition where UI does not provide table rendering function * Move queryFilters out of custom state * Fix exported type * Extract searchParams - Cannot be used outside of router component - Only provide when the table is generated internally * Bump UI version * Fix for right-click context menu - Function needs to be defined with the context menu provider --- docs/docs/plugins/frontend.md | 23 +++- src/frontend/CHANGELOG.md | 8 ++ .../{src => lib}/components/Boundary.tsx | 0 .../buttons => lib/components}/CopyButton.tsx | 9 +- .../components}/CopyableCell.tsx | 2 +- .../lib/components/InvenTreeTable.tsx | 63 ++++++++++ .../components/TableColumnSelect.tsx} | 0 src/frontend/lib/functions/Forms.tsx | 47 +++++++ src/frontend/lib/functions/Notification.tsx | 50 ++++++++ .../tables.tsx => lib/functions/String.tsx} | 0 .../{src => lib}/hooks/UseFilterSet.tsx | 4 +- src/frontend/{src => lib}/hooks/UseTable.tsx | 19 +-- src/frontend/lib/index.ts | 50 +++++++- .../{src => lib}/states/StoredTableState.tsx | 2 +- src/frontend/lib/types/Plugins.tsx | 26 ++-- src/frontend/lib/types/Tables.tsx | 25 ++-- src/frontend/package.json | 2 +- .../src/components/barcodes/BarcodeInput.tsx | 2 +- .../src/components/barcodes/QRCode.tsx | 2 +- .../src/components/calendar/Calendar.tsx | 2 +- .../components/dashboard/DashboardWidget.tsx | 2 +- .../src/components/details/Details.tsx | 2 +- .../editors/TemplateEditor/TemplateEditor.tsx | 2 +- src/frontend/src/components/forms/ApiForm.tsx | 23 ++-- .../importer/ImportDataSelector.tsx | 2 +- .../components/modals/AboutInvenTreeModal.tsx | 2 +- src/frontend/src/components/nav/Layout.tsx | 2 +- .../src/components/nav/NotificationDrawer.tsx | 2 +- .../src/components/nav/PageDetail.tsx | 2 +- .../src/components/nav/SearchDrawer.tsx | 2 +- .../src/components/panels/PanelGroup.tsx | 2 +- .../src/components/plugins/PluginContext.tsx | 12 ++ .../components/plugins/RemoteComponent.tsx | 2 +- .../src/components/render/Instance.tsx | 2 +- src/frontend/src/components/render/Part.tsx | 2 +- src/frontend/src/components/render/Stock.tsx | 2 +- .../src/components/settings/SettingItem.tsx | 2 +- .../components/wizards/OrderPartsWizard.tsx | 2 +- .../src/components/wizards/WizardDrawer.tsx | 2 +- src/frontend/src/contexts/LanguageContext.tsx | 2 +- src/frontend/src/functions/forms.tsx | 50 +------- src/frontend/src/functions/notifications.tsx | 49 -------- src/frontend/src/hooks/UseCalendar.tsx | 2 +- src/frontend/src/pages/Index/Scan.tsx | 6 +- .../Settings/AccountSettings/MFASettings.tsx | 2 +- .../AccountSettings/QrRegistrationForm.tsx | 2 +- .../AccountSettings/SecurityContent.tsx | 2 +- .../AdminCenter/CurrencyManagementPanel.tsx | 2 +- .../AdminCenter/UnitManagementPanel.tsx | 2 +- src/frontend/src/pages/Notifications.tsx | 2 +- .../src/pages/part/PartStockHistoryDetail.tsx | 2 +- .../pages/part/pricing/BomPricingPanel.tsx | 2 +- .../pages/part/pricing/PriceBreakPanel.tsx | 2 +- .../part/pricing/PurchaseHistoryPanel.tsx | 2 +- .../pages/part/pricing/SaleHistoryPanel.tsx | 2 +- .../part/pricing/SupplierPricingPanel.tsx | 2 +- .../part/pricing/VariantPricingPanel.tsx | 2 +- src/frontend/src/tables/InvenTreeTable.tsx | 116 +++++++++++++----- .../src/tables/InvenTreeTableHeader.tsx | 24 ++-- src/frontend/src/tables/bom/BomTable.tsx | 2 +- src/frontend/src/tables/bom/UsedInTable.tsx | 2 +- .../tables/build/BuildAllocatedStockTable.tsx | 2 +- .../src/tables/build/BuildLineTable.tsx | 2 +- .../src/tables/build/BuildOrderTable.tsx | 2 +- .../src/tables/build/BuildOutputTable.tsx | 2 +- .../src/tables/company/AddressTable.tsx | 2 +- .../src/tables/company/CompanyTable.tsx | 2 +- .../src/tables/company/ContactTable.tsx | 2 +- .../src/tables/general/AttachmentTable.tsx | 2 +- .../src/tables/general/BarcodeScanTable.tsx | 2 +- .../src/tables/general/ExtraLineItemTable.tsx | 2 +- .../src/tables/general/ParameterTable.tsx | 2 +- .../tables/general/ParameterTemplateTable.tsx | 2 +- .../tables/general/ParametricDataTable.tsx | 2 +- .../src/tables/machine/MachineListTable.tsx | 2 +- .../src/tables/machine/MachineTypeTable.tsx | 2 +- .../tables/part/PartBuildAllocationsTable.tsx | 2 +- .../src/tables/part/PartCategoryTable.tsx | 2 +- .../tables/part/PartCategoryTemplateTable.tsx | 2 +- .../tables/part/PartPurchaseOrdersTable.tsx | 2 +- .../tables/part/PartSalesAllocationsTable.tsx | 2 +- src/frontend/src/tables/part/PartTable.tsx | 2 +- .../src/tables/part/PartTestResultTable.tsx | 2 +- .../src/tables/part/PartTestTemplateTable.tsx | 2 +- .../src/tables/part/RelatedPartTable.tsx | 2 +- .../src/tables/part/SelectionListTable.tsx | 2 +- .../src/tables/plugin/PluginErrorTable.tsx | 2 +- .../src/tables/plugin/PluginListTable.tsx | 2 +- .../purchasing/ManufacturerPartTable.tsx | 2 +- .../purchasing/PurchaseOrderLineItemTable.tsx | 2 +- .../tables/purchasing/PurchaseOrderTable.tsx | 2 +- .../tables/purchasing/SupplierPartTable.tsx | 2 +- .../purchasing/SupplierPriceBreakTable.tsx | 2 +- .../tables/sales/ReturnOrderLineItemTable.tsx | 2 +- .../src/tables/sales/ReturnOrderTable.tsx | 2 +- .../sales/SalesOrderAllocationTable.tsx | 2 +- .../tables/sales/SalesOrderLineItemTable.tsx | 2 +- .../tables/sales/SalesOrderShipmentTable.tsx | 2 +- .../src/tables/sales/SalesOrderTable.tsx | 2 +- .../src/tables/settings/ApiTokenTable.tsx | 4 +- .../settings/BarcodeScanHistoryTable.tsx | 6 +- .../src/tables/settings/CustomStateTable.tsx | 2 +- .../src/tables/settings/CustomUnitsTable.tsx | 2 +- .../src/tables/settings/EmailTable.tsx | 2 +- .../src/tables/settings/ErrorTable.tsx | 4 +- .../tables/settings/ExportSessionTable.tsx | 2 +- .../src/tables/settings/FailedTasksTable.tsx | 2 +- .../src/tables/settings/GroupTable.tsx | 2 +- .../tables/settings/ImportSessionTable.tsx | 2 +- .../src/tables/settings/PendingTasksTable.tsx | 2 +- .../src/tables/settings/ProjectCodeTable.tsx | 2 +- .../tables/settings/ScheduledTasksTable.tsx | 2 +- .../src/tables/settings/TemplateTable.tsx | 2 +- .../src/tables/settings/UserTable.tsx | 2 +- .../src/tables/stock/InstalledItemsTable.tsx | 2 +- .../src/tables/stock/LocationTypesTable.tsx | 2 +- .../src/tables/stock/StockItemTable.tsx | 2 +- .../tables/stock/StockItemTestResultTable.tsx | 2 +- .../src/tables/stock/StockLocationTable.tsx | 2 +- .../src/tables/stock/StockTrackingTable.tsx | 2 +- 120 files changed, 506 insertions(+), 304 deletions(-) rename src/frontend/{src => lib}/components/Boundary.tsx (100%) rename src/frontend/{src/components/buttons => lib/components}/CopyButton.tsx (89%) rename src/frontend/{src/tables => lib/components}/CopyableCell.tsx (95%) create mode 100644 src/frontend/lib/components/InvenTreeTable.tsx rename src/frontend/{src/tables/ColumnSelect.tsx => lib/components/TableColumnSelect.tsx} (100%) create mode 100644 src/frontend/lib/functions/Forms.tsx create mode 100644 src/frontend/lib/functions/Notification.tsx rename src/frontend/{src/functions/tables.tsx => lib/functions/String.tsx} (100%) rename src/frontend/{src => lib}/hooks/UseFilterSet.tsx (91%) rename src/frontend/{src => lib}/hooks/UseTable.tsx (86%) rename src/frontend/{src => lib}/states/StoredTableState.tsx (98%) diff --git a/docs/docs/plugins/frontend.md b/docs/docs/plugins/frontend.md index 0df93fd49d..550a604590 100644 --- a/docs/docs/plugins/frontend.md +++ b/docs/docs/plugins/frontend.md @@ -10,6 +10,9 @@ Plugins can inherit from the [UserInterfaceMixin](./mixins/ui.md) class to provi Note that the [InvenTree plugin creator](./creator.md) can be used to scaffold a new plugin with the necessary structure for frontend integration. This will automatically set up the necessary files and configurations to get started with frontend development. +!!! info "Simplified Development" + Using the plugin creator can significantly simplify the process of developing a frontend plugin, as it provides a ready-made template with the necessary configurations for building and integrating the frontend code. Rolling your own frontend plugin from scratch is possible, but it requires a good understanding of the InvenTree frontend architecture and build process. + ## Frontend Architecture When designing a frontend plugin component, it is important to have at least a basic understanding of the InvenTree frontend architecture. @@ -76,20 +79,28 @@ The following properties are available in the `context` object: | Property | Description | | -------- | ----------- | | `version` | An object containing the current InvenTree version information. | +| `api` | The Axios instance configured to communicate with the InvenTree API. | +| `queryClient` | The query client instance used for managing API calls in the frontend. | | `user` | An object containing information about the currently logged-in user. | +| `userSettings` | An object containing user-specific settings. | +| `globalSettings` | An object containing global settings for the InvenTree instance. | +| `modelInformation` | An object containing information about the models available in the InvenTree instance. | +| `renderInstance` | A function to render a model instance | | `host` | An object containing information about the current host (server) configuration. | | `i18n` | An object containing internationalization (i18n) functions for translating text. | | `locale` | The current locale being used for the user interface. | -| `api` | The Axios instance configured to communicate with the InvenTree API. | -| `queryClient` | The query client instance used for managing API calls in the frontend. | | `navigate` | A function to navigate to a different page in the InvenTree web interface. | -| `globalSettings` | An object containing global settings for the InvenTree instance. | -| `userSettings` | An object containing user-specific settings. | -| `modelInformation` | An object containing information about the models available in the InvenTree instance. | -| `renderInstance` | A function to render a model instance | | `theme` | The current Mantine theme being used in the InvenTree web interface. | | `colorScheme` | The current color scheme being used in the InvenTree web interface. | | `forms` | A set of functional components for rendering forms in the InvenTree web interface. | +| `tables` | A set of functional components for rendering tables in the InvenTree web interface. | +| `importer` | A set of functions for controlling the global importer drawer in the InvenTree web interface. | +| `model` | The model type associated with the rendered component (if applicable). | +| `id` | The ID (primary key) of the model instance being rendered (if applicable). | +| `instance` | The model instance data (if available). | +| `reloadContent` | A function which can be called to reload the plugin content. | +| `reloadInstance` | A function which can be called to reload the model instance. | +| `context` | Any additional context data which may be passed to the plugin. | This set of components is passed through at render time to the plugin function, allowing the plugin code to hook directly into the InvenTree web interface and access the necessary context for rendering. diff --git a/src/frontend/CHANGELOG.md b/src/frontend/CHANGELOG.md index 7fd7be38d5..9d1d44f1bb 100644 --- a/src/frontend/CHANGELOG.md +++ b/src/frontend/CHANGELOG.md @@ -2,6 +2,14 @@ This file contains historical changelog information for the InvenTree UI components library. +### 0.11.1 - April 2026 + +Fixes dependency issues for the `InvenTreeTable` component, which were introduced in `0.11.0`. This ensures that the component works correctly and does not cause issues with plugin builds. + +### 0.11.0 - April 2026 + +Adds the `InvenTreeTable` component, which provides plugins with a method of implementing an API-driven data table which is consistent with the rest of the InvenTree UI. This component supports features such as pagination, sorting, and filtering, and can be used to display data from the InvenTree API in a tabular format. + ### 0.10.1 - April 2026 Allows plugins to specify custom model rendering functions within the data import wizard, allowing import of data models not defined in the core InvenTree codebase. diff --git a/src/frontend/src/components/Boundary.tsx b/src/frontend/lib/components/Boundary.tsx similarity index 100% rename from src/frontend/src/components/Boundary.tsx rename to src/frontend/lib/components/Boundary.tsx diff --git a/src/frontend/src/components/buttons/CopyButton.tsx b/src/frontend/lib/components/CopyButton.tsx similarity index 89% rename from src/frontend/src/components/buttons/CopyButton.tsx rename to src/frontend/lib/components/CopyButton.tsx index a43b4b3099..da72f82a26 100644 --- a/src/frontend/src/components/buttons/CopyButton.tsx +++ b/src/frontend/lib/components/CopyButton.tsx @@ -10,8 +10,7 @@ import { Text, Tooltip } from '@mantine/core'; - -import { InvenTreeIcon } from '../../functions/icons'; +import { IconCheck, IconCopy } from '@tabler/icons-react'; import type { JSX } from 'react'; @@ -62,11 +61,7 @@ export function CopyButton({ variant={copied ? 'transparent' : (variant ?? 'transparent')} size={size ?? 'sm'} > - {copied ? ( - - ) : ( - - )} + {copied ? : } {content} {label && ( diff --git a/src/frontend/src/tables/CopyableCell.tsx b/src/frontend/lib/components/CopyableCell.tsx similarity index 95% rename from src/frontend/src/tables/CopyableCell.tsx rename to src/frontend/lib/components/CopyableCell.tsx index e90d122296..eee9b0e26f 100644 --- a/src/frontend/src/tables/CopyableCell.tsx +++ b/src/frontend/lib/components/CopyableCell.tsx @@ -1,6 +1,6 @@ import { Group } from '@mantine/core'; import { useState } from 'react'; -import { CopyButton } from '../components/buttons/CopyButton'; +import { CopyButton } from './CopyButton'; /** * A wrapper component that adds a copy button to cell content on hover diff --git a/src/frontend/lib/components/InvenTreeTable.tsx b/src/frontend/lib/components/InvenTreeTable.tsx new file mode 100644 index 0000000000..298d0b994e --- /dev/null +++ b/src/frontend/lib/components/InvenTreeTable.tsx @@ -0,0 +1,63 @@ +import { Alert } from '@mantine/core'; +import { + INVENTREE_PLUGIN_VERSION, + type InvenTreePluginContext +} from '../types/Plugins'; +import type { + InvenTreeTableProps, + TableColumn, + TableState +} from '../types/Tables'; + +/** + * Wrapper function which allows plugins to render an InvenTree component instance directly, + * in a similar way to the standard InvenTreeTable component. + * + * Note: The InventreePluginContext "context" object must be provided when rendering the table + * + */ + +export default function InvenTreeTable({ + url, + tableState, + tableData, + columns, + props, + context +}: { + url?: string; + tableState: TableState; + tableData?: any[]; + columns: TableColumn[]; + props: InvenTreeTableProps; + context: InvenTreePluginContext; +}) { + if (!context?.tables?.renderTable) { + return ( + + { + 'The component cannot be rendered because the plugin context is missing the "renderTable" function.' + } +
+ { + 'This means that the InvenTree UI library version is incompatible with this plugin version.' + } +
+ Plugin Version: {INVENTREE_PLUGIN_VERSION} +
+ UI Version: {context?.version?.inventree || 'unknown'} +
+
+ ); + } + + return context?.tables.renderTable({ + url: url, + tableState: tableState, + tableData: tableData, + columns: columns, + props: props, + api: context.api, + navigate: context.navigate + }); +} diff --git a/src/frontend/src/tables/ColumnSelect.tsx b/src/frontend/lib/components/TableColumnSelect.tsx similarity index 100% rename from src/frontend/src/tables/ColumnSelect.tsx rename to src/frontend/lib/components/TableColumnSelect.tsx diff --git a/src/frontend/lib/functions/Forms.tsx b/src/frontend/lib/functions/Forms.tsx new file mode 100644 index 0000000000..78ad55ce2e --- /dev/null +++ b/src/frontend/lib/functions/Forms.tsx @@ -0,0 +1,47 @@ +import type { ApiEndpoints } from '../enums/ApiEndpoints'; +import type { PathParams } from '../types/Core'; +import type { ApiFormFieldSet, ApiFormFieldType } from '../types/Forms'; +import { apiUrl } from './Api'; + +/** + * Construct an API url from the provided ApiFormProps object + */ +export function constructFormUrl( + url: ApiEndpoints | string, + pk?: string | number, + pathParams?: PathParams, + queryParams?: URLSearchParams +): string { + let formUrl = apiUrl(url, pk, pathParams); + + if (queryParams) { + formUrl += `?${queryParams.toString()}`; + } + + return formUrl; +} + +export type NestedDict = { [key: string]: string | number | NestedDict }; + +export function mapFields( + fields: ApiFormFieldSet, + fieldFunction: (path: string, value: ApiFormFieldType, key: string) => any, + _path?: string +): NestedDict { + const res: NestedDict = {}; + + for (const [k, v] of Object.entries(fields)) { + const path = _path ? `${_path}.${k}` : k; + let value: any; + + if (v.field_type === 'nested object' && v.children) { + value = mapFields(v.children, fieldFunction, path); + } else { + value = fieldFunction(path, v, k); + } + + if (value !== undefined) res[k] = value; + } + + return res; +} diff --git a/src/frontend/lib/functions/Notification.tsx b/src/frontend/lib/functions/Notification.tsx new file mode 100644 index 0000000000..8e16570e7c --- /dev/null +++ b/src/frontend/lib/functions/Notification.tsx @@ -0,0 +1,50 @@ +import { t } from '@lingui/core/macro'; +import { notifications } from '@mantine/notifications'; + +/** + * Show a notification that the feature is not yet implemented + */ +export function notYetImplemented() { + notifications.hide('not-implemented'); + + notifications.show({ + title: t`Not implemented`, + message: t`This feature is not yet implemented`, + color: 'red', + id: 'not-implemented' + }); +} + +/** + * Show a notification that the user does not have permission to perform the action + */ +export function permissionDenied() { + notifications.show({ + title: t`Permission Denied`, + message: t`You do not have permission to perform this action`, + color: 'red' + }); +} + +/** + * Display a notification on an invalid return code + */ +export function invalidResponse(returnCode: number) { + // TODO: Specific return code messages + notifications.show({ + title: t`Invalid Return Code`, + message: t`Server returned status ${returnCode}`, + color: 'red' + }); +} + +/** + * Display a notification on timeout + */ +export function showTimeoutNotification() { + notifications.show({ + title: t`Timeout`, + message: t`The request timed out`, + color: 'red' + }); +} diff --git a/src/frontend/src/functions/tables.tsx b/src/frontend/lib/functions/String.tsx similarity index 100% rename from src/frontend/src/functions/tables.tsx rename to src/frontend/lib/functions/String.tsx diff --git a/src/frontend/src/hooks/UseFilterSet.tsx b/src/frontend/lib/hooks/UseFilterSet.tsx similarity index 91% rename from src/frontend/src/hooks/UseFilterSet.tsx rename to src/frontend/lib/hooks/UseFilterSet.tsx index 9d0300cb46..80a7791f1e 100644 --- a/src/frontend/src/hooks/UseFilterSet.tsx +++ b/src/frontend/lib/hooks/UseFilterSet.tsx @@ -1,8 +1,8 @@ -import type { FilterSetState, TableFilter } from '@lib/types/Filters'; import { useLocalStorage } from '@mantine/hooks'; import { useCallback, useMemo } from 'react'; +import type { FilterSetState, TableFilter } from '../types/Filters'; -export function useFilterSet( +export default function useFilterSet( filterKey: string, initialFilters?: TableFilter[] ): FilterSetState { diff --git a/src/frontend/src/hooks/UseTable.tsx b/src/frontend/lib/hooks/UseTable.tsx similarity index 86% rename from src/frontend/src/hooks/UseTable.tsx rename to src/frontend/lib/hooks/UseTable.tsx index 49a2c50569..52bdd6afa4 100644 --- a/src/frontend/src/hooks/UseTable.tsx +++ b/src/frontend/lib/hooks/UseTable.tsx @@ -1,10 +1,9 @@ import { randomId } from '@mantine/hooks'; import { useCallback, useMemo, useState } from 'react'; -import { useSearchParams } from 'react-router-dom'; -import type { FilterSetState, TableFilter } from '@lib/types/Filters'; -import type { TableState } from '@lib/types/Tables'; -import { useFilterSet } from './UseFilterSet'; +import type { FilterSetState, TableFilter } from '../types/Filters'; +import type { TableState } from '../types/Tables'; +import useFilterSet from './UseFilterSet'; export type TableStateExtraProps = { idAccessor?: string; @@ -17,7 +16,7 @@ export type TableStateExtraProps = { * Refer to the TableState type definition for more information. */ -export function useTable( +export default function useTable( tableName: string, tableProps: TableStateExtraProps = { idAccessor: 'pk', @@ -29,13 +28,6 @@ export function useTable( return `${tableName.replaceAll('-', '')}-${randomId()}`; } - // Extract URL query parameters (e.g. ?active=true&overdue=false) - const [queryFilters, setQueryFilters] = useSearchParams(); - - const clearQueryFilters = useCallback(() => { - setQueryFilters({}); - }, []); - const [tableKey, setTableKey] = useState(generateTableName()); // Callback used to refresh (reload) the table @@ -133,9 +125,6 @@ export function useTable( isLoading, setIsLoading, filterSet, - queryFilters, - setQueryFilters, - clearQueryFilters, expandedRecords, setExpandedRecords, isRowExpanded, diff --git a/src/frontend/lib/index.ts b/src/frontend/lib/index.ts index f9812e6df7..c38dfffca2 100644 --- a/src/frontend/lib/index.ts +++ b/src/frontend/lib/index.ts @@ -15,10 +15,20 @@ export { UserRoles, UserPermissions } from './enums/Roles'; export type { InvenTreePluginContext, InvenTreeFormsContext, + InvenTreeTablesContext, + ImporterDrawerContext, PluginVersion, StockAdjustmentFormsContext } from './types/Plugins'; -export type { RowAction, RowViewProps } from './types/Tables'; + +export type { + RowAction, + RowViewProps, + TableColumn, + TableColumnProps, + InvenTreeTableProps, + InvenTreeTableRenderProps +} from './types/Tables'; export type { ApiFormFieldChoice, @@ -42,6 +52,14 @@ export { getDetailUrl, navigateToLink } from './functions/Navigation'; + +export { + notYetImplemented, + permissionDenied, + invalidResponse, + showTimeoutNotification +} from './functions/Notification'; + export { checkPluginVersion, initPlugin @@ -53,16 +71,32 @@ export { formatFileSize } from './functions/Formatting'; +export { + constructFormUrl, + mapFields, + type NestedDict +} from './functions/Forms'; + +export { + shortenString, + hashString +} from './functions/String'; + // Common UI components export { ActionButton, type ActionButtonProps } from './components/ActionButton'; export { AddItemButton } from './components/AddItemButton'; +export { Boundary, DefaultFallback } from './components/Boundary'; export { ButtonMenu } from './components/ButtonMenu'; +export { CopyButton } from './components/CopyButton'; +export { CopyableCell } from './components/CopyableCell'; export { ProgressBar } from './components/ProgressBar'; export { PassFailButton, YesNoButton } from './components/YesNoButton'; export { SearchInput } from './components/SearchInput'; +export { TableColumnSelect } from './components/TableColumnSelect'; +export { default as InvenTreeTable } from './components/InvenTreeTable'; export { RowViewAction, RowDuplicateAction, @@ -77,7 +111,21 @@ export { default as useMonitorDataOutput, type MonitorDataOutputProps } from './hooks/MonitorDataOutput'; + export { default as useMonitorBackgroundTask, type MonitorBackgroundTaskProps } from './hooks/MonitorBackgroundTask'; + +export { default as useFilterSet } from './hooks/UseFilterSet'; + +export { + default as useTable, + type TableStateExtraProps +} from './hooks/UseTable'; + +// State management +export { + type StoredTableStateProps, + useStoredTableState +} from './states/StoredTableState'; diff --git a/src/frontend/src/states/StoredTableState.tsx b/src/frontend/lib/states/StoredTableState.tsx similarity index 98% rename from src/frontend/src/states/StoredTableState.tsx rename to src/frontend/lib/states/StoredTableState.tsx index 7d9519dc09..f0e6c40e09 100644 --- a/src/frontend/src/states/StoredTableState.tsx +++ b/src/frontend/lib/states/StoredTableState.tsx @@ -13,7 +13,7 @@ const DEFAULT_PAGE_SIZE: number = 25; * - columnNames: An object mapping table keys to arrays of column names. * - sorting: An object mapping table keys to sorting configurations. */ -interface StoredTableStateProps { +export interface StoredTableStateProps { pageSize: number; setPageSize: (size: number) => void; tableSorting: Record; diff --git a/src/frontend/lib/types/Plugins.tsx b/src/frontend/lib/types/Plugins.tsx index 840d695d6d..575cf9f3c5 100644 --- a/src/frontend/lib/types/Plugins.tsx +++ b/src/frontend/lib/types/Plugins.tsx @@ -13,6 +13,7 @@ import type { import type { UseModalReturn } from './Modals'; import type { RenderInstanceProps } from './Rendering'; import type { SettingsStateProps } from './Settings'; +import type { InvenTreeTableRenderProps } from './Tables'; import type { UserStateProps } from './User'; export interface PluginProps { @@ -48,6 +49,10 @@ export type InvenTreeFormsContext = { stockActions: StockAdjustmentFormsContext; }; +export type InvenTreeTablesContext> = { + renderTable: (props: InvenTreeTableRenderProps) => React.ReactNode; +}; + export type ImporterDrawerContext = { open: (sessionId: number, options?: { onClose?: () => void }) => void; close: () => void; @@ -61,20 +66,22 @@ export type ImporterDrawerContext = { * * @param version - The version of the running InvenTree software stack * @param api - The Axios API instance (see ../states/ApiState.tsx) + * @param queryClient - The Tanstack QueryClient instance (see ../states/QueryState.tsx) * @param user - The current user instance (see ../states/UserState.tsx) * @param userSettings - The current user settings (see ../states/SettingsState.tsx) * @param globalSettings - The global settings (see ../states/SettingsState.tsx) - * @param navigate - The navigation function (see react-router-dom) - * @param theme - The current Mantine theme - * @param forms - A set of functions for opening various API forms (see ../components/Forms.tsx) - * @param importer - A set of functions for controlling the global importer drawer (see ../components/importer/GlobalImporterDrawer.tsx) - * @param colorScheme - The current Mantine color scheme (e.g. 'light' / 'dark') + * @param modelInformation - A dictionary of available model information + * @param renderInstance - A component function for rendering a model instance * @param host - The current host URL * @param i18n - The i18n instance for translations (from @lingui/core) * @param locale - The current locale string (e.g. 'en' / 'de') + * @param navigate - The navigation function (see react-router-dom) + * @param theme - The current Mantine theme + * @param colorScheme - The current Mantine color scheme (e.g. 'light' / 'dark') + * @param forms - A set of functions for opening various API forms (see ../components/Forms.tsx) + * @param tables - A set of functions for rendering API tables + * @param importer - A set of functions for controlling the global importer drawer (see ../components/importer/GlobalImporterDrawer.tsx) * @param model - The model type associated with the rendered component (if applicable) - * @param modelInformation - A dictionary of available model information - * @param renderInstance - A component function for rendering a model instance * @param id - The ID (primary key) of the model instance for the plugin (if applicable) * @param instance - The model instance data (if available) * @param reloadContent - A function which can be called to reload the plugin content @@ -95,9 +102,10 @@ export type InvenTreePluginContext = { locale: string; navigate: NavigateFunction; theme: MantineTheme; - forms: InvenTreeFormsContext; - importer: ImporterDrawerContext; colorScheme: MantineColorScheme; + forms: InvenTreeFormsContext; + tables: InvenTreeTablesContext; + importer: ImporterDrawerContext; model?: ModelType | string; id?: string | number | null; instance?: any; diff --git a/src/frontend/lib/types/Tables.tsx b/src/frontend/lib/types/Tables.tsx index 99f02ce06d..ffb7186e06 100644 --- a/src/frontend/lib/types/Tables.tsx +++ b/src/frontend/lib/types/Tables.tsx @@ -1,10 +1,12 @@ import type { MantineStyleProp } from '@mantine/core'; +import type { AxiosInstance } from 'axios'; +import type { ShowContextMenuFunction } from 'mantine-contextmenu'; import type { DataTableCellClickHandler, DataTableRowExpansionProps } from 'mantine-datatable'; import type { ReactNode } from 'react'; -import type { NavigateFunction, SetURLSearchParams } from 'react-router-dom'; +import type { NavigateFunction } from 'react-router-dom'; import type { ModelType } from '../enums/ModelType'; import type { FilterSetState, TableFilter } from './Filters'; import type { ApiFormFieldType } from './Forms'; @@ -17,9 +19,6 @@ import type { ApiFormFieldType } from './Forms'; * isLoading: A boolean flag to indicate if the table is currently loading data * setIsLoading: A function to set the isLoading flag * filterSet: A group of active filters - * queryFilters: A map of query filters (e.g. ?active=true&overdue=false) passed in the URL - * setQueryFilters: A function to set the query filters - * clearQueryFilters: A function to clear all query filters * expandedRecords: An array of expanded records (rows) in the table * setExpandedRecords: A function to set the expanded records * isRowExpanded: A function to determine if a record is expanded @@ -49,9 +48,6 @@ export type TableState = { isLoading: boolean; setIsLoading: (value: boolean) => void; filterSet: FilterSetState; - queryFilters: URLSearchParams; - setQueryFilters: SetURLSearchParams; - clearQueryFilters: () => void; expandedRecords: any[]; setExpandedRecords: (records: any[]) => void; isRowExpanded: (pk: number) => boolean; @@ -219,3 +215,18 @@ export type InvenTreeTableProps = { minHeight?: number; noHeader?: boolean; }; + +export type InvenTreeTableRenderProps> = { + url?: string; + tableState: TableState; + tableData?: T[]; + columns: TableColumn[]; + props: InvenTreeTableProps; + api: AxiosInstance; + navigate: NavigateFunction; + + // The following attributes are for internal use only (plugins should not use these directly) + showContextMenu?: ShowContextMenuFunction; + searchParams?: URLSearchParams; + setSearchParams?: (params: URLSearchParams) => void; +}; diff --git a/src/frontend/package.json b/src/frontend/package.json index 9e588afb9c..db56aa4aae 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,7 +1,7 @@ { "name": "@inventreedb/ui", "description": "UI components for the InvenTree project", - "version": "0.10.1", + "version": "0.11.1", "private": false, "type": "module", "license": "MIT", diff --git a/src/frontend/src/components/barcodes/BarcodeInput.tsx b/src/frontend/src/components/barcodes/BarcodeInput.tsx index 6e5d5e012b..4fa4dd03b8 100644 --- a/src/frontend/src/components/barcodes/BarcodeInput.tsx +++ b/src/frontend/src/components/barcodes/BarcodeInput.tsx @@ -13,9 +13,9 @@ import { import { IconCamera, IconScan } from '@tabler/icons-react'; import { useCallback, useMemo, useState } from 'react'; +import { Boundary } from '@lib/components/Boundary'; import { useLocalStorage } from '@mantine/hooks'; import { useGlobalSettingsState } from '../../states/SettingsStates'; -import { Boundary } from '../Boundary'; import BarcodeCameraInput from './BarcodeCameraInput'; import BarcodeKeyboardInput from './BarcodeKeyboardInput'; diff --git a/src/frontend/src/components/barcodes/QRCode.tsx b/src/frontend/src/components/barcodes/QRCode.tsx index fd8e0a1387..11155e5d8f 100644 --- a/src/frontend/src/components/barcodes/QRCode.tsx +++ b/src/frontend/src/components/barcodes/QRCode.tsx @@ -18,11 +18,11 @@ import { useQuery } from '@tanstack/react-query'; import QR from 'qrcode'; import { useCallback, useEffect, useMemo, useState } from 'react'; +import { CopyButton } from '@lib/components/CopyButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; import { api } from '../../App'; import { useGlobalSettingsState } from '../../states/SettingsStates'; -import { CopyButton } from '../buttons/CopyButton'; import type { QrCodeType } from '../items/ActionDropdown'; import { extractErrorMessage } from '../../functions/api'; diff --git a/src/frontend/src/components/calendar/Calendar.tsx b/src/frontend/src/components/calendar/Calendar.tsx index 50f416a175..508cdc4673 100644 --- a/src/frontend/src/components/calendar/Calendar.tsx +++ b/src/frontend/src/components/calendar/Calendar.tsx @@ -5,6 +5,7 @@ import interactionPlugin from '@fullcalendar/interaction'; import FullCalendar from '@fullcalendar/react'; import { ActionButton } from '@lib/components/ActionButton'; +import { Boundary } from '@lib/components/Boundary'; import { SearchInput } from '@lib/components/SearchInput'; import type { TableFilter } from '@lib/types/Filters'; import { t } from '@lingui/core/macro'; @@ -36,7 +37,6 @@ import { import type { CalendarState } from '../../hooks/UseCalendar'; import { useLocalState } from '../../states/LocalState'; import { FilterSelectDrawer } from '../../tables/FilterSelectDrawer'; -import { Boundary } from '../Boundary'; import { StylishText } from '../items/StylishText'; export interface InvenTreeCalendarProps extends CalendarOptions { diff --git a/src/frontend/src/components/dashboard/DashboardWidget.tsx b/src/frontend/src/components/dashboard/DashboardWidget.tsx index d56f733587..cc806d01b9 100644 --- a/src/frontend/src/components/dashboard/DashboardWidget.tsx +++ b/src/frontend/src/components/dashboard/DashboardWidget.tsx @@ -2,7 +2,7 @@ import { t } from '@lingui/core/macro'; import { ActionIcon, Box, Group, Overlay, Paper, Tooltip } from '@mantine/core'; import { IconX } from '@tabler/icons-react'; -import { Boundary } from '../Boundary'; +import { Boundary } from '@lib/components/Boundary'; import type { ModelType } from '@lib/index'; import type { JSX } from 'react'; diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index 9222814fa4..a55a96f489 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -17,6 +17,7 @@ import { getValueAtPath } from 'mantine-datatable'; import { useCallback, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; +import { CopyButton } from '@lib/components/CopyButton'; import { ProgressBar } from '@lib/components/ProgressBar'; import { YesNoButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; @@ -29,7 +30,6 @@ import { useApi } from '../../contexts/ApiContext'; import { formatDate, formatDecimal } from '../../defaults/formatters'; import { InvenTreeIcon } from '../../functions/icons'; import { useGlobalSettingsState } from '../../states/SettingsStates'; -import { CopyButton } from '../buttons/CopyButton'; import { StylishText } from '../items/StylishText'; import { getModelInfo } from '../render/ModelType'; import { StatusRenderer } from '../render/StatusRenderer'; diff --git a/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx b/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx index 2cf8633136..786b4803da 100644 --- a/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx +++ b/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx @@ -25,12 +25,12 @@ import Split from '@uiw/react-split'; import type React from 'react'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { Boundary } from '@lib/components/Boundary'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; import { api } from '../../../App'; import type { TemplateI } from '../../../tables/settings/TemplateTable'; -import { Boundary } from '../../Boundary'; import { SplitButton } from '../../buttons/SplitButton'; import { StandaloneField } from '../../forms/StandaloneField'; diff --git a/src/frontend/src/components/forms/ApiForm.tsx b/src/frontend/src/components/forms/ApiForm.tsx index 43b2b22948..7531e9b927 100644 --- a/src/frontend/src/components/forms/ApiForm.tsx +++ b/src/frontend/src/components/forms/ApiForm.tsx @@ -22,26 +22,25 @@ import { } from 'react-hook-form'; import { type NavigateFunction, useNavigate } from 'react-router-dom'; +import { Boundary } from '@lib/components/Boundary'; import { isTrue } from '@lib/functions/Conversion'; +import { + type NestedDict, + constructFormUrl, + mapFields +} from '@lib/functions/Forms'; import { getDetailUrl } from '@lib/functions/Navigation'; +import { + invalidResponse, + showTimeoutNotification +} from '@lib/functions/Notification'; import type { ApiFormFieldSet, ApiFormFieldType, ApiFormProps } from '@lib/types/Forms'; import { useApi } from '../../contexts/ApiContext'; -import { - type NestedDict, - constructField, - constructFormUrl, - extractAvailableFields, - mapFields -} from '../../functions/forms'; -import { - invalidResponse, - showTimeoutNotification -} from '../../functions/notifications'; -import { Boundary } from '../Boundary'; +import { constructField, extractAvailableFields } from '../../functions/forms'; import { KeepFormOpenSwitch } from './KeepFormOpenSwitch'; import { ApiFormField } from './fields/ApiFormField'; diff --git a/src/frontend/src/components/importer/ImportDataSelector.tsx b/src/frontend/src/components/importer/ImportDataSelector.tsx index 0b09bf31e6..82aadf2d5c 100644 --- a/src/frontend/src/components/importer/ImportDataSelector.tsx +++ b/src/frontend/src/components/importer/ImportDataSelector.tsx @@ -20,6 +20,7 @@ import { YesNoButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; import { cancelEvent } from '@lib/functions/Events'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -29,7 +30,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import type { ImportSessionState } from '../../hooks/UseImportSession'; -import { useTable } from '../../hooks/UseTable'; import { InvenTreeTable } from '../../tables/InvenTreeTable'; import { RenderRemoteInstance } from '../render/Instance'; diff --git a/src/frontend/src/components/modals/AboutInvenTreeModal.tsx b/src/frontend/src/components/modals/AboutInvenTreeModal.tsx index dc478d56b7..ecdc4eaf04 100644 --- a/src/frontend/src/components/modals/AboutInvenTreeModal.tsx +++ b/src/frontend/src/components/modals/AboutInvenTreeModal.tsx @@ -13,13 +13,13 @@ import { import type { ContextModalProps } from '@mantine/modals'; import { useQuery } from '@tanstack/react-query'; +import { CopyButton } from '@lib/components/CopyButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; import { useShallow } from 'zustand/react/shallow'; import { api } from '../../App'; import { generateUrl } from '../../functions/urls'; import { useServerApiState } from '../../states/ServerApiState'; -import { CopyButton } from '../buttons/CopyButton'; import { StylishText } from '../items/StylishText'; import type { JSX } from 'react'; diff --git a/src/frontend/src/components/nav/Layout.tsx b/src/frontend/src/components/nav/Layout.tsx index 741f6d14ad..c3b084c835 100644 --- a/src/frontend/src/components/nav/Layout.tsx +++ b/src/frontend/src/components/nav/Layout.tsx @@ -9,6 +9,7 @@ import { IconSearch } from '@tabler/icons-react'; import { type JSX, useEffect, useMemo, useState } from 'react'; import { Navigate, Outlet, useLocation, useNavigate } from 'react-router-dom'; +import { Boundary } from '@lib/components/Boundary'; import { identifierString } from '@lib/functions/Conversion'; import { ApiEndpoints, apiUrl } from '@lib/index'; import { useQuery } from '@tanstack/react-query'; @@ -20,7 +21,6 @@ import { useUserSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; -import { Boundary } from '../Boundary'; import GlobalImporterDrawer from '../importer/GlobalImporterDrawer'; import { ApiIcon } from '../items/ApiIcon'; import { useInvenTreeContext } from '../plugins/PluginContext'; diff --git a/src/frontend/src/components/nav/NotificationDrawer.tsx b/src/frontend/src/components/nav/NotificationDrawer.tsx index c8d8d890ed..285f1559f6 100644 --- a/src/frontend/src/components/nav/NotificationDrawer.tsx +++ b/src/frontend/src/components/nav/NotificationDrawer.tsx @@ -23,6 +23,7 @@ import { useQuery } from '@tanstack/react-query'; import { useCallback, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; +import { Boundary } from '@lib/components/Boundary'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import type { ModelType } from '@lib/enums/ModelType'; @@ -32,7 +33,6 @@ import { getBaseUrl } from '@lib/functions/Navigation'; import { navigateToLink } from '@lib/functions/Navigation'; import { api } from '../../App'; import { useUserState } from '../../states/UserState'; -import { Boundary } from '../Boundary'; import { StylishText } from '../items/StylishText'; /** diff --git a/src/frontend/src/components/nav/PageDetail.tsx b/src/frontend/src/components/nav/PageDetail.tsx index d133a557d5..922ccbfdf4 100644 --- a/src/frontend/src/components/nav/PageDetail.tsx +++ b/src/frontend/src/components/nav/PageDetail.tsx @@ -1,8 +1,8 @@ import { Group, Paper, Space, Stack, Text } from '@mantine/core'; import { useHotkeys } from '@mantine/hooks'; +import { shortenString } from '@lib/functions/String'; import { Fragment, type ReactNode, useMemo } from 'react'; -import { shortenString } from '../../functions/tables'; import { useUserSettingsState } from '../../states/SettingsStates'; import { ApiImage } from '../images/ApiImage'; import { StylishText } from '../items/StylishText'; diff --git a/src/frontend/src/components/nav/SearchDrawer.tsx b/src/frontend/src/components/nav/SearchDrawer.tsx index 931add12ae..1d5874eb6f 100644 --- a/src/frontend/src/components/nav/SearchDrawer.tsx +++ b/src/frontend/src/components/nav/SearchDrawer.tsx @@ -33,6 +33,7 @@ import { useQuery } from '@tanstack/react-query'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { type NavigateFunction, useNavigate } from 'react-router-dom'; +import { Boundary } from '@lib/components/Boundary'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import { ModelType } from '@lib/enums/ModelType'; @@ -48,7 +49,6 @@ import { showNotification } from '@mantine/notifications'; import { api } from '../../App'; import { useUserSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; -import { Boundary } from '../Boundary'; import { RenderInstance } from '../render/Instance'; import { getModelInfo } from '../render/ModelType'; diff --git a/src/frontend/src/components/panels/PanelGroup.tsx b/src/frontend/src/components/panels/PanelGroup.tsx index 8ec6084fae..c6d7015ec6 100644 --- a/src/frontend/src/components/panels/PanelGroup.tsx +++ b/src/frontend/src/components/panels/PanelGroup.tsx @@ -32,6 +32,7 @@ import { useParams } from 'react-router-dom'; +import { Boundary } from '@lib/components/Boundary'; import type { ModelType } from '@lib/enums/ModelType'; import { identifierString } from '@lib/functions/Conversion'; import { cancelEvent } from '@lib/functions/Events'; @@ -43,7 +44,6 @@ import { generateUrl } from '../../functions/urls'; import { usePluginPanels } from '../../hooks/UsePluginPanels'; import { useLocalState } from '../../states/LocalState'; import { vars } from '../../theme'; -import { Boundary } from '../Boundary'; import { StylishText } from '../items/StylishText'; import type { PanelGroupType, PanelType } from '../panels/Panel'; import * as classes from './PanelGroup.css'; diff --git a/src/frontend/src/components/plugins/PluginContext.tsx b/src/frontend/src/components/plugins/PluginContext.tsx index d306db7d3f..0c527fb507 100644 --- a/src/frontend/src/components/plugins/PluginContext.tsx +++ b/src/frontend/src/components/plugins/PluginContext.tsx @@ -17,7 +17,9 @@ import { INVENTREE_REACT_VERSION, type InvenTreePluginContext } from '@lib/types/Plugins'; +import type { InvenTreeTableRenderProps } from '@lib/types/Tables'; import { i18n } from '@lingui/core'; +import { useContextMenu } from 'mantine-contextmenu'; import { defaultLocale } from '../../contexts/LanguageContext'; import { useAddStockItem, @@ -43,6 +45,7 @@ import { openGlobalImporter } from '../../states/ImporterState'; import { useServerApiState } from '../../states/ServerApiState'; +import { InvenTreeTableInternal } from '../../tables/InvenTreeTable'; import { RenderInstance } from '../render/Instance'; export const useInvenTreeContext = () => { @@ -54,6 +57,7 @@ export const useInvenTreeContext = () => { const theme = useMantineTheme(); const globalSettings = useGlobalSettingsState(); const userSettings = useUserSettingsState(); + const { showContextMenu } = useContextMenu(); const contextData = useMemo(() => { return { @@ -83,6 +87,14 @@ export const useInvenTreeContext = () => { isOpen: () => getGlobalImporterState().isOpen, sessionId: () => getGlobalImporterState().sessionId }, + tables: { + renderTable: (props: InvenTreeTableRenderProps) => ( + + ) + }, forms: { bulkEdit: useBulkEditApiFormModal, create: useCreateApiFormModal, diff --git a/src/frontend/src/components/plugins/RemoteComponent.tsx b/src/frontend/src/components/plugins/RemoteComponent.tsx index 0b0c03823f..671dc7c5a0 100644 --- a/src/frontend/src/components/plugins/RemoteComponent.tsx +++ b/src/frontend/src/components/plugins/RemoteComponent.tsx @@ -3,6 +3,7 @@ import { Alert, MantineProvider, Stack, Text } from '@mantine/core'; import { IconExclamationCircle } from '@tabler/icons-react'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { Boundary } from '@lib/components/Boundary'; import { identifierString } from '@lib/functions/Conversion'; import type { InvenTreePluginContext } from '@lib/types/Plugins'; import { type Root, createRoot } from 'react-dom/client'; @@ -10,7 +11,6 @@ import { api, queryClient } from '../../App'; import { ApiProvider } from '../../contexts/ApiContext'; import { LanguageContext } from '../../contexts/LanguageContext'; import { useLocalState } from '../../states/LocalState'; -import { Boundary } from '../Boundary'; import { findExternalPluginFunction } from './PluginSource'; /** diff --git a/src/frontend/src/components/render/Instance.tsx b/src/frontend/src/components/render/Instance.tsx index d368f7554c..b21c820fd5 100644 --- a/src/frontend/src/components/render/Instance.tsx +++ b/src/frontend/src/components/render/Instance.tsx @@ -21,8 +21,8 @@ import type { RenderInstanceProps } from '@lib/types/Rendering'; export type { InstanceRenderInterface } from '@lib/types/Rendering'; +import { shortenString } from '@lib/functions/String'; import { useApi } from '../../contexts/ApiContext'; -import { shortenString } from '../../functions/tables'; import { Thumbnail } from '../images/Thumbnail'; import { RenderBuildItem, RenderBuildLine, RenderBuildOrder } from './Build'; import { diff --git a/src/frontend/src/components/render/Part.tsx b/src/frontend/src/components/render/Part.tsx index 14be70f6ce..ed5ddf7d9c 100644 --- a/src/frontend/src/components/render/Part.tsx +++ b/src/frontend/src/components/render/Part.tsx @@ -5,7 +5,7 @@ import type { ReactNode } from 'react'; import { ModelType } from '@lib/enums/ModelType'; import { formatDecimal } from '@lib/functions/Formatting'; import { getDetailUrl } from '@lib/functions/Navigation'; -import { shortenString } from '../../functions/tables'; +import { shortenString } from '@lib/functions/String'; import { TableHoverCard } from '../../tables/TableHoverCard'; import { ApiIcon } from '../items/ApiIcon'; import { type InstanceRenderInterface, RenderInlineModel } from './Instance'; diff --git a/src/frontend/src/components/render/Stock.tsx b/src/frontend/src/components/render/Stock.tsx index 1e5a13b25e..1ecd89809b 100644 --- a/src/frontend/src/components/render/Stock.tsx +++ b/src/frontend/src/components/render/Stock.tsx @@ -5,7 +5,7 @@ import type { ReactNode } from 'react'; import { ModelType } from '@lib/enums/ModelType'; import { formatDecimal } from '@lib/functions/Formatting'; import { getDetailUrl } from '@lib/functions/Navigation'; -import { shortenString } from '../../functions/tables'; +import { shortenString } from '@lib/functions/String'; import { TableHoverCard } from '../../tables/TableHoverCard'; import { ApiIcon } from '../items/ApiIcon'; import { diff --git a/src/frontend/src/components/settings/SettingItem.tsx b/src/frontend/src/components/settings/SettingItem.tsx index 8b9b3ef84e..d188eff8b2 100644 --- a/src/frontend/src/components/settings/SettingItem.tsx +++ b/src/frontend/src/components/settings/SettingItem.tsx @@ -13,13 +13,13 @@ import { import { IconEdit } from '@tabler/icons-react'; import { useCallback, useEffect, useMemo, useState } from 'react'; +import { Boundary } from '@lib/components/Boundary'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; import type { Setting } from '@lib/types/Settings'; import { api } from '../../App'; import { vars } from '../../theme'; -import { Boundary } from '../Boundary'; import { RenderInstance } from '../render/Instance'; type ConfirmResult = { diff --git a/src/frontend/src/components/wizards/OrderPartsWizard.tsx b/src/frontend/src/components/wizards/OrderPartsWizard.tsx index eaaa221733..2d74c5b130 100644 --- a/src/frontend/src/components/wizards/OrderPartsWizard.tsx +++ b/src/frontend/src/components/wizards/OrderPartsWizard.tsx @@ -1,5 +1,6 @@ import { ActionButton } from '@lib/components/ActionButton'; import { AddItemButton } from '@lib/components/AddItemButton'; +import { CopyButton } from '@lib/components/CopyButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; @@ -32,7 +33,6 @@ import { useCreateApiFormModal } from '../../hooks/UseForm'; import { useInstance } from '../../hooks/UseInstance'; import useWizard from '../../hooks/UseWizard'; import { RenderPartColumn } from '../../tables/ColumnRenderers'; -import { CopyButton } from '../buttons/CopyButton'; import RemoveRowButton from '../buttons/RemoveRowButton'; import { StandaloneField } from '../forms/StandaloneField'; import Expand from '../items/Expand'; diff --git a/src/frontend/src/components/wizards/WizardDrawer.tsx b/src/frontend/src/components/wizards/WizardDrawer.tsx index 1d5ea53ae9..2e134af509 100644 --- a/src/frontend/src/components/wizards/WizardDrawer.tsx +++ b/src/frontend/src/components/wizards/WizardDrawer.tsx @@ -1,3 +1,4 @@ +import { Boundary } from '@lib/components/Boundary'; import { t } from '@lingui/core/macro'; import { ActionIcon, @@ -16,7 +17,6 @@ import { IconCircleCheck } from '@tabler/icons-react'; import { type ReactNode, useCallback, useMemo } from 'react'; -import { Boundary } from '../Boundary'; import { StylishText } from '../items/StylishText'; /** diff --git a/src/frontend/src/contexts/LanguageContext.tsx b/src/frontend/src/contexts/LanguageContext.tsx index ef6d8b902e..2bf33232ad 100644 --- a/src/frontend/src/contexts/LanguageContext.tsx +++ b/src/frontend/src/contexts/LanguageContext.tsx @@ -3,11 +3,11 @@ import { I18nProvider } from '@lingui/react'; import { LoadingOverlay, Text } from '@mantine/core'; import { type JSX, useEffect, useRef, useState } from 'react'; +import { useStoredTableState } from '@lib/states/StoredTableState'; import { useShallow } from 'zustand/react/shallow'; import { api } from '../App'; import { useLocalState } from '../states/LocalState'; import { useServerApiState } from '../states/ServerApiState'; -import { useStoredTableState } from '../states/StoredTableState'; import { fetchGlobalStates } from '../states/states'; export const defaultLocale = 'en'; diff --git a/src/frontend/src/functions/forms.tsx b/src/frontend/src/functions/forms.tsx index 6b2c6fb563..a2c59cef73 100644 --- a/src/frontend/src/functions/forms.tsx +++ b/src/frontend/src/functions/forms.tsx @@ -1,28 +1,6 @@ -import type { AxiosResponse } from 'axios'; - -import type { ApiEndpoints } from '@lib/enums/ApiEndpoints'; -import { apiUrl } from '@lib/functions/Api'; -import type { PathParams } from '@lib/types/Core'; +import { invalidResponse, permissionDenied } from '@lib/functions/Notification'; import type { ApiFormFieldSet, ApiFormFieldType } from '@lib/types/Forms'; -import { invalidResponse, permissionDenied } from './notifications'; - -/** - * Construct an API url from the provided ApiFormProps object - */ -export function constructFormUrl( - url: ApiEndpoints | string, - pk?: string | number, - pathParams?: PathParams, - queryParams?: URLSearchParams -): string { - let formUrl = apiUrl(url, pk, pathParams); - - if (queryParams) { - formUrl += `?${queryParams.toString()}`; - } - - return formUrl; -} +import type { AxiosResponse } from 'axios'; /** * Extract the available fields (for a given method) from the response object @@ -104,30 +82,6 @@ export function extractAvailableFields( return processFields(actions[method]); } -export type NestedDict = { [key: string]: string | number | NestedDict }; -export function mapFields( - fields: ApiFormFieldSet, - fieldFunction: (path: string, value: ApiFormFieldType, key: string) => any, - _path?: string -): NestedDict { - const res: NestedDict = {}; - - for (const [k, v] of Object.entries(fields)) { - const path = _path ? `${_path}.${k}` : k; - let value: any; - - if (v.field_type === 'nested object' && v.children) { - value = mapFields(v.children, fieldFunction, path); - } else { - value = fieldFunction(path, v, k); - } - - if (value !== undefined) res[k] = value; - } - - return res; -} - /* * Build a complete field definition based on the provided data */ diff --git a/src/frontend/src/functions/notifications.tsx b/src/frontend/src/functions/notifications.tsx index 90fc97ba68..e84c6faac0 100644 --- a/src/frontend/src/functions/notifications.tsx +++ b/src/frontend/src/functions/notifications.tsx @@ -1,56 +1,7 @@ -import { t } from '@lingui/core/macro'; import { notifications } from '@mantine/notifications'; import { IconCircleCheck, IconExclamationCircle } from '@tabler/icons-react'; import { extractErrorMessage } from './api'; -/** - * Show a notification that the feature is not yet implemented - */ -export function notYetImplemented() { - notifications.hide('not-implemented'); - - notifications.show({ - title: t`Not implemented`, - message: t`This feature is not yet implemented`, - color: 'red', - id: 'not-implemented' - }); -} - -/** - * Show a notification that the user does not have permission to perform the action - */ -export function permissionDenied() { - notifications.show({ - title: t`Permission Denied`, - message: t`You do not have permission to perform this action`, - color: 'red' - }); -} - -/** - * Display a notification on an invalid return code - */ -export function invalidResponse(returnCode: number) { - // TODO: Specific return code messages - notifications.show({ - title: t`Invalid Return Code`, - message: t`Server returned status ${returnCode}`, - color: 'red' - }); -} - -/** - * Display a notification on timeout - */ -export function showTimeoutNotification() { - notifications.show({ - title: t`Timeout`, - message: t`The request timed out`, - color: 'red' - }); -} - /* * Display a login / logout notification message. * Any existing login notification(s) will be hidden. diff --git a/src/frontend/src/hooks/UseCalendar.tsx b/src/frontend/src/hooks/UseCalendar.tsx index 9d86ccdd8c..5c7556b5b3 100644 --- a/src/frontend/src/hooks/UseCalendar.tsx +++ b/src/frontend/src/hooks/UseCalendar.tsx @@ -1,6 +1,7 @@ import type FullCalendar from '@fullcalendar/react'; import type { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useFilterSet from '@lib/hooks/UseFilterSet'; import type { FilterSetState } from '@lib/types/Filters'; import type { UseModalReturn } from '@lib/types/Modals'; import type { DateValue } from '@mantine/dates'; @@ -10,7 +11,6 @@ import { useCallback, useMemo, useRef, useState } from 'react'; import { api } from '../App'; import { showApiErrorMessage } from '../functions/notifications'; import useDataExport from './UseDataExport'; -import { useFilterSet } from './UseFilterSet'; /* * Type definition for representing the state of a calendar: diff --git a/src/frontend/src/pages/Index/Scan.tsx b/src/frontend/src/pages/Index/Scan.tsx index 51d77a055b..a09fa8aba2 100644 --- a/src/frontend/src/pages/Index/Scan.tsx +++ b/src/frontend/src/pages/Index/Scan.tsx @@ -23,6 +23,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import type { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import { notYetImplemented } from '@lib/functions/Notification'; import { hideNotification, showNotification } from '@mantine/notifications'; import dayjs from 'dayjs'; import { api } from '../../App'; @@ -30,10 +31,7 @@ import { BarcodeInput } from '../../components/barcodes/BarcodeInput'; import type { BarcodeScanItem } from '../../components/barcodes/BarcodeScanItem'; import { StylishText } from '../../components/items/StylishText'; import PageTitle from '../../components/nav/PageTitle'; -import { - notYetImplemented, - showApiErrorMessage -} from '../../functions/notifications'; +import { showApiErrorMessage } from '../../functions/notifications'; import BarcodeScanTable from '../../tables/general/BarcodeScanTable'; export default function Scan() { diff --git a/src/frontend/src/pages/Index/Settings/AccountSettings/MFASettings.tsx b/src/frontend/src/pages/Index/Settings/AccountSettings/MFASettings.tsx index c59121d306..57287cc9c3 100644 --- a/src/frontend/src/pages/Index/Settings/AccountSettings/MFASettings.tsx +++ b/src/frontend/src/pages/Index/Settings/AccountSettings/MFASettings.tsx @@ -1,4 +1,5 @@ import { create } from '@github/webauthn-json/browser-ponyfill'; +import { CopyButton } from '@lib/components/CopyButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; import { FlowEnum } from '@lib/types/Auth'; @@ -31,7 +32,6 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useShallow } from 'zustand/react/shallow'; import { api, queryClient } from '../../../../App'; -import { CopyButton } from '../../../../components/buttons/CopyButton'; import { StylishText } from '../../../../components/items/StylishText'; import { authApi, doLogout } from '../../../../functions/auth'; import { useServerApiState } from '../../../../states/ServerApiState'; diff --git a/src/frontend/src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx b/src/frontend/src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx index 47f6f85d90..aec89f9a99 100644 --- a/src/frontend/src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx +++ b/src/frontend/src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx @@ -1,8 +1,8 @@ +import { CopyButton } from '@lib/components/CopyButton'; import { t } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { Divider, Group, Paper, Stack, Text, TextInput } from '@mantine/core'; import { QRCode } from '../../../../components/barcodes/QRCode'; -import { CopyButton } from '../../../../components/buttons/CopyButton'; export function QrRegistrationForm({ url, diff --git a/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx b/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx index fa0b8156aa..c4da72c5d8 100644 --- a/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx +++ b/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx @@ -1,3 +1,4 @@ +import { DefaultFallback } from '@lib/components/Boundary'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; import type { AuthConfig, AuthProvider } from '@lib/types/Auth'; @@ -30,7 +31,6 @@ import { import { useQuery } from '@tanstack/react-query'; import { useCallback, useMemo, useState } from 'react'; import { useShallow } from 'zustand/react/shallow'; -import { DefaultFallback } from '../../../../components/Boundary'; import { StylishText } from '../../../../components/items/StylishText'; import { ProviderLogin, authApi } from '../../../../functions/auth'; import { useServerApiState } from '../../../../states/ServerApiState'; diff --git a/src/frontend/src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx b/src/frontend/src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx index 7e1ca77049..7570736537 100644 --- a/src/frontend/src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx +++ b/src/frontend/src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx @@ -7,11 +7,11 @@ import { useCallback, useMemo, useState } from 'react'; import { ActionButton } from '@lib/components/ActionButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { api } from '../../../../App'; import { FactCollection } from '../../../../components/settings/FactCollection'; import { GlobalSettingList } from '../../../../components/settings/SettingList'; import { showApiErrorMessage } from '../../../../functions/notifications'; -import { useTable } from '../../../../hooks/UseTable'; import { InvenTreeTable } from '../../../../tables/InvenTreeTable'; /* diff --git a/src/frontend/src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx b/src/frontend/src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx index 658d84840f..a59993c3fb 100644 --- a/src/frontend/src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx +++ b/src/frontend/src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx @@ -4,8 +4,8 @@ import { useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { StylishText } from '../../../../components/items/StylishText'; -import { useTable } from '../../../../hooks/UseTable'; import { BooleanColumn } from '../../../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../../../tables/InvenTreeTable'; import CustomUnitsTable from '../../../../tables/settings/CustomUnitsTable'; diff --git a/src/frontend/src/pages/Notifications.tsx b/src/frontend/src/pages/Notifications.tsx index 00656f3889..a5e1dec080 100644 --- a/src/frontend/src/pages/Notifications.tsx +++ b/src/frontend/src/pages/Notifications.tsx @@ -13,10 +13,10 @@ import { useCallback, useMemo } from 'react'; import { ActionButton } from '@lib/components/ActionButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { PageDetail } from '../components/nav/PageDetail'; import { PanelGroup } from '../components/panels/PanelGroup'; import { useApi } from '../contexts/ApiContext'; -import { useTable } from '../hooks/UseTable'; import { NotificationTable } from '../tables/notifications/NotificationTable'; export default function NotificationsPage() { diff --git a/src/frontend/src/pages/part/PartStockHistoryDetail.tsx b/src/frontend/src/pages/part/PartStockHistoryDetail.tsx index 8a7ded28b8..2c375f2295 100644 --- a/src/frontend/src/pages/part/PartStockHistoryDetail.tsx +++ b/src/frontend/src/pages/part/PartStockHistoryDetail.tsx @@ -2,6 +2,7 @@ import { RowDeleteAction, RowEditAction } from '@lib/components/RowActions'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { AddItemButton } from '@lib/index'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; @@ -25,7 +26,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DateColumn, DecimalColumn } from '../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../tables/InvenTreeTable'; diff --git a/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx b/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx index e932431965..1eeb3fdd64 100644 --- a/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx +++ b/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx @@ -13,11 +13,11 @@ import { type ReactNode, useMemo, useState } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { CHART_COLORS } from '../../../components/charts/colors'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; import { formatDecimal, formatPriceRange } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { DateColumn, PartColumn } from '../../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { LoadingPricingData, NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx b/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx index 57f7c60a97..8151a55e62 100644 --- a/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx +++ b/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx @@ -12,6 +12,7 @@ import { import type { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; @@ -21,7 +22,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../../hooks/UseForm'; -import { useTable } from '../../../hooks/UseTable'; import { useUserState } from '../../../states/UserState'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx b/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx index 53f71388be..60b3f6fb3a 100644 --- a/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx +++ b/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx @@ -5,9 +5,9 @@ import { type ReactNode, useCallback, useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency, formatDate } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx b/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx index 1f38d460c1..cdd6c4b224 100644 --- a/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx +++ b/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx @@ -5,9 +5,9 @@ import { type ReactNode, useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { DateColumn } from '../../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx b/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx index e807d84a4c..48982989d5 100644 --- a/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx +++ b/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx @@ -5,9 +5,9 @@ import { useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; -import { useTable } from '../../../hooks/UseTable'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { SupplierPriceBreakColumns, diff --git a/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx b/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx index faffca8a7e..6aa8911d75 100644 --- a/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx +++ b/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx @@ -6,10 +6,10 @@ import { type ReactNode, useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; import { formatCurrency } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { DateColumn, PartColumn } from '../../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/tables/InvenTreeTable.tsx b/src/frontend/src/tables/InvenTreeTable.tsx index d290eafb48..91e8570fd2 100644 --- a/src/frontend/src/tables/InvenTreeTable.tsx +++ b/src/frontend/src/tables/InvenTreeTable.tsx @@ -1,12 +1,21 @@ +import { Boundary } from '@lib/components/Boundary'; +import { CopyableCell } from '@lib/components/CopyableCell'; import { RowActions } from '@lib/components/RowActions'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import { resolveItem } from '@lib/functions/Conversion'; import { cancelEvent } from '@lib/functions/Events'; +import { mapFields } from '@lib/functions/Forms'; import { getDetailUrl } from '@lib/functions/Navigation'; import { navigateToLink } from '@lib/functions/Navigation'; +import { hashString } from '@lib/functions/String'; +import { useStoredTableState } from '@lib/states/StoredTableState'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; -import type { InvenTreeTableProps, TableState } from '@lib/types/Tables'; +import type { + InvenTreeTableProps, + InvenTreeTableRenderProps, + TableState +} from '@lib/types/Tables'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; import { Box, Stack } from '@mantine/core'; @@ -24,16 +33,12 @@ import { } from 'mantine-datatable'; import type React from 'react'; import { useCallback, useEffect, useMemo, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { Boundary } from '../components/Boundary'; +import { useNavigate, useSearchParams } from 'react-router-dom'; import { useApi } from '../contexts/ApiContext'; -import { extractAvailableFields, mapFields } from '../functions/forms'; +import { extractAvailableFields } from '../functions/forms'; import { showApiErrorMessage } from '../functions/notifications'; -import { hashString } from '../functions/tables'; import { useLocalState } from '../states/LocalState'; import { useUserSettingsState } from '../states/SettingsStates'; -import { useStoredTableState } from '../states/StoredTableState'; -import { CopyableCell } from './CopyableCell'; import InvenTreeTableHeader from './InvenTreeTableHeader'; const ACTIONS_COLUMN_ACCESSOR: string = '--actions--'; @@ -62,20 +67,27 @@ const defaultInvenTreeTableProps: InvenTreeTableProps = { /** * Table Component which extends DataTable with custom InvenTree functionality + * + * This component is not used directly - instead, the "InvenTreeTable" component is a wrapper, + * which provides the necessary context and state management for this internal component. + * + * This function is also provided to the plugin context, and when used by external plugins, + * it must be supplied with with following additional context items: + * - api: AxiosInstance - The API instance for making requests to the server + * - navigate: NavigateFunction - The navigation function for navigating to different pages */ -export function InvenTreeTable>({ +export function InvenTreeTableInternal>({ url, tableState, tableData, columns, - props -}: Readonly<{ - url?: string; - tableState: TableState; - tableData?: any[]; - columns: TableColumn[]; - props: InvenTreeTableProps; -}>) { + props, + api, + navigate, + showContextMenu, + searchParams, + setSearchParams +}: Readonly>) { const { userTheme } = useLocalState(); const { @@ -91,10 +103,6 @@ export function InvenTreeTable>({ const [fieldNames, setFieldNames] = useState>({}); - const api = useApi(); - const navigate = useNavigate(); - const { showContextMenu } = useContextMenu(); - const userSettings = useUserSettingsState(); const stickyTableHeader = useMemo(() => { @@ -388,11 +396,7 @@ export function InvenTreeTable>({ useEffect(() => { tableState.setPage(1); tableState.clearSelectedRecords(); - }, [ - tableState.searchTerm, - tableState.filterSet.activeFilters, - tableState.queryFilters - ]); + }, [tableState.searchTerm, tableState.filterSet.activeFilters, searchParams]); // Account for invalid page offsets useEffect(() => { @@ -426,9 +430,9 @@ export function InvenTreeTable>({ ...tableProps.params }; - if (tableState.queryFilters && tableState.queryFilters.size > 0) { + if (searchParams && searchParams.size > 0) { // Allow override of filters based on URL query parameters - for (const [key, value] of tableState.queryFilters) { + for (const [key, value] of searchParams) { queryParams[key] = value; } } else if (tableState.filterSet.activeFilters) { @@ -467,7 +471,7 @@ export function InvenTreeTable>({ tableProps.params, tableProps.enablePagination, tableState.filterSet.activeFilters, - tableState.queryFilters, + searchParams, tableState.searchTerm, getOrderingTerm ] @@ -609,7 +613,7 @@ export function InvenTreeTable>({ // Refetch data when the query parameters change useEffect(() => { refetch(); - }, [tableState.queryFilters]); + }, [searchParams]); useEffect(() => { const loading: boolean = @@ -705,7 +709,7 @@ export function InvenTreeTable>({ const empty = () => {}; let items: ContextMenuItemOptions[] = []; - if (props.rowActions) { + if (!!props.rowActions) { items = props.rowActions(record).map((action) => ({ key: action.title ?? '', title: action.title ?? '', @@ -743,7 +747,7 @@ export function InvenTreeTable>({ }); } - return showContextMenu(items)(event); + return showContextMenu?.(items)(event); }; // Pagination refresh table if pageSize changes @@ -825,6 +829,8 @@ export function InvenTreeTable>({ hasSwitchableColumns={hasSwitchableColumns} columns={dataColumns} filters={filters} + queryFilters={searchParams} + clearQueryFilters={() => setSearchParams?.(new URLSearchParams())} toggleColumn={toggleColumn} /> @@ -874,3 +880,51 @@ export function InvenTreeTable>({ ); } + +/** + * This is an internal wrapper function for the InvenTreeTableInternal component, + * which provides the necessary context management for the table to function correctly. + * + * In addition to the provided table props, this wrapper provides context for: + * + * - api: The API instance for making requests to the server + * - navigate: The navigation function for navigating to different pages + * + */ +export function InvenTreeTable>({ + url, + tableState, + tableData, + columns, + props +}: Readonly<{ + url?: string; + tableState: TableState; + tableData?: T[]; + columns: TableColumn[]; + props: InvenTreeTableProps; +}>) { + const api = useApi(); + const navigate = useNavigate(); + + const { showContextMenu } = useContextMenu(); + + // Extract URL query parameters (e.g. ?active=true&overdue=false) + // Note: These can only be used internally (i.e *not in plugin context) + const [searchParams, setSearchParams] = useSearchParams(); + + return ( + + ); +} diff --git a/src/frontend/src/tables/InvenTreeTableHeader.tsx b/src/frontend/src/tables/InvenTreeTableHeader.tsx index d5d6b45c27..30e8e771d3 100644 --- a/src/frontend/src/tables/InvenTreeTableHeader.tsx +++ b/src/frontend/src/tables/InvenTreeTableHeader.tsx @@ -23,19 +23,19 @@ import { useMemo, useState } from 'react'; import { Fragment } from 'react/jsx-runtime'; import { ActionButton } from '@lib/components/ActionButton'; +import { Boundary } from '@lib/components/Boundary'; import { ButtonMenu } from '@lib/components/ButtonMenu'; import { SearchInput } from '@lib/components/SearchInput'; +import { TableColumnSelect } from '@lib/components/TableColumnSelect'; import { resolveItem } from '@lib/functions/Conversion'; import type { TableFilter } from '@lib/types/Filters'; import type { TableState } from '@lib/types/Tables'; import type { InvenTreeTableProps } from '@lib/types/Tables'; import { showNotification } from '@mantine/notifications'; -import { Boundary } from '../components/Boundary'; import { PrintingActions } from '../components/buttons/PrintingActions'; import { StylishText } from '../components/items/StylishText'; import useDataExport from '../hooks/UseDataExport'; import { useDeleteApiFormModal } from '../hooks/UseForm'; -import { TableColumnSelect } from './ColumnSelect'; import { FilterPreview, FilterSelectDrawer } from './FilterSelectDrawer'; /** @@ -48,6 +48,8 @@ export default function InvenTreeTableHeader({ hasSwitchableColumns, columns, filters, + queryFilters, + clearQueryFilters, toggleColumn }: Readonly<{ tableUrl?: string; @@ -56,6 +58,8 @@ export default function InvenTreeTableHeader({ hasSwitchableColumns: boolean; columns: any; filters: TableFilter[]; + queryFilters?: URLSearchParams; + clearQueryFilters: () => void; toggleColumn: (column: string) => void; }>) { // Filter list visibility @@ -80,8 +84,8 @@ export default function InvenTreeTableHeader({ } // Allow overriding of query parameters - if (tableState.queryFilters) { - for (const [key, value] of tableState.queryFilters) { + if (queryFilters) { + for (const [key, value] of queryFilters) { if (value != undefined) { filters[key] = value; } @@ -89,7 +93,7 @@ export default function InvenTreeTableHeader({ } return filters; - }, [tableProps.params, tableState.filterSet, tableState.queryFilters]); + }, [tableProps.params, tableState.filterSet, queryFilters]); const exportModal = useDataExport({ url: tableUrl ?? '', @@ -139,12 +143,12 @@ export default function InvenTreeTableHeader({ }); const hasCustomSearch = useMemo(() => { - return tableState.queryFilters.has('search'); - }, [tableState.queryFilters]); + return queryFilters?.has('search'); + }, [queryFilters]); const hasCustomFilters = useMemo(() => { - return (tableState?.queryFilters?.size ?? 0) > 0; - }, [tableState.queryFilters]); + return (queryFilters?.size ?? 0) > 0; + }, [queryFilters]); // Extract ID values for label and report printing const printingIdValues = useMemo(() => { @@ -174,7 +178,7 @@ export default function InvenTreeTableHeader({ color='yellow' withCloseButton title={t`Custom table filters are active`} - onClose={() => tableState.clearQueryFilters()} + onClose={() => clearQueryFilters()} /> )} diff --git a/src/frontend/src/tables/bom/BomTable.tsx b/src/frontend/src/tables/bom/BomTable.tsx index 09a2c7ee1c..61d064c1c3 100644 --- a/src/frontend/src/tables/bom/BomTable.tsx +++ b/src/frontend/src/tables/bom/BomTable.tsx @@ -9,6 +9,7 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { navigateToLink } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; @@ -37,7 +38,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useImporterState } from '../../states/ImporterState'; import { useUserState } from '../../states/UserState'; import { diff --git a/src/frontend/src/tables/bom/UsedInTable.tsx b/src/frontend/src/tables/bom/UsedInTable.tsx index 0134d1a4ec..272e9a43c0 100644 --- a/src/frontend/src/tables/bom/UsedInTable.tsx +++ b/src/frontend/src/tables/bom/UsedInTable.tsx @@ -5,13 +5,13 @@ import { useCallback, useMemo, useState } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { RowEditAction, UserRoles } from '@lib/index'; import type { TableFilter } from '@lib/types/Filters'; import type { RowAction, TableColumn } from '@lib/types/Tables'; import { formatDecimal } from '../../defaults/formatters'; import { bomItemFields } from '../../forms/BomForms'; import { useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DescriptionColumn, diff --git a/src/frontend/src/tables/build/BuildAllocatedStockTable.tsx b/src/frontend/src/tables/build/BuildAllocatedStockTable.tsx index bbeff526d3..ca70958099 100644 --- a/src/frontend/src/tables/build/BuildAllocatedStockTable.tsx +++ b/src/frontend/src/tables/build/BuildAllocatedStockTable.tsx @@ -6,6 +6,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { ActionButton, formatDecimal } from '@lib/index'; import type { TableFilter } from '@lib/types/Filters'; import type { StockOperationProps } from '@lib/types/Forms'; @@ -19,7 +20,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import { useStockAdjustActions } from '../../hooks/UseStockAdjustActions'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DecimalColumn, diff --git a/src/frontend/src/tables/build/BuildLineTable.tsx b/src/frontend/src/tables/build/BuildLineTable.tsx index 559303666a..2e0a07a18a 100644 --- a/src/frontend/src/tables/build/BuildLineTable.tsx +++ b/src/frontend/src/tables/build/BuildLineTable.tsx @@ -22,6 +22,7 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { formatDecimal } from '@lib/functions/Formatting'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { RowAction, TableColumn } from '@lib/types/Tables'; import OrderPartsWizard from '../../components/wizards/OrderPartsWizard'; @@ -38,7 +39,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import useStatusCodes from '../../hooks/UseStatusCodes'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, diff --git a/src/frontend/src/tables/build/BuildOrderTable.tsx b/src/frontend/src/tables/build/BuildOrderTable.tsx index b4480256ca..bc875ebb37 100644 --- a/src/frontend/src/tables/build/BuildOrderTable.tsx +++ b/src/frontend/src/tables/build/BuildOrderTable.tsx @@ -7,10 +7,10 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import { useBuildOrderFields } from '../../forms/BuildForms'; import { useCreateApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useGlobalSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; import { diff --git a/src/frontend/src/tables/build/BuildOutputTable.tsx b/src/frontend/src/tables/build/BuildOutputTable.tsx index f02c28e92a..497d5d2d0a 100644 --- a/src/frontend/src/tables/build/BuildOutputTable.tsx +++ b/src/frontend/src/tables/build/BuildOutputTable.tsx @@ -28,6 +28,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { StockOperationProps } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -52,7 +53,6 @@ import { } from '../../hooks/UseForm'; import useStatusCodes from '../../hooks/UseStatusCodes'; import { useStockAdjustActions } from '../../hooks/UseStockAdjustActions'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { LocationColumn, diff --git a/src/frontend/src/tables/company/AddressTable.tsx b/src/frontend/src/tables/company/AddressTable.tsx index a51e381c18..8114bf1f24 100644 --- a/src/frontend/src/tables/company/AddressTable.tsx +++ b/src/frontend/src/tables/company/AddressTable.tsx @@ -11,6 +11,7 @@ import { YesNoButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; import { @@ -18,7 +19,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { LinkColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/company/CompanyTable.tsx b/src/frontend/src/tables/company/CompanyTable.tsx index 13d9c61159..9856579709 100644 --- a/src/frontend/src/tables/company/CompanyTable.tsx +++ b/src/frontend/src/tables/company/CompanyTable.tsx @@ -9,13 +9,13 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { navigateToLink } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import { companyFields } from '../../forms/CompanyForms'; import { useCreateApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, diff --git a/src/frontend/src/tables/company/ContactTable.tsx b/src/frontend/src/tables/company/ContactTable.tsx index 33082b96b3..b2dcbb95ce 100644 --- a/src/frontend/src/tables/company/ContactTable.tsx +++ b/src/frontend/src/tables/company/ContactTable.tsx @@ -12,6 +12,7 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; import { useNavigate } from 'react-router-dom'; @@ -21,7 +22,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/general/AttachmentTable.tsx b/src/frontend/src/tables/general/AttachmentTable.tsx index 5b5e2ff58a..9608b79ace 100644 --- a/src/frontend/src/tables/general/AttachmentTable.tsx +++ b/src/frontend/src/tables/general/AttachmentTable.tsx @@ -22,6 +22,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import type { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -33,7 +34,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/general/BarcodeScanTable.tsx b/src/frontend/src/tables/general/BarcodeScanTable.tsx index 60b2546e73..ad67ff523d 100644 --- a/src/frontend/src/tables/general/BarcodeScanTable.tsx +++ b/src/frontend/src/tables/general/BarcodeScanTable.tsx @@ -1,5 +1,6 @@ import { ActionButton } from '@lib/components/ActionButton'; import { type RowAction, RowViewAction } from '@lib/components/RowActions'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; import { IconTrash } from '@tabler/icons-react'; @@ -7,7 +8,6 @@ import { useCallback, useEffect, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; import type { BarcodeScanItem } from '../../components/barcodes/BarcodeScanItem'; import { RenderInstance } from '../../components/render/Instance'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/general/ExtraLineItemTable.tsx b/src/frontend/src/tables/general/ExtraLineItemTable.tsx index 299a7b07ef..88b490a21f 100644 --- a/src/frontend/src/tables/general/ExtraLineItemTable.tsx +++ b/src/frontend/src/tables/general/ExtraLineItemTable.tsx @@ -11,6 +11,7 @@ import { import type { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import type { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency } from '../../defaults/formatters'; import { extraLineItemFields } from '../../forms/CommonForms'; @@ -19,7 +20,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DecimalColumn, diff --git a/src/frontend/src/tables/general/ParameterTable.tsx b/src/frontend/src/tables/general/ParameterTable.tsx index 71ced6820f..6883682ab0 100644 --- a/src/frontend/src/tables/general/ParameterTable.tsx +++ b/src/frontend/src/tables/general/ParameterTable.tsx @@ -1,3 +1,4 @@ +import useTable from '@lib/hooks/UseTable'; import { ApiEndpoints, ModelType, @@ -20,7 +21,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useImporterState } from '../../states/ImporterState'; import { useUserState } from '../../states/UserState'; import { diff --git a/src/frontend/src/tables/general/ParameterTemplateTable.tsx b/src/frontend/src/tables/general/ParameterTemplateTable.tsx index ee37a464b5..e95bf90421 100644 --- a/src/frontend/src/tables/general/ParameterTemplateTable.tsx +++ b/src/frontend/src/tables/general/ParameterTemplateTable.tsx @@ -1,3 +1,4 @@ +import useTable from '@lib/hooks/UseTable'; import { AddItemButton, ApiEndpoints, @@ -18,7 +19,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, DescriptionColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/general/ParametricDataTable.tsx b/src/frontend/src/tables/general/ParametricDataTable.tsx index 0bfa12a62c..5d22505190 100644 --- a/src/frontend/src/tables/general/ParametricDataTable.tsx +++ b/src/frontend/src/tables/general/ParametricDataTable.tsx @@ -1,4 +1,5 @@ import { cancelEvent } from '@lib/functions/Events'; +import useTable from '@lib/hooks/UseTable'; import { ApiEndpoints, type ApiFormFieldSet, @@ -25,7 +26,6 @@ import { useCreateApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; import { TableHoverCard } from '../TableHoverCard'; diff --git a/src/frontend/src/tables/machine/MachineListTable.tsx b/src/frontend/src/tables/machine/MachineListTable.tsx index 7ded77a8cf..eaceffa7a3 100644 --- a/src/frontend/src/tables/machine/MachineListTable.tsx +++ b/src/frontend/src/tables/machine/MachineListTable.tsx @@ -26,6 +26,7 @@ import { AddItemButton } from '@lib/components/AddItemButton'; import { YesNoButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { RowDeleteAction, RowEditAction, formatDecimal } from '@lib/index'; import type { RowAction, TableColumn } from '@lib/types/Tables'; import type { InvenTreeTableProps } from '@lib/types/Tables'; @@ -54,7 +55,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { BooleanColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; import type { MachineDriverI, MachineTypeI } from './MachineTypeTable'; diff --git a/src/frontend/src/tables/machine/MachineTypeTable.tsx b/src/frontend/src/tables/machine/MachineTypeTable.tsx index c9aebc29e8..c3cd11998a 100644 --- a/src/frontend/src/tables/machine/MachineTypeTable.tsx +++ b/src/frontend/src/tables/machine/MachineTypeTable.tsx @@ -20,12 +20,12 @@ import { useNavigate } from 'react-router-dom'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import type { InvenTreeTableProps } from '@lib/types/Tables'; import { InfoItem } from '../../components/items/InfoItem'; import { StylishText } from '../../components/items/StylishText'; import { DetailDrawer } from '../../components/nav/DetailDrawer'; -import { useTable } from '../../hooks/UseTable'; import { BooleanColumn, DescriptionColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; import { MachineListTable, useMachineTypeDriver } from './MachineListTable'; diff --git a/src/frontend/src/tables/part/PartBuildAllocationsTable.tsx b/src/frontend/src/tables/part/PartBuildAllocationsTable.tsx index ee4b58f650..47b2dc5d42 100644 --- a/src/frontend/src/tables/part/PartBuildAllocationsTable.tsx +++ b/src/frontend/src/tables/part/PartBuildAllocationsTable.tsx @@ -10,10 +10,10 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { IconCircleCheck } from '@tabler/icons-react'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DescriptionColumn, diff --git a/src/frontend/src/tables/part/PartCategoryTable.tsx b/src/frontend/src/tables/part/PartCategoryTable.tsx index 3505b45da6..6c972f6321 100644 --- a/src/frontend/src/tables/part/PartCategoryTable.tsx +++ b/src/frontend/src/tables/part/PartCategoryTable.tsx @@ -10,6 +10,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { ActionDropdown } from '../../components/items/ActionDropdown'; @@ -21,7 +22,6 @@ import { useCreateApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DescriptionColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/part/PartCategoryTemplateTable.tsx b/src/frontend/src/tables/part/PartCategoryTemplateTable.tsx index 604e18609a..362c863e23 100644 --- a/src/frontend/src/tables/part/PartCategoryTemplateTable.tsx +++ b/src/frontend/src/tables/part/PartCategoryTemplateTable.tsx @@ -11,6 +11,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -19,7 +20,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/part/PartPurchaseOrdersTable.tsx b/src/frontend/src/tables/part/PartPurchaseOrdersTable.tsx index 213d081c7a..f4cff53948 100644 --- a/src/frontend/src/tables/part/PartPurchaseOrdersTable.tsx +++ b/src/frontend/src/tables/part/PartPurchaseOrdersTable.tsx @@ -6,10 +6,10 @@ import { ProgressBar } from '@lib/components/ProgressBar'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency, formatDecimal } from '../../defaults/formatters'; -import { useTable } from '../../hooks/UseTable'; import { DateColumn, ReferenceColumn, StatusColumn } from '../ColumnRenderers'; import { IncludeVariantsFilter, StatusFilterOptions } from '../Filter'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/part/PartSalesAllocationsTable.tsx b/src/frontend/src/tables/part/PartSalesAllocationsTable.tsx index 516bb456de..e74d4d7dad 100644 --- a/src/frontend/src/tables/part/PartSalesAllocationsTable.tsx +++ b/src/frontend/src/tables/part/PartSalesAllocationsTable.tsx @@ -10,9 +10,9 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DescriptionColumn, diff --git a/src/frontend/src/tables/part/PartTable.tsx b/src/frontend/src/tables/part/PartTable.tsx index 27fa146186..0041e77ae8 100644 --- a/src/frontend/src/tables/part/PartTable.tsx +++ b/src/frontend/src/tables/part/PartTable.tsx @@ -7,6 +7,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -33,7 +34,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import { usePluginsWithMixin } from '../../hooks/UsePlugins'; -import { useTable } from '../../hooks/UseTable'; import { useImporterState } from '../../states/ImporterState'; import { useGlobalSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; diff --git a/src/frontend/src/tables/part/PartTestResultTable.tsx b/src/frontend/src/tables/part/PartTestResultTable.tsx index 6a67fb4a20..a2079ee6a7 100644 --- a/src/frontend/src/tables/part/PartTestResultTable.tsx +++ b/src/frontend/src/tables/part/PartTestResultTable.tsx @@ -15,6 +15,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; import { cancelEvent } from '@lib/functions/Events'; +import useTable from '@lib/hooks/UseTable'; import { AddItemButton } from '@lib/index'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; @@ -25,7 +26,6 @@ import { useApi } from '../../contexts/ApiContext'; import { formatDate } from '../../defaults/formatters'; import { useTestResultFields } from '../../forms/StockForms'; import { useCreateApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { LocationColumn, PartColumn } from '../ColumnRenderers'; import { BatchFilter, diff --git a/src/frontend/src/tables/part/PartTestTemplateTable.tsx b/src/frontend/src/tables/part/PartTestTemplateTable.tsx index f1779b8b05..fc8bb02081 100644 --- a/src/frontend/src/tables/part/PartTestTemplateTable.tsx +++ b/src/frontend/src/tables/part/PartTestTemplateTable.tsx @@ -17,6 +17,7 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -25,7 +26,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, DescriptionColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/part/RelatedPartTable.tsx b/src/frontend/src/tables/part/RelatedPartTable.tsx index ab9f098e5f..1714239287 100644 --- a/src/frontend/src/tables/part/RelatedPartTable.tsx +++ b/src/frontend/src/tables/part/RelatedPartTable.tsx @@ -12,6 +12,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; import { Thumbnail } from '../../components/images/Thumbnail'; @@ -20,7 +21,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { NoteColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/part/SelectionListTable.tsx b/src/frontend/src/tables/part/SelectionListTable.tsx index 0914639314..a63b84670a 100644 --- a/src/frontend/src/tables/part/SelectionListTable.tsx +++ b/src/frontend/src/tables/part/SelectionListTable.tsx @@ -10,6 +10,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { selectionListFields } from '../../forms/selectionListFields'; import { @@ -17,7 +18,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, DescriptionColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/plugin/PluginErrorTable.tsx b/src/frontend/src/tables/plugin/PluginErrorTable.tsx index 4f3d5212da..bec6fda561 100644 --- a/src/frontend/src/tables/plugin/PluginErrorTable.tsx +++ b/src/frontend/src/tables/plugin/PluginErrorTable.tsx @@ -4,8 +4,8 @@ import { useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; -import { useTable } from '../../hooks/UseTable'; import { InvenTreeTable } from '../InvenTreeTable'; export interface PluginRegistryErrorI { diff --git a/src/frontend/src/tables/plugin/PluginListTable.tsx b/src/frontend/src/tables/plugin/PluginListTable.tsx index 580414ffaa..ab5f462f74 100644 --- a/src/frontend/src/tables/plugin/PluginListTable.tsx +++ b/src/frontend/src/tables/plugin/PluginListTable.tsx @@ -17,6 +17,7 @@ import { ActionButton } from '@lib/components/ActionButton'; import type { RowAction } from '@lib/components/RowActions'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { DetailDrawer } from '../../components/nav/DetailDrawer'; import PluginDrawer from '../../components/plugins/PluginDrawer'; @@ -27,7 +28,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useServerApiState } from '../../states/ServerApiState'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, LinkColumn } from '../ColumnRenderers'; diff --git a/src/frontend/src/tables/purchasing/ManufacturerPartTable.tsx b/src/frontend/src/tables/purchasing/ManufacturerPartTable.tsx index 4c371ad104..34db4ccab7 100644 --- a/src/frontend/src/tables/purchasing/ManufacturerPartTable.tsx +++ b/src/frontend/src/tables/purchasing/ManufacturerPartTable.tsx @@ -12,6 +12,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { useManufacturerPartFields } from '../../forms/CompanyForms'; @@ -20,7 +21,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { CompanyColumn, diff --git a/src/frontend/src/tables/purchasing/PurchaseOrderLineItemTable.tsx b/src/frontend/src/tables/purchasing/PurchaseOrderLineItemTable.tsx index b3dc66dd34..3eb214f0af 100644 --- a/src/frontend/src/tables/purchasing/PurchaseOrderLineItemTable.tsx +++ b/src/frontend/src/tables/purchasing/PurchaseOrderLineItemTable.tsx @@ -18,6 +18,7 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { formatDecimal } from '@lib/functions/Formatting'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { useNavigate } from 'react-router-dom'; @@ -34,7 +35,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import useStatusCodes from '../../hooks/UseStatusCodes'; -import { useTable } from '../../hooks/UseTable'; import { useImporterState } from '../../states/ImporterState'; import { useUserState } from '../../states/UserState'; import { diff --git a/src/frontend/src/tables/purchasing/PurchaseOrderTable.tsx b/src/frontend/src/tables/purchasing/PurchaseOrderTable.tsx index 7f9b4e1465..9775391b05 100644 --- a/src/frontend/src/tables/purchasing/PurchaseOrderTable.tsx +++ b/src/frontend/src/tables/purchasing/PurchaseOrderTable.tsx @@ -6,11 +6,11 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import { formatCurrency } from '../../defaults/formatters'; import { usePurchaseOrderFields } from '../../forms/PurchaseOrderForms'; import { useCreateApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { CompanyColumn, diff --git a/src/frontend/src/tables/purchasing/SupplierPartTable.tsx b/src/frontend/src/tables/purchasing/SupplierPartTable.tsx index ef75f6ade5..4cae53fa9f 100644 --- a/src/frontend/src/tables/purchasing/SupplierPartTable.tsx +++ b/src/frontend/src/tables/purchasing/SupplierPartTable.tsx @@ -14,6 +14,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { IconPackageImport } from '@tabler/icons-react'; @@ -25,7 +26,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import { usePluginsWithMixin } from '../../hooks/UsePlugins'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, diff --git a/src/frontend/src/tables/purchasing/SupplierPriceBreakTable.tsx b/src/frontend/src/tables/purchasing/SupplierPriceBreakTable.tsx index 489a19bf0c..4328a71db7 100644 --- a/src/frontend/src/tables/purchasing/SupplierPriceBreakTable.tsx +++ b/src/frontend/src/tables/purchasing/SupplierPriceBreakTable.tsx @@ -13,6 +13,7 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency } from '../../defaults/formatters'; @@ -21,7 +22,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { CompanyColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/sales/ReturnOrderLineItemTable.tsx b/src/frontend/src/tables/sales/ReturnOrderLineItemTable.tsx index 6189338798..23cef54278 100644 --- a/src/frontend/src/tables/sales/ReturnOrderLineItemTable.tsx +++ b/src/frontend/src/tables/sales/ReturnOrderLineItemTable.tsx @@ -13,6 +13,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency } from '../../defaults/formatters'; @@ -26,7 +27,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import useStatusCodes from '../../hooks/UseStatusCodes'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DateColumn, diff --git a/src/frontend/src/tables/sales/ReturnOrderTable.tsx b/src/frontend/src/tables/sales/ReturnOrderTable.tsx index 2f50cdab10..7e17782ed2 100644 --- a/src/frontend/src/tables/sales/ReturnOrderTable.tsx +++ b/src/frontend/src/tables/sales/ReturnOrderTable.tsx @@ -6,11 +6,11 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import { formatCurrency } from '../../defaults/formatters'; import { useReturnOrderFields } from '../../forms/ReturnOrderForms'; import { useCreateApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { CompanyColumn, diff --git a/src/frontend/src/tables/sales/SalesOrderAllocationTable.tsx b/src/frontend/src/tables/sales/SalesOrderAllocationTable.tsx index a5726d5759..d684c19dca 100644 --- a/src/frontend/src/tables/sales/SalesOrderAllocationTable.tsx +++ b/src/frontend/src/tables/sales/SalesOrderAllocationTable.tsx @@ -11,6 +11,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { StockOperationProps } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -25,7 +26,6 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import { useStockAdjustActions } from '../../hooks/UseStockAdjustActions'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DescriptionColumn, diff --git a/src/frontend/src/tables/sales/SalesOrderLineItemTable.tsx b/src/frontend/src/tables/sales/SalesOrderLineItemTable.tsx index 115f7f59b9..e3ab149f9e 100644 --- a/src/frontend/src/tables/sales/SalesOrderLineItemTable.tsx +++ b/src/frontend/src/tables/sales/SalesOrderLineItemTable.tsx @@ -25,6 +25,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { RenderPart } from '../../components/render/Part'; @@ -41,7 +42,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DateColumn, diff --git a/src/frontend/src/tables/sales/SalesOrderShipmentTable.tsx b/src/frontend/src/tables/sales/SalesOrderShipmentTable.tsx index 6de278adf2..69922d0589 100644 --- a/src/frontend/src/tables/sales/SalesOrderShipmentTable.tsx +++ b/src/frontend/src/tables/sales/SalesOrderShipmentTable.tsx @@ -19,6 +19,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { @@ -33,7 +34,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { CompanyColumn, diff --git a/src/frontend/src/tables/sales/SalesOrderTable.tsx b/src/frontend/src/tables/sales/SalesOrderTable.tsx index 6f679f728f..55612f5168 100644 --- a/src/frontend/src/tables/sales/SalesOrderTable.tsx +++ b/src/frontend/src/tables/sales/SalesOrderTable.tsx @@ -7,11 +7,11 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import { formatCurrency } from '../../defaults/formatters'; import { useSalesOrderFields } from '../../forms/SalesOrderForms'; import { useCreateApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { AllocatedLinesProgressColumn, diff --git a/src/frontend/src/tables/settings/ApiTokenTable.tsx b/src/frontend/src/tables/settings/ApiTokenTable.tsx index 5a70d1ec66..cb1f080b3d 100644 --- a/src/frontend/src/tables/settings/ApiTokenTable.tsx +++ b/src/frontend/src/tables/settings/ApiTokenTable.tsx @@ -1,7 +1,9 @@ import { AddItemButton } from '@lib/components/AddItemButton'; +import { CopyButton } from '@lib/components/CopyButton'; import type { RowAction } from '@lib/components/RowActions'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import { t } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; @@ -10,11 +12,9 @@ import { useDisclosure } from '@mantine/hooks'; import { IconCircleX } from '@tabler/icons-react'; import { useCallback, useMemo, useState } from 'react'; import { api } from '../../App'; -import { CopyButton } from '../../components/buttons/CopyButton'; import { StylishText } from '../../components/items/StylishText'; import { showApiErrorMessage } from '../../functions/notifications'; import { useCreateApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { BooleanColumn, UserColumn } from '../ColumnRenderers'; import { UserFilter } from '../Filter'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/BarcodeScanHistoryTable.tsx b/src/frontend/src/tables/settings/BarcodeScanHistoryTable.tsx index e7266b640d..369b752549 100644 --- a/src/frontend/src/tables/settings/BarcodeScanHistoryTable.tsx +++ b/src/frontend/src/tables/settings/BarcodeScanHistoryTable.tsx @@ -14,19 +14,19 @@ import { useDisclosure } from '@mantine/hooks'; import { IconExclamationCircle } from '@tabler/icons-react'; import { useCallback, useMemo, useState } from 'react'; +import { CopyButton } from '@lib/components/CopyButton'; import { RowDeleteAction } from '@lib/components/RowActions'; import { PassFailButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import { shortenString } from '@lib/functions/String'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; -import { CopyButton } from '../../components/buttons/CopyButton'; import { StylishText } from '../../components/items/StylishText'; import { RenderUser } from '../../components/render/User'; -import { shortenString } from '../../functions/tables'; import { useDeleteApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useGlobalSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; import { UserFilter } from '../Filter'; diff --git a/src/frontend/src/tables/settings/CustomStateTable.tsx b/src/frontend/src/tables/settings/CustomStateTable.tsx index b6914df467..668875a8e2 100644 --- a/src/frontend/src/tables/settings/CustomStateTable.tsx +++ b/src/frontend/src/tables/settings/CustomStateTable.tsx @@ -12,6 +12,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import type { @@ -25,7 +26,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useGlobalStatusState } from '../../states/GlobalStatusState'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/CustomUnitsTable.tsx b/src/frontend/src/tables/settings/CustomUnitsTable.tsx index 92ae0b6c5b..e0e89f357d 100644 --- a/src/frontend/src/tables/settings/CustomUnitsTable.tsx +++ b/src/frontend/src/tables/settings/CustomUnitsTable.tsx @@ -10,6 +10,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { customUnitsFields } from '../../forms/CommonForms'; import { @@ -17,7 +18,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/EmailTable.tsx b/src/frontend/src/tables/settings/EmailTable.tsx index 87526a2e27..a36b4e4e52 100644 --- a/src/frontend/src/tables/settings/EmailTable.tsx +++ b/src/frontend/src/tables/settings/EmailTable.tsx @@ -2,6 +2,7 @@ import { ActionButton } from '@lib/components/ActionButton'; import { RowDeleteAction } from '@lib/components/RowActions'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { t } from '@lingui/core/macro'; import { ActionIcon, Alert, Badge, Group, HoverCard } from '@mantine/core'; import { IconExclamationCircle, IconTestPipe } from '@tabler/icons-react'; @@ -10,7 +11,6 @@ import { useCreateApiFormModal, useDeleteApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DateColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/ErrorTable.tsx b/src/frontend/src/tables/settings/ErrorTable.tsx index 293b4b043f..545c46bc3d 100644 --- a/src/frontend/src/tables/settings/ErrorTable.tsx +++ b/src/frontend/src/tables/settings/ErrorTable.tsx @@ -3,15 +3,15 @@ import { Group, Loader, Stack, Table, Text } from '@mantine/core'; import { useCallback, useMemo, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; +import { CopyButton } from '@lib/components/CopyButton'; import { type RowAction, RowDeleteAction } from '@lib/components/RowActions'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; -import { CopyButton } from '../../components/buttons/CopyButton'; import { DetailDrawer } from '../../components/nav/DetailDrawer'; import { useDeleteApiFormModal } from '../../hooks/UseForm'; import { useInstance } from '../../hooks/UseInstance'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/ExportSessionTable.tsx b/src/frontend/src/tables/settings/ExportSessionTable.tsx index 862cfa40b4..06819f2354 100644 --- a/src/frontend/src/tables/settings/ExportSessionTable.tsx +++ b/src/frontend/src/tables/settings/ExportSessionTable.tsx @@ -1,6 +1,7 @@ import { type RowAction, RowDeleteAction } from '@lib/components/RowActions'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; @@ -8,7 +9,6 @@ import { useCallback, useMemo, useState } from 'react'; import { AttachmentLink } from '../../components/items/AttachmentLink'; import { RenderUser } from '../../components/render/User'; import { useDeleteApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { DateColumn } from '../ColumnRenderers'; import { UserFilter } from '../Filter'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/FailedTasksTable.tsx b/src/frontend/src/tables/settings/FailedTasksTable.tsx index ab8a3e5613..c99b3d40ce 100644 --- a/src/frontend/src/tables/settings/FailedTasksTable.tsx +++ b/src/frontend/src/tables/settings/FailedTasksTable.tsx @@ -7,9 +7,9 @@ import { useMemo, useState } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { StylishText } from '../../components/items/StylishText'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/GroupTable.tsx b/src/frontend/src/tables/settings/GroupTable.tsx index 98cf7c20f8..c91fb88065 100644 --- a/src/frontend/src/tables/settings/GroupTable.tsx +++ b/src/frontend/src/tables/settings/GroupTable.tsx @@ -13,6 +13,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { type ApiFormModalProps, getDetailUrl } from '@lib/index'; import type { TableColumn, TableState } from '@lib/types/Tables'; import { IconUsersGroup } from '@tabler/icons-react'; @@ -26,7 +27,6 @@ import { useDeleteApiFormModal } from '../../hooks/UseForm'; import { useInstance } from '../../hooks/UseInstance'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/ImportSessionTable.tsx b/src/frontend/src/tables/settings/ImportSessionTable.tsx index 29d906cdfc..39df628147 100644 --- a/src/frontend/src/tables/settings/ImportSessionTable.tsx +++ b/src/frontend/src/tables/settings/ImportSessionTable.tsx @@ -7,6 +7,7 @@ import { type RowAction, RowDeleteAction } from '@lib/components/RowActions'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { AttachmentLink } from '../../components/items/AttachmentLink'; @@ -17,7 +18,6 @@ import { useCreateApiFormModal, useDeleteApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useImporterState } from '../../states/ImporterState'; import { DateColumn, StatusColumn } from '../ColumnRenderers'; import { StatusFilterOptions, UserFilter } from '../Filter'; diff --git a/src/frontend/src/tables/settings/PendingTasksTable.tsx b/src/frontend/src/tables/settings/PendingTasksTable.tsx index ffe8ee188e..7c31364d97 100644 --- a/src/frontend/src/tables/settings/PendingTasksTable.tsx +++ b/src/frontend/src/tables/settings/PendingTasksTable.tsx @@ -5,11 +5,11 @@ import { ActionButton } from '@lib/components/ActionButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { notifications, showNotification } from '@mantine/notifications'; import { IconTrashXFilled, IconX } from '@tabler/icons-react'; import { api } from '../../App'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/ProjectCodeTable.tsx b/src/frontend/src/tables/settings/ProjectCodeTable.tsx index 6d303aa02a..d6cdddf9e8 100644 --- a/src/frontend/src/tables/settings/ProjectCodeTable.tsx +++ b/src/frontend/src/tables/settings/ProjectCodeTable.tsx @@ -10,6 +10,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { projectCodeFields } from '../../forms/CommonForms'; import { @@ -17,7 +18,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DescriptionColumn, ResponsibleColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/settings/ScheduledTasksTable.tsx b/src/frontend/src/tables/settings/ScheduledTasksTable.tsx index 1e0ae129b2..904632a1c2 100644 --- a/src/frontend/src/tables/settings/ScheduledTasksTable.tsx +++ b/src/frontend/src/tables/settings/ScheduledTasksTable.tsx @@ -5,8 +5,8 @@ import { useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; -import { useTable } from '../../hooks/UseTable'; import { InvenTreeTable } from '../InvenTreeTable'; export default function ScheduledTasksTable() { diff --git a/src/frontend/src/tables/settings/TemplateTable.tsx b/src/frontend/src/tables/settings/TemplateTable.tsx index 4c75b10b4f..6aa4db3af5 100644 --- a/src/frontend/src/tables/settings/TemplateTable.tsx +++ b/src/frontend/src/tables/settings/TemplateTable.tsx @@ -15,6 +15,7 @@ import type { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import type { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; import { identifierString } from '@lib/functions/Conversion'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -47,7 +48,6 @@ import { } from '../../hooks/UseForm'; import { useInstance } from '../../hooks/UseInstance'; import { usePluginUIFeature } from '../../hooks/UsePluginUIFeature'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, diff --git a/src/frontend/src/tables/settings/UserTable.tsx b/src/frontend/src/tables/settings/UserTable.tsx index e70f106afe..55761b9881 100644 --- a/src/frontend/src/tables/settings/UserTable.tsx +++ b/src/frontend/src/tables/settings/UserTable.tsx @@ -20,6 +20,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import { type ApiFormModalProps, getDetailUrl } from '@lib/index'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn, TableState } from '@lib/types/Tables'; @@ -41,7 +42,6 @@ import { useDeleteApiFormModal } from '../../hooks/UseForm'; import { useInstance } from '../../hooks/UseInstance'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/stock/InstalledItemsTable.tsx b/src/frontend/src/tables/stock/InstalledItemsTable.tsx index 3de11d245c..5ccbc10eef 100644 --- a/src/frontend/src/tables/stock/InstalledItemsTable.tsx +++ b/src/frontend/src/tables/stock/InstalledItemsTable.tsx @@ -8,13 +8,13 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { useStockItemInstallFields, useStockItemUninstallFields } from '../../forms/StockForms'; import { useCreateApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { PartColumn, StatusColumn, StockColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/stock/LocationTypesTable.tsx b/src/frontend/src/tables/stock/LocationTypesTable.tsx index ad7dcc60f8..89b7cb747f 100644 --- a/src/frontend/src/tables/stock/LocationTypesTable.tsx +++ b/src/frontend/src/tables/stock/LocationTypesTable.tsx @@ -10,6 +10,7 @@ import { import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; import { ApiIcon } from '../../components/items/ApiIcon'; @@ -18,7 +19,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { DescriptionColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/stock/StockItemTable.tsx b/src/frontend/src/tables/stock/StockItemTable.tsx index e23cd60a4c..2f65c74edb 100644 --- a/src/frontend/src/tables/stock/StockItemTable.tsx +++ b/src/frontend/src/tables/stock/StockItemTable.tsx @@ -9,6 +9,7 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { StockOperationProps } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -18,7 +19,6 @@ import { useStockFields } from '../../forms/StockForms'; import { InvenTreeIcon } from '../../functions/icons'; import { useCreateApiFormModal } from '../../hooks/UseForm'; import { useStockAdjustActions } from '../../hooks/UseStockAdjustActions'; -import { useTable } from '../../hooks/UseTable'; import { useGlobalSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; import { diff --git a/src/frontend/src/tables/stock/StockItemTestResultTable.tsx b/src/frontend/src/tables/stock/StockItemTestResultTable.tsx index c2c81d2548..be4342ea8d 100644 --- a/src/frontend/src/tables/stock/StockItemTestResultTable.tsx +++ b/src/frontend/src/tables/stock/StockItemTestResultTable.tsx @@ -21,6 +21,7 @@ import { PassFailButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; @@ -33,7 +34,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useGlobalSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; import { diff --git a/src/frontend/src/tables/stock/StockLocationTable.tsx b/src/frontend/src/tables/stock/StockLocationTable.tsx index a0915c65a3..d8d6c9acd8 100644 --- a/src/frontend/src/tables/stock/StockLocationTable.tsx +++ b/src/frontend/src/tables/stock/StockLocationTable.tsx @@ -8,6 +8,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { ActionDropdown } from '../../components/items/ActionDropdown'; @@ -19,7 +20,6 @@ import { useCreateApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, DescriptionColumn } from '../ColumnRenderers'; import { InvenTreeTable } from '../InvenTreeTable'; diff --git a/src/frontend/src/tables/stock/StockTrackingTable.tsx b/src/frontend/src/tables/stock/StockTrackingTable.tsx index 6019661760..748fde47f5 100644 --- a/src/frontend/src/tables/stock/StockTrackingTable.tsx +++ b/src/frontend/src/tables/stock/StockTrackingTable.tsx @@ -7,6 +7,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; import { formatDecimal } from '@lib/functions/Formatting'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { RenderBuildOrder } from '../../components/render/Build'; @@ -23,7 +24,6 @@ import { RenderStockLocation } from '../../components/render/Stock'; import { RenderUser } from '../../components/render/User'; -import { useTable } from '../../hooks/UseTable'; import { DateColumn, DescriptionColumn, From 1e968a533d49bb882e5e00cc7f162efa81f8b6f1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 Apr 2026 22:26:33 +1000 Subject: [PATCH 05/71] Bump UI to 0.11.2 (#11738) - Expose additional type hints --- src/frontend/CHANGELOG.md | 9 +++++++++ src/frontend/lib/index.ts | 7 +++++++ src/frontend/package.json | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/frontend/CHANGELOG.md b/src/frontend/CHANGELOG.md index 9d1d44f1bb..f1c4f9ba47 100644 --- a/src/frontend/CHANGELOG.md +++ b/src/frontend/CHANGELOG.md @@ -2,6 +2,15 @@ This file contains historical changelog information for the InvenTree UI components library. +### 0.11.2 - April 2026 + +Exposes additional type definitions related to tables and filters: + +- TableFilterChoice +- TableFilterType +- TableFilter +- FilterSetState + ### 0.11.1 - April 2026 Fixes dependency issues for the `InvenTreeTable` component, which were introduced in `0.11.0`. This ensures that the component works correctly and does not cause issues with plugin builds. diff --git a/src/frontend/lib/index.ts b/src/frontend/lib/index.ts index c38dfffca2..8bf7103acd 100644 --- a/src/frontend/lib/index.ts +++ b/src/frontend/lib/index.ts @@ -30,6 +30,13 @@ export type { InvenTreeTableRenderProps } from './types/Tables'; +export type { + TableFilterChoice, + TableFilterType, + TableFilter, + FilterSetState +} from './types/Filters'; + export type { ApiFormFieldChoice, ApiFormFieldHeader, diff --git a/src/frontend/package.json b/src/frontend/package.json index db56aa4aae..1f8f58a8d1 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,7 +1,7 @@ { "name": "@inventreedb/ui", "description": "UI components for the InvenTree project", - "version": "0.11.1", + "version": "0.11.2", "private": false, "type": "module", "license": "MIT", From a3584bd452df29ebe9eed8d37fb313de59da0791 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 14 Apr 2026 10:56:46 +1000 Subject: [PATCH 06/71] New Crowdin translations by GitHub Action (#11730) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../InvenTree/locale/ar/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/bg/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/cs/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/da/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/de/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/el/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/en/LC_MESSAGES/django.po | 926 ++++++++--------- .../InvenTree/locale/es/LC_MESSAGES/django.po | 928 ++++++++--------- .../locale/es_MX/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/et/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/fa/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/fi/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/fr/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/he/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/hi/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/hu/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/id/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/it/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/ja/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/ko/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/lt/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/lv/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/nl/LC_MESSAGES/django.po | 952 +++++++++--------- .../InvenTree/locale/no/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/pl/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/pt/LC_MESSAGES/django.po | 928 ++++++++--------- .../locale/pt_BR/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/ro/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/ru/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/sk/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/sl/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/sr/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/sv/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/th/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/tr/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/uk/LC_MESSAGES/django.po | 928 ++++++++--------- .../InvenTree/locale/vi/LC_MESSAGES/django.po | 928 ++++++++--------- .../locale/zh_Hans/LC_MESSAGES/django.po | 928 ++++++++--------- .../locale/zh_Hant/LC_MESSAGES/django.po | 928 ++++++++--------- src/frontend/src/locales/ar/messages.po | 218 ++-- src/frontend/src/locales/bg/messages.po | 218 ++-- src/frontend/src/locales/cs/messages.po | 218 ++-- src/frontend/src/locales/da/messages.po | 218 ++-- src/frontend/src/locales/de/messages.po | 222 ++-- src/frontend/src/locales/el/messages.po | 218 ++-- src/frontend/src/locales/en/messages.po | 220 ++-- src/frontend/src/locales/es/messages.po | 218 ++-- src/frontend/src/locales/es_MX/messages.po | 218 ++-- src/frontend/src/locales/et/messages.po | 218 ++-- src/frontend/src/locales/fa/messages.po | 218 ++-- src/frontend/src/locales/fi/messages.po | 218 ++-- src/frontend/src/locales/fr/messages.po | 218 ++-- src/frontend/src/locales/he/messages.po | 218 ++-- src/frontend/src/locales/hi/messages.po | 218 ++-- src/frontend/src/locales/hu/messages.po | 218 ++-- src/frontend/src/locales/id/messages.po | 218 ++-- src/frontend/src/locales/it/messages.po | 218 ++-- src/frontend/src/locales/ja/messages.po | 218 ++-- src/frontend/src/locales/ko/messages.po | 218 ++-- src/frontend/src/locales/lt/messages.po | 218 ++-- src/frontend/src/locales/lv/messages.po | 218 ++-- src/frontend/src/locales/nl/messages.po | 218 ++-- src/frontend/src/locales/no/messages.po | 218 ++-- src/frontend/src/locales/pl/messages.po | 218 ++-- src/frontend/src/locales/pt/messages.po | 218 ++-- src/frontend/src/locales/pt_BR/messages.po | 218 ++-- src/frontend/src/locales/ro/messages.po | 218 ++-- src/frontend/src/locales/ru/messages.po | 218 ++-- src/frontend/src/locales/sk/messages.po | 218 ++-- src/frontend/src/locales/sl/messages.po | 218 ++-- src/frontend/src/locales/sr/messages.po | 218 ++-- src/frontend/src/locales/sv/messages.po | 218 ++-- src/frontend/src/locales/th/messages.po | 218 ++-- src/frontend/src/locales/tr/messages.po | 218 ++-- src/frontend/src/locales/uk/messages.po | 218 ++-- src/frontend/src/locales/vi/messages.po | 218 ++-- src/frontend/src/locales/zh_Hans/messages.po | 222 ++-- src/frontend/src/locales/zh_Hant/messages.po | 218 ++-- 78 files changed, 22441 insertions(+), 22285 deletions(-) diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 81e9282eba..9ce15b4574 100644 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -104,13 +104,13 @@ msgstr "أدخل التاريخ" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "ملاحظات" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "البريد الإلكتروني" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index 1459ae58c3..4686550dc3 100644 --- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -104,13 +104,13 @@ msgstr "Въведи дата" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Бележки" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Потребител" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Цялостна наличност" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index eb33c056d7..34cf99632c 100644 --- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -104,13 +104,13 @@ msgstr "Zadejte datum" msgid "Invalid decimal value" msgstr "Neplaté desetinné číslo" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Poznámky" @@ -215,7 +215,7 @@ msgstr "Zadaná URL adresa není platný soubor obrázku" msgid "Log in to the app" msgstr "Přihlásit se do aplikace" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -336,51 +336,51 @@ msgstr "Server zaznamenal chybu." msgid "Image" msgstr "Obrazek" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Toto pole nesmí být nulové." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Vzdálený obraz" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL souboru vzdáleného obrázku" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nepodařilo se stáhnout obrázek ze vzdálené adresy URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Neplatný formát typu obsahu" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Typ obsahu nenalezen" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Typ obsahu neodpovídá požadované třídě mixinu" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Zahrnout varianty" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Zahrnout varianty" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Zahrnout varianty" msgid "Part" msgstr "Díl" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -669,16 +669,16 @@ msgstr "Vyloučit strom" msgid "Build must be cancelled before it can be deleted" msgstr "Sestavení musí být zrušeno před odstraněním" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Volitelné" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Sestava" @@ -687,7 +687,7 @@ msgstr "Sestava" msgid "Tracked" msgstr "Sledováno" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testovatelné" @@ -695,24 +695,24 @@ msgstr "Testovatelné" msgid "Order Outstanding" msgstr "Objednávka nevyřízená" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Spotřebováno" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupné" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Na objednávku" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Výrobní příkaz" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokace" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Výstup" @@ -783,7 +783,7 @@ msgstr "Cílové datum musí být po datu zahájení" msgid "Build Order Reference" msgstr "Referenční číslo výrobního příkazu" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referenční číslo prodejní objednávky" msgid "Sales Order to which this build is allocated" msgstr "Prodejní objednávka, které je tato stavba přiřazena" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Zdrojové umístění" @@ -861,16 +861,16 @@ msgstr "Stav sestavení" msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Datum vytvoření" @@ -964,7 +964,7 @@ msgstr "Výrobní příkaz {build} byl dokončen" msgid "A build order has been completed" msgstr "Výrobní příkaz byl dokončen" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "U sledovatelných dílů musí být uvedena sériová čísla" @@ -980,23 +980,23 @@ msgstr "Výstup sestavení je již dokončen" msgid "Build output does not match Build Order" msgstr "Výstup neodpovídá výrobnímu příkazu" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Množství nemůže být větší než výstupní množství" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Výstup výroby neprošel všemi požadovanými testy" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Výstup sestavy {serial} neprošel všemi požadavky" @@ -1017,10 +1017,10 @@ msgstr "Řádková položka výrobního příkazu" msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Vytvořit objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Zabrané množství ({q}) nesmí překročit dostupné skladové množst msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Skladové položky" @@ -1099,378 +1099,378 @@ msgstr "Cílová skladová položka" msgid "Build Level" msgstr "Úroveň sestavení" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Název dílu" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Výstupní díl se neshoduje s dílem výrobního příkazu" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Je vyžadována celočíselná hodnota množství, protože kusovník obsahuje sledovatelné díly" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Zadejte sériová čísla pro sestavení výstupů" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Skladové umístění pro výstup sestavy" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automaticky přidělit požadované položky s odpovídajícími sériovými čísly" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Následující sériová čísla již existují nebo jsou neplatná" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Musí být uveden seznam výstupů sestavy" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Skladové umístění pro sešrotované výstupy" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Zahodit alokace" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Vyřadit všechny přidělené zásoby pro vyřazené výstupy" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Důvod vyřazení výstupu(ů) sestavy" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Umístění dokončených výstupů sestavy" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Přijmout neúplné přidělení" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Dokončit výstupy pokud zásoby nebyly plně přiděleny" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Spotřebovat přidělené zásoby" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Spotřebovat všechny zásoby, které již byly přiděleny této sestavě" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Odstranit neúplné výstupy" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Není povoleno" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Přijmout jako spotřebované tímto výrobním příkazem" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Uvolnit před dokončením tohoto výrobního příkazu" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Nadměrně přidělené zásoby" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Jak chcete zacházet s extra skladovými položkami přiřazenými k tomuto výrobnímu příkazu" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Některé skladové položky byly nadměrně přiděleny" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Přijmout nepřidělené" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k tomuto výrobnímu příkazu" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Požadované zásoby nebyly plně přiděleny" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Přijmout neúplné" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Přijmout, že nebyl dokončen požadovaný počet výstupů sestavy" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Požadované množství sestavy nebylo dokončeno" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Výrobní příkaz má otevřené podpříkazy" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Výrobní příkaz musí být ve stavu produkce" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Výrobní příkaz má neúplné výstupy" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linka sestavy" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Výstup sestavy" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Výstup sestavy musí odkazovat na stejnou sestavu" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Řádková položka sestavy" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part musí ukazovat na stejný díl jako výrobní příkaz" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupné množství ({q}) překročeno" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Pro přidělení sledovaných dílů musí být zadán výstup sestavy" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Výstup sestavy nelze zadat pro přidělení nesledovaných dílů" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Položky přidělení musí být poskytnuty" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Skladové místo, odkud se mají díly odebírat (ponechte prázdné, pokud chcete odebírat z libovolného místa)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Vyloučit skladové položky z tohoto vybraného umístění" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Zaměnitelné zásoby" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Skladové položky na více místech lze používat zaměnitelně" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Náhradní zásoby" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Povolit přidělování náhradních dílů" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Přiřazení volitelných položek kusovníku k objednávce sestavy" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Všechny položky" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Nesledované položky" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Sledované položky" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Typ položky" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Vyberte typ položky pro automatické přiřazení" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Reference v kusovníku" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID dílu kusovníku" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Název dílu kusovníku" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Informace instalace" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Sestavení" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Díl dodavatele" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Přidělené množství" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Reference sestavení" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Název kategorie dílů" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sledovatelné" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Položka kusovníku" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Naplánováno na sestavení" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Externí zásoby" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostupné zásoby" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Dostupné náhradní zásoby" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Dostupná varianta skladu" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Spotřebované množství přesahuje přidělené množství" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Nepovinné poznámky ke spotřebě zásob" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Sestavení položky musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Duplikovat přidělení položky sestavení" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Výrobní linka musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Duplikovat přiřazení výrobní linky" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Musí být poskytnuta alespoň jedna linka nebo předmět" @@ -1494,7 +1494,7 @@ msgstr "Pozastaveno" msgid "Cancelled" msgstr "Zrušeno" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Opožděný výrobní příkaz" msgid "Build order {bo} is now overdue" msgstr "Objednávka sestavy {bo} je nyní opožděná" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Je odkaz" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Je soubor" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Uživatel nemá oprávnění k odstranění těchto příloh" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Uživatel nemá oprávnění k odstranění této přílohy" @@ -1550,7 +1550,7 @@ msgstr "Nejsou uvedeny žádné platné kódy měn" msgid "No plugin" msgstr "Žádný plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Popisek kódu projektu" @@ -1628,7 +1628,7 @@ msgstr "Uživatel" msgid "Price break quantity" msgstr "Množství cenové slevy" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1652,7 +1652,7 @@ msgstr "Název tohoto webhooku" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivní" @@ -2126,7 +2126,7 @@ msgstr "Parametry" msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "Neplatný typ modelu pro daný parametr" @@ -2140,7 +2140,7 @@ msgstr "ID cílového modelu pro tento parametr" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablona" @@ -2148,7 +2148,7 @@ msgstr "Šablona" msgid "Parameter template" msgstr "Šablona parametru" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" @@ -2156,18 +2156,18 @@ msgstr "Data" msgid "Parameter Value" msgstr "Hodnota parametru" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Poznámka" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Volitelné pole pro poznámku" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Název souboru" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" @@ -2465,11 +2465,11 @@ msgstr "Typ modelu" 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" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "Uživatel nemá práva vytvářet nebo upravovat parametry pro tento model" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Tento výběr je uzamčen" @@ -2859,8 +2859,8 @@ msgstr "Díly jsou ve výchozím nastavení šablony" msgid "Parts can be assembled from other components by default" msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" @@ -3988,33 +3988,33 @@ msgstr "Díl je aktivní" msgid "Manufacturer is Active" msgstr "Výrobce je aktivní" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Díl dodavatele je aktivní" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Primární díl dodavatele" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Interní díl je aktivní" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Dodavatel je aktivní" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Výrobce" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Společnost" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Má zásoby" @@ -4195,7 +4195,7 @@ msgstr "Doručovací poznámky pro interní použití" msgid "Link to address information (external)" msgstr "Odkaz na informace o adrese (externí)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Výrobce dílu" @@ -4213,12 +4213,12 @@ msgstr "Zvolte díl" msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Číslo dílu výrobce" @@ -4242,8 +4242,8 @@ msgstr "Jednotky balení musí být větší než nula" msgid "Linked manufacturer part must reference the same base part" msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Dodavatel" msgid "Select supplier" msgstr "Vyberte dodavatele" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Skladová evidence dodavatele" @@ -4290,8 +4290,8 @@ msgstr "základní cena" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Balení" @@ -4339,14 +4339,18 @@ msgstr "Výchozí měna používaná pro tohoto dodavatele" msgid "Company Name" msgstr "Jméno společnosti" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Skladem" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Množstevní sleva" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Při exportu dat došlo k chybě" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Existující databázový identifikátor pro tento záznam" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Sloupec je již napamován k poli databáze" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Pole je již namapováno do datového sloupce" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Mapování sloupců musí být připojeno k platné relaci importu" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Sloupec neexistuje v datovém souboru" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Pole neexistuje v cílovém modelu" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Vybrané pole je pouze pro čtení" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importovací relace" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Pole" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Sloupec" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Index řádku" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Původní data řádku" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Chyby" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Platné" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "ID je vyžadováno pro aktualizaci existujících záznamů." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Žádný záznam nalezen pro zadané ID" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Poskytnut neplatný formát ID" @@ -4821,7 +4825,7 @@ msgstr "Objednávka" msgid "Order Complete" msgstr "Objednávka byla dokončena" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Interní díl" @@ -4918,7 +4922,7 @@ msgstr "Datum zahájení" msgid "Scheduled start date for this order" msgstr "Plánované datum zahájení této objednávky" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cílené datum" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Číslo objednávky" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Stav" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Doručeno" msgid "Number of items received" msgstr "Počet přijatých položek" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Nákupní cena" @@ -5211,8 +5215,8 @@ msgstr "Kontroloval(a)" msgid "User who checked this shipment" msgstr "Uživatel, který zkontroloval tuto zásilku" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Doprava" @@ -5277,7 +5281,7 @@ msgstr "Přidělené množství nesmí překročit množství zásob" msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Množství musí být 1 pro serializovanou skladovou položku" @@ -5393,7 +5397,7 @@ msgstr "Kopírovat extra řádky" msgid "Copy extra line items from the original order" msgstr "Kopírovat extra řádkové položky z původní objednávky" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopírovat parametry" @@ -5412,216 +5416,216 @@ msgstr "Řádkové položky" msgid "Completed Lines" msgstr "Dokončené řádky" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplikovat objednávku" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Specifikujte možnosti pro duplikaci této objednávky" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Neplatné ID objednávky" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Název dodavatele" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Objednávku nelze zrušit" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Povolit uzavření objednávky s neúplnými řádkovými položkami" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Objednávka má nedokončené řádkové položky" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Objednávka není otevřena" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatická cena" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automaticky vypočítat nákupní cenu na základě údajů o dílech dodavatele" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Měna nákupní ceny" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Sloučit položky" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sloučit položky se stejným dílem, místem určení a cílovým datem do jedné řádkové položky" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Interní číslo dílu" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interní název dílu" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Objednávka musí být zadána" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Řádková položka" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Vyberte cílové umístění pro přijaté položky" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Zadat kód šarže pro příchozí skladové položky" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum expirace" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Zadejte datum expirace pro příchozí skladové položky" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Zadat sériová čísla pro příchozí skladové položky" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Přepsat informace o obalu pro příchozí skladové položky" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Dodatečná poznámka pro příchozí skladové položky" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Čárový kód" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Naskenovaný čárový kód" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Tento čárový kód se již používá" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Musí být uvedeny řádkové položky" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Místo určení musí být specifikováno" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Hodnoty dodaných čárových kódů musí být unikátní" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Zásilky" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Dokončené zásilky" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Přidělené řádky" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Měna prodejní ceny" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Přidělené položky" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nebyly poskytnuty žádné údaje o zásilce" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Řádková položka není přiřazena k této objednávce" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Množství musí být kladné" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Zadejte sériová čísla pro přidělení" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Zásilka již byla odeslána" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Zásilka není spojena s touto objednávkou" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nebyla nalezena žádná shoda pro následující sériová čísla" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Následující sériová čísla nejsou k dispozici" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Řádkový předmět vratky" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Řádková položka neodpovídá vratce" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Řádková položka již byla přijata" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Položky lze přijímat pouze proti objednávkám, které probíhají" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Množství k vrácení" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Měna ceny řádku" @@ -5837,7 +5841,7 @@ msgstr "Výchozí klíčová slova pro díly v této kategorii" msgid "Icon" msgstr "Ikona" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikona (volitelná)" @@ -5858,7 +5862,7 @@ msgstr "Výchozí hodnota" msgid "Default Parameter Value" msgstr "Výchozí hodnota parametru" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Díly" @@ -5973,7 +5977,7 @@ msgstr "Klíčová slova dílu pro zlepšení vyhledávání" msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interní číslo dílu (IPN)" @@ -6006,7 +6010,7 @@ msgstr "Výchozí expirace" msgid "Expiry time (in days) for stock items of this part" msgstr "Expirační čas (ve dnech) pro zásoby tohoto dílu" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimální zásoby na skladě" @@ -6487,355 +6491,355 @@ msgstr "Část vztahu nemůže být vytvořena mezi dílem samotným" msgid "Duplicate relationship already exists" msgstr "Duplicitní vztah již existuje" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Nadřazená kategorie" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Nadřazená kategorie dílu" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Výsledky" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Počet výsledků zaznamenaných podle této šablony" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Nákupní měna této skladové položky" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Soubor není obrázek" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Původní díl" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Vyberte původní díl, který má být duplikován" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopírovat obrázek" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopírovat obrázek z původního dílu" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopírovat kusovník" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopírovat kusovník z původního dílu" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopírovat data parametrů z původního dílu" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopírovat poznámky" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopírovat poznámky z původního dílu" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Kopírovat testy" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Kopírovat testovací šablony z původního dílu" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Počáteční skladové množství" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Zadejte počáteční skladové množství pro tuto část. Pokud je množství nulové, není přidáno žádné." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Počáteční skladové místo" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Zadejte počáteční skladové místo pro tento díl" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Vyberte dodavatele (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Vyberte výrobce (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Číslo dílu výrobce" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Vybraná společnost není platný dodavatel" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Vybraná společnost není platný výrobce" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Výrobce dílu se stejným MPN již existuje" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Dodavatelský díl s tímto SKU již existuje" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Název kategorie" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Budova" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Množství tohoto dílu, které je v současné době ve výrobě" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Zbývající množství tohoto dílu, které má být postaveno" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Skladové položky" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revize" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Celkem skladem" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nezařazené zásoby" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Skladové varianty" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplikovat díl" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopírovat počáteční data z jiného dílu" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Počáteční zásoby" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Vytvořit díl s počátečním množstvím zásob" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informace o dodavateli" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Přidat počáteční informace dodavatele pro tento díl" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopírovat parametry kategorie" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Stávající obrázek" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Název souboru existujícího obrázku dílu" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Obrázek neexistuje" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Schválit celý kusovník" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Lze postavit" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Vyžadováno pro výrobní objednávku" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Přířazeno výrobním objednávkám" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Vyžadováno pro prodejní objednávky" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Přiřazeno prodejním objednávkám" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "IPN dílu" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Popis dílu" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Vyberte díl u kterého chce vytvořit informace inventury (i pro jeho varianty)" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Vyberte kategorii pro obsažení všech dílů v dané kategorii (a podkategoriích)" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Vyberte lokaci pro obsažení všech dílů se zásobami na dané lokaci (včetně pod-lokací)" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "Generovat vstupy inventury" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "Uložit vstupy inventury pro vybrané díly" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Generovat report" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "Generovat report inventury pro vybrané díly" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimální cena" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Přespat vypočítanou hodnotu pro minimální cenu" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Měna minimální ceny" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maximální cena" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Přespat vypočítanou hodnotu pro maximální cenu" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Měna maximální ceny" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Aktualizovat" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nelze převést z poskytnutých měn na {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimální cena musí být vyšší než maximální cena" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maximální cena nesmí být nížší než minimální cena" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "Množství musí být větší nebo rovno nule" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Vybrat nadřazenou sestavu" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Vyberte komponentu dílu" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Vyberte díl pro kopírování kusovníku z" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Odstranit existující data" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Odstranit existující položky kusovníku před kopírováním" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Zahrnout zděděné" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Zahrnout položky kusovníku které jsou zdědené z šablonových dílů" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Přeskočit neplatné řádky" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Povolte tuto možnost pro přeskočení neplatných řádků" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopírovat náhradní díly" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku" @@ -8288,7 +8292,7 @@ msgstr "Report o testu skladové položky" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Instalované položky" @@ -8361,7 +8365,7 @@ msgstr "Filtrovat dle nejvyšší lokace" msgid "Include sub-locations in filtered results" msgstr "Zahrnout pod-lokace ve filtrovaných výsledcích" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Nadřazená místo" @@ -8445,7 +8449,7 @@ msgstr "Datum expirace ped" msgid "Expiry date after" msgstr "Datum expirace po" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Zastaralé" @@ -8579,7 +8583,7 @@ msgstr "Díl musí být zadán" msgid "Stock items cannot be located into structural stock locations!" msgstr "Skladové položky nelze umístit do strukturálních skladových umístění!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Nelze vytvořit skladovou položku pro virtuální díl" @@ -8624,7 +8628,7 @@ msgstr "Vyberte odpovídající díl dodavatele pro tuto skladovou položku" msgid "Where is this stock item located?" msgstr "Kde se tato skladová položka nachází?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Balení, ve kterém je tato skladová položka uložena" @@ -8640,7 +8644,7 @@ msgstr "Je tato položka nainstalována v jiné položce?" msgid "Serial number for this item" msgstr "Sériové číslo pro tuto položku" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Kód šarže pro tuto skladovou položku" @@ -8753,7 +8757,7 @@ msgstr "Skladová položka je ve výrobě" msgid "Serialized stock cannot be merged" msgstr "Serializované zásoby nelze sloučit" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplicitní skladové položky" @@ -8877,7 +8881,7 @@ msgstr "Vyberte díl, pro který se má vygenerovat sériové číslo" msgid "Quantity of serial numbers to generate" msgstr "Množství sériových čísel k vygenerování" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Testovací šablona pro tento výsledek" @@ -8901,222 +8905,222 @@ msgstr "Nadřazená položka" msgid "Parent stock item" msgstr "Nadřazená skladová položka" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Použít velikost balení při přidání: definované množství je počet v balení" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Použít velikost balení" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Zadejte sériová čísla pro nové položky" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Číslo dílu dodavatele" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirováno" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Podřízené položky" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Sledování položky" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nákupní cena této skladové položky za jednotku nebo balení" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Zadejte počet skladových položek k serializaci" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Nebyla poskytnuta žádná skladová položka" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Množství nesmí překročit dostupné skladové množství ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Cílové skladové umístění" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "K tomuto dílu nelze přiřadit sériová čísla" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Sériová čísla již existují" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Vyberte skladovou položku k instalaci" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Množství k instalaci" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Zadejte množství položek k instalaci" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Přidat poznámku o transakci (volitelné)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Množství k instalaci musí být alespoň 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Skladová položka je nedostupná" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Vybraný díl není v kusovníku" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Množství k instalaci nesmí překročit dostupné množství" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Cílové umístění pro odinstalovanou položku" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Vyberte díl pro převedení do skladové položky" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Vybraný díl není platnou volbou pro převod" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Nelze převést skladovou položku s přiřazeným dílem dodavetele" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Stavový kód skladové položky" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Vybrat skladové položky pro změnu stavu" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nejsou vybrány žádné skladové položky" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Podumístění" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Nadřazené skladové umístění" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Díl musí být prodejný" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Položka je přidělena prodejní objednávce" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Položka je přidělena výrobnímu příkazu" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Zákazník, kterému mají být přiděleny skladové položky" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Vybraná společnost není zákazník" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Poznámky ke skladové položce" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Musí být poskytnut seznam skladových položek" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Poznámky ke sloučení skladových položek" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Povolit neodpovídající dodavatele" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Povolit sloučení skladových položek s různými díly dodavatele" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Povolit neodpovídající stav" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Povolit sloučení skladových položek s různými stavovými kódy" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Musí být poskytnuty alespoň dvě skladové položky" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Beze změny" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Hodnota primárního klíče skladové položky" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Skladová položka není skladem" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Skladová položka je již na skladě" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Množství nesmí být záporné" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Poznámky ke skladovací transakci" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Sloučit do existující zásoby" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Sloučit vrácené položky do existujích položek, pokud je to možné" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Další sériové číslo" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Předchozí sériové číslo" @@ -9598,99 +9602,99 @@ msgstr "Prodejní objednávky" msgid "Return Orders" msgstr "Návratové objednávky" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Uživatelské jméno" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Křestní jméno" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Křestní jméno uživatele" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Příjmení" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Příjmení uživatele" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Emailová adresa uživatele" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super-uživatel" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Je tento uživatel superuživatel" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Je tento uživatelský účet aktivní" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Pouze superuživatel může toto pole upravit" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Heslo" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Heslo uživatele" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Přepsat varování" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Přepsat varování o pravidlech pro heslo" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Nemáte oprávnění k vytváření uživatelů" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Váš účet byl vytvořen." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Pro přihlášení použijte funkci obnovení hesla" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Vítejte v InvenTree" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 8dd82cb034..3c2126264c 100644 --- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -104,13 +104,13 @@ msgstr "Angiv dato" msgid "Invalid decimal value" msgstr "Ugyldig decimalværdi" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Bemærkninger" @@ -215,7 +215,7 @@ msgstr "Angivet URL er ikke en gyldig billedfil" msgid "Log in to the app" msgstr "Log ind på appen" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -336,51 +336,51 @@ msgstr "En fejl blev logget af serveren." msgid "Image" msgstr "Billede" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Dette felt kan ikke være tomt." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Eksternt billede" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL til ekstern billedfil" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valgfri" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "Sporet" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "Ordre Udestående" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgængelig" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Produktionsordre" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokation" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Salgsordrereference" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Kilde Lokation" @@ -861,16 +861,16 @@ msgstr "Produktions Status" msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Oprettelsesdato" @@ -964,7 +964,7 @@ msgstr "Bygningsordre {build} er fuldført" msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagervarer" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Del Navn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Indtast serienumre for bygge output" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk alloker serienumre" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienumre findes allerede eller er ugyldige" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepter at lagervarer ikke er fuldt tildelt til denne byggeordre" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Varen skal være på lager" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgængeligt antal ({q}) overskredet" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Stykliste Reference" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Stykliste del ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Stykliste Del Navn" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Byg" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leverandør Del" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tildelt Antal" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stykliste Del" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "I Produktion" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Ekstern Lager" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Tilgængelig Lager" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "På Hold" msgid "Cancelled" msgstr "Annulleret" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Ingen plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projekt Kode Label" @@ -1628,7 +1628,7 @@ msgstr "Bruger" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Filnavn" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Fornavn på brugeren" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Efternavn" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Efternavn på brugeren" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Email adresse på brugeren" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superbruger" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Er denne bruger en superbruger" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Er denne brugerkonto aktiv" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Kun en superbruger kan justere dette felt" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Adgangskode" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Brugers adgangskode" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Tilsidesæt advarsel" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Tilsidesæt advarslen om adgangskode regler" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Du har ikke tilladelse til at oprette brugere" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Din konto er oprettet." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Benyt funktionen til nulstilling af adgangskode til at logge ind" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index ad951bf9b0..2e4f4886f2 100644 --- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -104,13 +104,13 @@ msgstr "Datum eingeben" msgid "Invalid decimal value" msgstr "Ungültiger Dezimalwert" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notizen" @@ -215,7 +215,7 @@ msgstr "Angegebene URL ist kein gültiges Bild" msgid "Log in to the app" msgstr "Bei der App anmelden" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -336,51 +336,51 @@ msgstr "Ein Fehler wurde vom Server protokolliert." msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Dieses Feld darf nicht leer sein." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Grafiken aus externen Quellen" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL der Remote-Bilddatei" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Fehler beim Herunterladen des Bildes von entfernter URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Content type stimmt nicht mit der benötigten Mixin-Klasse überein" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Varianten einschließen" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Varianten einschließen" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Varianten einschließen" msgid "Part" msgstr "Teil" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -669,16 +669,16 @@ msgstr "Baum ausschließen" msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Optional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Baugruppe" @@ -687,7 +687,7 @@ msgstr "Baugruppe" msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Prüfbar" @@ -695,24 +695,24 @@ msgstr "Prüfbar" msgid "Order Outstanding" msgstr "Offene Bestellung" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Verbraucht" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Verfügbar" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Bestellt" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Bauauftrag" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lagerort" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Bauprodukt" @@ -783,7 +783,7 @@ msgstr "Zieldatum muss nach dem Startdatum liegen" msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Auftrag Referenz" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Quell-Lagerort" @@ -861,16 +861,16 @@ msgstr "Bauauftrags-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Erstelldatum" @@ -964,7 +964,7 @@ msgstr "Bauauftrag {build} wurde fertiggestellt" msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" @@ -980,23 +980,23 @@ msgstr "Endprodukt bereits hergstellt" msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build Ausgabe {serial} hat nicht alle erforderlichen Tests bestanden" @@ -1017,10 +1017,10 @@ msgstr "Bauauftragsposition" msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Objekt bauen" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagerartikel" @@ -1099,378 +1099,378 @@ msgstr "Ziel-Lagerartikel" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Name des Teils" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ganzzahl erforderlich da die Stückliste nachverfolgbare Teile enthält" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Lagerort für Bauprodukt" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Verbrauche alle Bestände, die diesem Bauauftrag bereits zugewiesen wurden" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Wie sollen zusätzliche Lagerbestandteile, die dem Bauauftrag zugewiesen wurden, behandelt werden" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Akzeptieren, dass Lagerartikel diesem Bauauftrag nicht vollständig zugewiesen wurden" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Akzeptieren, dass die erforderliche Anzahl der Bauaufträge nicht abgeschlossen ist" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Endprodukt kann bei Zuweisung nicht-verfolgter Teile nicht angegeben werden" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagerort, von dem Teile bezogen werden sollen (leer lassen, um sie von jedem Lagerort zu nehmen)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Alle Artikel" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Unverfolgte Artikel" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Verfolgte Artikel" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Item-Typ" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Elementtyp zur automatischen Zuweisung auswählen" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Stücklisten-Referenz" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Stückliste Teil-ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Stückliste Teil-Name" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Zusammenbau" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Zuliefererteil" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Zugewiesene Menge" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Teilkategorienname" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Nachverfolgbar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Geplant zum Erstellen" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Externes Lager" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Verfügbares Ersatzmaterial" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Verfügbarer Varianten Lagerbestand" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbrauchsmenge überschreitet die zugewiesene Menge" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Optionale Notizen für den Bestandsverbrauch" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupliziere Bauauftrag Artikelzuordnung" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Mindestens ein Element oder eine Zeile muss angegeben werden" @@ -1494,7 +1494,7 @@ msgstr "Pausiert" msgid "Cancelled" msgstr "Storniert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Überfälliger Bauauftrag" msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Datei" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Benutzer hat keine Berechtigung zum Löschen der Anhänge" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Kein Plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Benutzer" msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preis" @@ -1652,7 +1652,7 @@ msgstr "Name für diesen Webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Vorlage" @@ -2148,7 +2148,7 @@ msgstr "Vorlage" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Wert" @@ -2156,18 +2156,18 @@ msgstr "Wert" msgid "Parameter Value" msgstr "Parameter Wert" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Notiz" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Optionales Notizfeld" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Dateiname" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" @@ -2465,11 +2465,11 @@ msgstr "Modelltyp" msgid "User does not have permission to create or edit attachments for this model" msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "Teile sind standardmäßig Vorlagen" msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponente" @@ -3988,33 +3988,33 @@ msgstr "Teil ist aktiv" msgid "Manufacturer is Active" msgstr "Hersteller ist aktiv" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Lieferantenteil ist aktiv" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Internes Teil ist aktiv" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Hersteller" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "Versandnotizen für interne Verwendung" msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Herstellerteil" @@ -4213,12 +4213,12 @@ msgstr "Teil auswählen" msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Hersteller-Teilenummer" @@ -4242,8 +4242,8 @@ msgstr "Packeinheiten müssen größer als Null sein" msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Zulieferer" msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" @@ -4290,8 +4290,8 @@ msgstr "Basiskosten" msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Verpackungen" @@ -4339,14 +4339,18 @@ msgstr "Standard-Währung für diesen Zulieferer" msgid "Company Name" msgstr "Firmenname" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Auf Lager" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Feld" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Spalte" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Fehler" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Gültig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Bestellung" msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Internes Teil" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Zieldatum" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Bestell-Referenz" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Empfangen" msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preis" @@ -5211,8 +5215,8 @@ msgstr "Kontrolliert von" msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sendung" @@ -5277,7 +5281,7 @@ msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Parameter kopieren" @@ -5412,216 +5416,216 @@ msgstr "Positionen" msgid "Completed Lines" msgstr "Abgeschlossene Positionen" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Lieferant" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Zusammenführen von Elementen mit dem gleichen Teil, Ziel- und Zieldatum zu einem Zeilenelement" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Position" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ablaufdatum" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Artikel können nur bei laufenden Bestellungen empfangen werden" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Verkaufspreis-Währung" @@ -5837,7 +5841,7 @@ msgstr "Standard-Stichworte für Teile dieser Kategorie" msgid "Icon" msgstr "Symbol" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Symbol (optional)" @@ -5858,7 +5862,7 @@ msgstr "Standard-Wert" msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Teile" @@ -5973,7 +5977,7 @@ msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Interne Produktnummer)" @@ -6006,7 +6010,7 @@ msgstr "Standard Ablaufzeit" msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimaler Bestand" @@ -6487,355 +6491,355 @@ msgstr "Teil-Beziehung kann nicht zwischen einem Teil und sich selbst erstellt w msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Übergeordnete Kategorie" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Übergeordnete Teilkategorie" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Initiale Lagermenge für dieses Teil. Wenn die Menge null ist, wird kein Lagerbestand hinzugefügt." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategoriename" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Im Bau" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagerartikel" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Gesamtbestand" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Herstellbar" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Konnte nicht von den angegebenen Währungen in {default_currency} umrechnen" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" @@ -8288,7 +8292,7 @@ msgstr "Lagerartikel Test-Bericht" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Verbaute Objekte" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "Unterorte in gefilterte Ergebnisse einbeziehen" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Übergeordneter Ort" @@ -8445,7 +8449,7 @@ msgstr "Gültigkeitsdauer vor" msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "überfällig" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" @@ -8624,7 +8628,7 @@ msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" @@ -8640,7 +8644,7 @@ msgstr "Ist dieses Teil in einem anderen verbaut?" msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" @@ -8753,7 +8757,7 @@ msgstr "Lagerartikel wird aktuell produziert" msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artikel duplizeren" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Testvorlage für dieses Ergebnis" @@ -8901,222 +8905,222 @@ msgstr "Elternposition" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Packungsgröße beim Hinzufügen verwenden: Die definierte Menge ist die Anzahl der Pakete" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "abgelaufen" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Untergeordnete Objekte" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Zu installierende Menge" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Anzahl der zu verwendenden Artikel eingeben" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Die zu verwendende Menge muss mindestens 1 sein" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Wählen Sie einen Teil aus, zu dem dieser Lagerartikel geändert werden soll" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Das ausgewählte Teil ist keine gültige Option für die Umwandlung" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Lagerartikel auswählen, um den Status zu ändern" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Übergeordneter Lagerort" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Nächste Seriennummer" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Vorherige Seriennummer" @@ -9598,99 +9602,99 @@ msgstr "Aufträge" msgid "Return Orders" msgstr "Rücksendeaufträge" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Benutzername" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Vorname" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Vorname des Benutzers" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Nachname" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Nachname des Benutzers" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "E-Mailadresse des Benutzers" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Administrator" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ist dieser Benutzer ein Administrator" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ist dieses Benutzerkonto aktiv" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Passwort" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ihr Konto wurde erstellt." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Bitte benutzen Sie die Passwort-zurücksetzen-Funktion, um sich anzumelden" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Willkommen bei InvenTree" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index 8aa6cceb62..b76493f493 100644 --- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -104,13 +104,13 @@ msgstr "Εισάγετε ημερομηνία" msgid "Invalid decimal value" msgstr "Μη έγκυρη δεκαδική τιμή" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Σημειώσεις" @@ -215,7 +215,7 @@ msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" msgid "Log in to the app" msgstr "Σύνδεση στην εφαρμογή" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -336,51 +336,51 @@ msgstr "Ένα σφάλμα έχει καταγραφεί από το διακο msgid "Image" msgstr "Εικόνα" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Απομακρυσμένες Εικόνες" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Αποτυχία λήψης εικόνας από απομακρυσμένο URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Συμπερίληψη παραλλαγών" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Συμπερίληψη παραλλαγών" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Συμπερίληψη παραλλαγών" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Κατηγορία" @@ -669,16 +669,16 @@ msgstr "Εξαίρεση δέντρου" msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Συναρμολόγηση" @@ -687,7 +687,7 @@ msgstr "Συναρμολόγηση" msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Υπό δοκιμή" @@ -695,24 +695,24 @@ msgstr "Υπό δοκιμή" msgid "Order Outstanding" msgstr "Εκκρεμής παραγγελία" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Καταναλωμένο" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Διαθέσιμο" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Σε παραγγελία" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Τοποθεσία" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Έξοδος" @@ -783,7 +783,7 @@ msgstr "Η ημερομηνία στόχος πρέπει να είναι μετ msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Κωδικός Παραγγελίας Πωλήσεων" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" @@ -861,16 +861,16 @@ msgstr "Κατάσταση Κατασκευής" msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" @@ -964,7 +964,7 @@ msgstr "Η παραγγελία κατασκευής {build} έχει ολοκλ msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα" @@ -980,23 +980,23 @@ msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθ msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" @@ -1017,10 +1017,10 @@ msgstr "Γραμμή εντολής κατασκευής" msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Αντικείμενο κατασκευής" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" @@ -1099,378 +1099,378 @@ msgstr "Αποθήκη προορισμού" msgid "Build Level" msgstr "Επίπεδο κατασκευής" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Όνομα Προϊόντος" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Τοποθεσία αποθέματος για την έξοδο κατασκευής" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Κατανάλωση δεσμευμένου αποθέματος" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Κατανάλωση οποιουδήποτε αποθέματος έχει ήδη δεσμευτεί για αυτή την κατασκευή" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Η εντολή κατασκευής έχει ανοιχτές θυγατρικές εντολές κατασκευής" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Η εντολή κατασκευής πρέπει να βρίσκεται σε κατάσταση παραγωγής" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής για την κατανομή ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Πρέπει να δοθούν στοιχεία κατανομής" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Τοποθεσία αποθέματος από την οποία θα ληφθούν τα Προϊόντα (αφήστε κενό για λήψη από οποιαδήποτε τοποθεσία)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Εξαίρεση τοποθεσίας" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Εξαιρέστε στοιχεία αποθέματος από αυτή την επιλεγμένη τοποθεσία" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Εναλλάξιμο απόθεμα" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Στοιχεία αποθέματος σε πολλές τοποθεσίες μπορούν να χρησιμοποιηθούν εναλλάξ" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Εναλλακτικό απόθεμα" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Να επιτρέπεται η κατανομή εναλλακτικών Προϊόντων" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Προαιρετικά στοιχεία" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Κατανομή προαιρετικών στοιχείων BOM στην εντολή κατασκευής" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Αναφορά BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID Προϊόντος BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Όνομα Προϊόντος BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Κατασκευή" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Aντικειμένου προμηθευτή" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Δεσμευμένη ποσότητα" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Αναφορά κατασκευής" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Όνομα κατηγορίας Προϊόντος" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Ανιχνεύσιμο" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Στοιχείο BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Σε παραγωγή" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Προγραμματισμένο για κατασκευή" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Εξωτερικό απόθεμα" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Διαθέσιμο απόθεμα" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Διαθέσιμο εναλλακτικό απόθεμα" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Διαθέσιμο απόθεμα παραλλαγών" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Η καταναλωμένη ποσότητα υπερβαίνει τη δεσμευμένη ποσότητα" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Προαιρετικές σημειώσεις για την κατανάλωση αποθέματος" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Το στοιχείο κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Διπλή κατανομή στοιχείου κατασκευής" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Η γραμμή κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Διπλή κατανομή γραμμής κατασκευής" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Πρέπει να δοθεί τουλάχιστον ένα στοιχείο ή μία γραμμή" @@ -1494,7 +1494,7 @@ msgstr "Σε αναμονή" msgid "Cancelled" msgstr "Ακυρώθηκε" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Εκπρόθεσμη εντολή κατασκευής" msgid "Build order {bo} is now overdue" msgstr "Η εντολή κατασκευής {bo} είναι πλέον εκπρόθεσμη" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Είναι σύνδεσμος" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Είναι αρχείο" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτά τα συνημμένα" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτό το συνημμένο" @@ -1550,7 +1550,7 @@ msgstr "Δεν δόθηκαν έγκυροι κωδικοί συναλλάγμα msgid "No plugin" msgstr "Χωρίς πρόσθετο" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Ετικέτα κωδικού έργου" @@ -1628,7 +1628,7 @@ msgstr "Χρήστης" msgid "Price break quantity" msgstr "Ποσότητα κλιμακωτής τιμής" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Τιμή" @@ -1652,7 +1652,7 @@ msgstr "Όνομα για αυτό το webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ενεργό" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Πρότυπο" @@ -2148,7 +2148,7 @@ msgstr "Πρότυπο" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Δεδομένα" @@ -2156,18 +2156,18 @@ msgstr "Δεδομένα" msgid "Parameter Value" msgstr "Τιμή παραμέτρου" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Σημείωση" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Προαιρετικό πεδίο σημείωσης" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Όνομα αρχείου" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Τύπος μοντέλου" @@ -2465,11 +2465,11 @@ msgstr "Τύπος μοντέλου" msgid "User does not have permission to create or edit attachments for this model" msgstr "Ο χρήστης δεν έχει δικαίωμα να δημιουργήσει ή να επεξεργαστεί συνημμένα για αυτό το μοντέλο" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Η λίστα επιλογών είναι κλειδωμένη" @@ -2859,8 +2859,8 @@ msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλο msgid "Parts can be assembled from other components by default" msgstr "Τα Προϊόντα μπορούν να συναρμολογούνται από άλλα συστατικά από προεπιλογή" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Συστατικό" @@ -3988,33 +3988,33 @@ msgstr "Το προϊόν είναι ενεργό" msgid "Manufacturer is Active" msgstr "Ο κατασκευαστής είναι ενεργός" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Το προϊόν προμηθευτή είναι ενεργό" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Το εσωτερικό προϊόν είναι ενεργό" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Ο προμηθευτής είναι ενεργός" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Κατασκευαστής" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Εταιρεία" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Διαθέτει απόθεμα" @@ -4195,7 +4195,7 @@ msgstr "Σημειώσεις αποστολής για εσωτερική χρή msgid "Link to address information (external)" msgstr "Σύνδεσμος σε πληροφορίες διεύθυνσης (εξωτερικό)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Προϊόν κατασκευαστή" @@ -4213,12 +4213,12 @@ msgstr "Επιλογή προϊόντος" msgid "Select manufacturer" msgstr "Επιλογή κατασκευαστή" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Κωδικός προϊόντος κατασκευαστή" @@ -4242,8 +4242,8 @@ msgstr "Οι μονάδες συσκευασίας πρέπει να είναι msgid "Linked manufacturer part must reference the same base part" msgstr "Το συνδεδεμένο προϊόν κατασκευαστή πρέπει να αναφέρεται στο ίδιο βασικό προϊόν" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Προμηθευτής" msgid "Select supplier" msgstr "Επιλογή προμηθευτή" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Κωδικός αποθέματος προμηθευτή" @@ -4290,8 +4290,8 @@ msgstr "βασικό κόστος" msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Συσκευασία" @@ -4339,14 +4339,18 @@ msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιε msgid "Company Name" msgstr "Όνομα εταιρείας" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Σε απόθεμα" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Κλιμακωτές τιμές" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Προέκυψε σφάλμα κατά την εξαγωγή δεδομένων" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Υπάρχον αναγνωριστικό βάσης δεδομένων για την εγγραφή" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Η στήλη έχει ήδη αντιστοιχιστεί σε πεδίο της βάσης δεδομένων" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Το πεδίο έχει ήδη αντιστοιχιστεί σε στήλη δεδομένων" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Η αντιστοίχιση στήλης πρέπει να συνδέεται με έγκυρη συνεδρία εισαγωγής" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Η στήλη δεν υπάρχει στο αρχείο δεδομένων" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Το πεδίο δεν υπάρχει στο μοντέλο προορισμού" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Το επιλεγμένο πεδίο είναι μόνο για ανάγνωση" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Συνεδρία εισαγωγής" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Πεδίο" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Στήλη" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Δείκτης γραμμής" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Αρχικά δεδομένα γραμμής" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Σφάλματα" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Έγκυρο" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "Απαιτείται ID για την ενημέρωση υπαρχόντων εγγραφών." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Δεν βρέθηκε εγγραφή με το παρεχόμενο ID" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Δόθηκε μη έγκυρη μορφή ID" @@ -4821,7 +4825,7 @@ msgstr "Παραγγελία" msgid "Order Complete" msgstr "Η παραγγελία ολοκληρώθηκε" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Εσωτερικό προϊόν" @@ -4918,7 +4922,7 @@ msgstr "Ημερομηνία έναρξης" msgid "Scheduled start date for this order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Αναφορά παραγγελίας" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Κατάσταση" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Παραλήφθηκε" msgid "Number of items received" msgstr "Αριθμός ειδών που παραλήφθηκαν" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Τιμή αγοράς" @@ -5211,8 +5215,8 @@ msgstr "Έλεγχος από" msgid "User who checked this shipment" msgstr "Χρήστης που έλεγξε αυτή την αποστολή" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Αποστολή" @@ -5277,7 +5281,7 @@ msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερ msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος" @@ -5393,7 +5397,7 @@ msgstr "Αντιγραφή επιπλέον γραμμών" msgid "Copy extra line items from the original order" msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Αντιγραφή παραμέτρων" @@ -5412,216 +5416,216 @@ msgstr "Γραμμές" msgid "Completed Lines" msgstr "Ολοκληρωμένες γραμμές" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Αντιγραφή παραγγελίας" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Καθορίστε επιλογές για την αντιγραφή αυτής της παραγγελίας" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Μη έγκυρο ID παραγγελίας" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Όνομα προμηθευτή" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Η παραγγελία δεν είναι ανοικτή" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Αυτόματη τιμολόγηση" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Νόμισμα τιμής αγοράς" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Συγχώνευση ειδών" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Συγχώνευση ειδών με το ίδιο προϊόν, προορισμό και ημερομηνία στόχο σε μία γραμμή" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Εσωτερικός κωδικός προϊόντος" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Εσωτερική ονομασία προϊόντος" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Πρέπει να καθοριστεί εντολή αγοράς" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Γραμμή" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ημερομηνία λήξης" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Σαρωμένο barcode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Το barcode χρησιμοποιείται ήδη" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Πρέπει να δοθούν γραμμές" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Αποστολές" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Ολοκληρωμένες αποστολές" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Νόμισμα τιμής πώλησης" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Δεσμευμένα είδη" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Η ποσότητα πρέπει να είναι θετική" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Γραμμή εντολής επιστροφής" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Η γραμμή έχει ήδη παραληφθεί" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Ποσότητα προς επιστροφή" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Νόμισμα τιμής γραμμής" @@ -5837,7 +5841,7 @@ msgstr "Προεπιλεγμένες λέξεις-κλειδιά για προϊ msgid "Icon" msgstr "Εικονίδιο" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Εικονίδιο (προαιρετικό)" @@ -5858,7 +5862,7 @@ msgstr "Προεπιλεγμένη τιμή" msgid "Default Parameter Value" msgstr "Προεπιλεγμένη τιμή παραμέτρου" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Προϊόντα" @@ -5973,7 +5977,7 @@ msgstr "Λέξεις-κλειδιά προϊόντος για βελτίωση msgid "Part category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -6006,7 +6010,7 @@ msgstr "Προεπιλεγμένη λήξη" msgid "Expiry time (in days) for stock items of this part" msgstr "Χρόνος λήξης (σε ημέρες) για είδη αποθέματος αυτού του προϊόντος" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Ελάχιστο απόθεμα" @@ -6487,355 +6491,355 @@ msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊό msgid "Duplicate relationship already exists" msgstr "Υπάρχει ήδη διπλή σχέση" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Γονική κατηγορία" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Γονική κατηγορία προϊόντος" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Υποκατηγορίες" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Αποτελέσματα" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Αριθμός αποτελεσμάτων που έχουν καταγραφεί για αυτό το πρότυπο" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Νόμισμα αγοράς για αυτό το είδος αποθέματος" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Το αρχείο δεν είναι εικόνα" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Αρχικό προϊόν" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Επιλέξτε αρχικό προϊόν για αντιγραφή" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Αντιγραφή εικόνας" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Αντιγραφή BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Αντιγραφή δεδομένων παραμέτρων από το αρχικό προϊόν" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Αντιγραφή σημειώσεων" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Αντιγραφή δοκιμών" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Αρχική ποσότητα αποθέματος" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Καθορίστε αρχική ποσότητα αποθέματος για αυτό το προϊόν. Αν η ποσότητα είναι μηδέν, δεν προστίθεται απόθεμα" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Αρχική τοποθεσία αποθέματος" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Καθορίστε αρχική τοποθεσία αποθέματος για αυτό το προϊόν" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Επιλέξτε προμηθευτή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Επιλέξτε κατασκευαστή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος προμηθευτής" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος κατασκευαστής" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Υπάρχει ήδη προϊόν κατασκευαστή με αυτό το MPN" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Υπάρχει ήδη προϊόν προμηθευτή με αυτό το SKU" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Όνομα κατηγορίας" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Σε παραγωγή" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Ποσότητα αυτού του προϊόντος που βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Εκκρεμής ποσότητα αυτού του προϊόντος που έχει προγραμματιστεί για παραγωγή" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Είδη αποθέματος" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Αναθεωρήσεις" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Συνολικό απόθεμα" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Μη δεσμευμένο απόθεμα" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Απόθεμα παραλλαγών" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Αντιγραφή προϊόντος" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Αντιγραφή αρχικών δεδομένων από άλλο προϊόν" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Αρχικό απόθεμα" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Δημιουργία προϊόντος με αρχική ποσότητα αποθέματος" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Πληροφορίες προμηθευτή" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Προσθήκη αρχικών πληροφοριών προμηθευτή για αυτό το προϊόν" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Αντιγραφή παραμέτρων κατηγορίας" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Αντιγραφή προτύπων παραμέτρων από την επιλεγμένη κατηγορία προϊόντος" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Υπάρχουσα εικόνα" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Όνομα αρχείου υπάρχουσας εικόνας προϊόντος" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Το αρχείο εικόνας δεν υπάρχει" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Επικύρωση ολόκληρης της λίστας υλικών (BOM)" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Μπορεί να παραχθεί" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Απαιτείται για εντολές παραγωγής" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Δεσμευμένο σε εντολές παραγωγής" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Απαιτείται για εντολές πώλησης" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Δεσμευμένο σε εντολές πώλησης" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Ελάχιστη τιμή" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Παράκαμψη υπολογισμένης τιμής για την ελάχιστη τιμή" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Νόμισμα ελάχιστης τιμής" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Μέγιστη τιμή" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Παράκαμψη υπολογισμένης τιμής για τη μέγιστη τιμή" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Νόμισμα μέγιστης τιμής" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Ενημέρωση" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Ενημέρωση τιμολόγησης για αυτό το προϊόν" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Δεν ήταν δυνατή η μετατροπή από τα δοθέντα νομίσματα σε {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Η ελάχιστη τιμή δεν πρέπει να είναι μεγαλύτερη από τη μέγιστη τιμή" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Η μέγιστη τιμή δεν πρέπει να είναι μικρότερη από την ελάχιστη τιμή" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Επιλέξτε τη γονική συναρμολόγηση" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Επιλέξτε το προϊόν Προϊόντος" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Επιλέξτε προϊόν από το οποίο θα αντιγραφεί το BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Αφαίρεση υπαρχόντων δεδομένων" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Αφαίρεση υπαρχόντων στοιχείων BOM πριν την αντιγραφή" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Συμπερίληψη κληρονομημένων" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Συμπερίληψη στοιχείων BOM που κληρονομούνται από προϊόντα προτύπων" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Παράλειψη μη έγκυρων γραμμών" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Ενεργοποιήστε αυτή την επιλογή για να παραλείπονται οι μη έγκυρες γραμμές" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Αντιγραφή εναλλακτικών προϊόντων" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Αντιγραφή εναλλακτικών προϊόντων κατά την αντιγραφή στοιχείων BOM" @@ -8288,7 +8292,7 @@ msgstr "Αναφορά δοκιμών είδους αποθέματος" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Εγκατεστημένα είδη" @@ -8361,7 +8365,7 @@ msgstr "Φιλτράρισμα κατά τοποθεσίες ανώτατου ε msgid "Include sub-locations in filtered results" msgstr "Συμπερίληψη υποτοποθεσιών στα φιλτραρισμένα αποτελέσματα" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Γονική τοποθεσία" @@ -8445,7 +8449,7 @@ msgstr "Ημερομηνία λήξης πριν από" msgid "Expiry date after" msgstr "Ημερομηνία λήξης μετά από" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Παλαιωμένο" @@ -8579,7 +8583,7 @@ msgstr "Πρέπει να καθοριστεί προϊόν" msgid "Stock items cannot be located into structural stock locations!" msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν σε δομικές τοποθεσίες αποθέματος!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Δεν μπορεί να δημιουργηθεί είδος αποθέματος για εικονικά προϊόντα" @@ -8624,7 +8628,7 @@ msgstr "Επιλέξτε αντίστοιχο προϊόν προμηθευτή msgid "Where is this stock item located?" msgstr "Πού βρίσκεται αυτό το είδος αποθέματος;" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Συσκευασία στην οποία αποθηκεύεται αυτό το είδος αποθέματος" @@ -8640,7 +8644,7 @@ msgstr "Είναι αυτό το είδος εγκατεστημένο σε άλ msgid "Serial number for this item" msgstr "Σειριακός αριθμός για αυτό το είδος" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Κωδικός παρτίδας για αυτό το είδος αποθέματος" @@ -8753,7 +8757,7 @@ msgstr "Το είδος αποθέματος βρίσκεται αυτή τη σ msgid "Serialized stock cannot be merged" msgstr "Σειριακό απόθεμα δεν μπορεί να συγχωνευθεί" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Διπλότυπα είδη αποθέματος" @@ -8877,7 +8881,7 @@ msgstr "Επιλέξτε προϊόν για το οποίο θα δημιουρ msgid "Quantity of serial numbers to generate" msgstr "Ποσότητα σειριακών αριθμών προς δημιουργία" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Πρότυπο δοκιμής για αυτό το αποτέλεσμα" @@ -8901,222 +8905,222 @@ msgstr "Γονικό είδος" msgid "Parent stock item" msgstr "Γονικό είδος αποθέματος" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Χρήση μεγέθους συσκευασίας κατά την προσθήκη: η καθορισμένη ποσότητα είναι ο αριθμός των συσκευασιών" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Χρήση μεγέθους συσκευασίας" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Εισαγάγετε σειριακούς αριθμούς για νέα είδη" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Κωδικός προϊόντος προμηθευτή" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Ληγμένο" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Θυγατρικά είδη" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Εγγραφές ιχνηλάτησης" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Τιμή αγοράς αυτού του είδους αποθέματος, ανά μονάδα ή συσκευασία" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Εισαγάγετε τον αριθμό ειδών αποθέματος για σειριοποίηση" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Δεν δόθηκε είδος αποθέματος" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Τοποθεσία προορισμού αποθέματος" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Δεν μπορούν να εκχωρηθούν σειριακοί αριθμοί σε αυτό το προϊόν" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Οι σειριακοί αριθμοί υπάρχουν ήδη" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Επιλέξτε είδος αποθέματος προς εγκατάσταση" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Ποσότητα προς εγκατάσταση" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Εισαγάγετε την ποσότητα των ειδών προς εγκατάσταση" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Προσθέστε σημείωση συναλλαγής (προαιρετικά)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Η ποσότητα προς εγκατάσταση πρέπει να είναι τουλάχιστον 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Το είδος αποθέματος δεν είναι διαθέσιμο" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Το επιλεγμένο προϊόν δεν βρίσκεται στο Δελτίο Υλικών (BOM)" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Η ποσότητα προς εγκατάσταση δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Τοποθεσία προορισμού για το απεγκατεστημένο είδος" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Επιλέξτε προϊόν στο οποίο θα μετατραπεί το είδος αποθέματος" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Το επιλεγμένο προϊόν δεν είναι έγκυρη επιλογή για μετατροπή" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Δεν είναι δυνατή η μετατροπή είδους αποθέματος με εκχωρημένο SupplierPart" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Κωδικός κατάστασης είδους αποθέματος" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Επιλέξτε είδη αποθέματος για αλλαγή κατάστασης" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Δεν επιλέχθηκαν είδη αποθέματος" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Υποτοποθεσίες" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Γονική τοποθεσία αποθέματος" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Το προϊόν πρέπει να είναι διαθέσιμο για πώληση" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Το είδος έχει δεσμευτεί σε εντολή πώλησης" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Το είδος έχει δεσμευτεί σε εντολή παραγωγής" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Πελάτης στον οποίο θα αποδοθούν τα είδη αποθέματος" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Η επιλεγμένη εταιρεία δεν είναι πελάτης" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Σημειώσεις απόδοσης αποθέματος" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Πρέπει να δοθεί λίστα ειδών αποθέματος" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Σημειώσεις συγχώνευσης αποθέματος" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Να επιτρέπονται διαφορετικοί προμηθευτές" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικά προϊόντα προμηθευτή" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Να επιτρέπεται διαφορετική κατάσταση" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικούς κωδικούς κατάστασης" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Πρέπει να δοθούν τουλάχιστον δύο είδη αποθέματος" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Καμία αλλαγή" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Τιμή πρωτεύοντος κλειδιού StockItem" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Το είδος δεν βρίσκεται σε απόθεμα" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Το είδος βρίσκεται ήδη σε απόθεμα" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Η ποσότητα δεν πρέπει να είναι αρνητική" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Σημειώσεις συναλλαγής αποθέματος" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Συγχώνευση με υπάρχον απόθεμα" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Συγχώνευση επιστρεφόμενων ειδών με υπάρχοντα είδη αποθέματος, όπου είναι δυνατό" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Επόμενος σειριακός αριθμός" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Προηγούμενος σειριακός αριθμός" @@ -9598,99 +9602,99 @@ msgstr "Εντολές Πώλησης" msgid "Return Orders" msgstr "Εντολές Επιστροφής" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Όνομα χρήστη" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Όνομα" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Το όνομα του χρήστη" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Επώνυμο" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Το επώνυμο του χρήστη" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Διεύθυνση email του χρήστη" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Υπερχρήστης" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Είναι ο χρήστης υπερχρήστης;" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Είναι ο λογαριασμός χρήστη ενεργός;" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Μόνο υπερχρήστης μπορεί να τροποποιήσει αυτό το πεδίο" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Κωδικός πρόσβασης" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Κωδικός πρόσβασης του χρήστη" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Παράβλεψη προειδοποίησης" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Παράβλεψη της προειδοποίησης σχετικά με τους κανόνες κωδικού πρόσβασης" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Δεν έχετε δικαίωμα δημιουργίας χρηστών" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ο λογαριασμός σας δημιουργήθηκε." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Καλώς ήρθατε στο InvenTree" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index 4a5c3ee85b..4b3c0acc6b 100644 --- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 10:22+0000\n" +"POT-Creation-Date: 2026-04-13 12:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -105,13 +105,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -216,7 +216,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -337,51 +337,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -568,15 +568,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -586,8 +586,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,9 +596,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -670,16 +670,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -688,7 +688,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -696,24 +696,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -728,19 +728,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -784,7 +784,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -814,7 +814,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -862,16 +862,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -965,7 +965,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -981,23 +981,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1018,10 +1018,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1033,7 +1033,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1072,11 +1072,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1100,378 +1100,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1495,7 +1495,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1519,19 +1519,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1551,7 +1551,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1629,7 +1629,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1653,7 +1653,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2127,7 +2127,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2141,7 +2141,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2149,7 +2149,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2157,18 +2157,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2457,7 +2457,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2466,11 +2466,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2860,8 +2860,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3989,33 +3989,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4196,7 +4196,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4214,12 +4214,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4243,8 +4243,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4255,7 +4255,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4291,8 +4291,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4340,14 +4340,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4452,67 +4456,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4822,7 +4826,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4919,7 +4923,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4957,7 +4961,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5014,7 +5018,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5140,7 +5144,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5212,8 +5216,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5278,7 +5282,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5394,7 +5398,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5413,216 +5417,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5838,7 +5842,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5859,7 +5863,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5974,7 +5978,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6007,7 +6011,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6488,355 +6492,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8289,7 +8293,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8362,7 +8366,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8446,7 +8450,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8580,7 +8584,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8625,7 +8629,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8641,7 +8645,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8754,7 +8758,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8878,7 +8882,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8902,222 +8906,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9599,98 +9603,98 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index bec0242164..10ffcc19ad 100644 --- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -104,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal no válido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notas" @@ -215,7 +215,7 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Correo electrónico" @@ -336,51 +336,51 @@ msgstr "Se ha registrado un error por el servidor." msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 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:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Incluye Variantes" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -669,16 +669,16 @@ msgstr "Excluir Árbol" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaje" @@ -687,7 +687,7 @@ msgstr "Montaje" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Comprobable" @@ -695,24 +695,24 @@ msgstr "Comprobable" msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Agotado" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "En pedido" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Construir órden" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Salida" @@ -783,7 +783,7 @@ msgstr "La fecha límite debe ser posterior a la fecha de inicio" msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referencia de orden de venta" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Ubicación de la fuente" @@ -861,16 +861,16 @@ msgstr "Estado de la construcción" msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Fecha de Creación" @@ -964,7 +964,7 @@ msgstr "El pedido {build} ha sido procesado" msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" @@ -980,23 +980,23 @@ msgstr "La construcción de la salida ya está completa" msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" @@ -1017,10 +1017,10 @@ msgstr "Construir línea de pedido" msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artículo de stock" @@ -1099,378 +1099,378 @@ msgstr "Artículo de stock de destino" msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceptar que el número requerido de salidas de construcción no se han completado" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Orden de construcción atrasada" msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1550,7 +1550,7 @@ msgstr "No se han proporcionado códigos de divisa válidos" msgid "No plugin" msgstr "Sin plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" @@ -1628,7 +1628,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Precio" @@ -1652,7 +1652,7 @@ msgstr "Nombre para este webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" @@ -2148,7 +2148,7 @@ msgstr "Plantilla" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Datos" @@ -2156,18 +2156,18 @@ msgstr "Datos" msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Nota" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nombre de Archivo" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "El usuario no tiene permiso para crear o editar archivos adjuntos para este modelo" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" @@ -2859,8 +2859,8 @@ msgstr "Las partes son plantillas por defecto" msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" @@ -3988,33 +3988,33 @@ msgstr "La parte está activa" msgid "Manufacturer is Active" msgstr "El fabricante está activo" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Tiene Stock" @@ -4195,7 +4195,7 @@ msgstr "Notas de envío para uso interno" msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -4213,12 +4213,12 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" @@ -4242,8 +4242,8 @@ msgstr "Las unidades de paquete deben ser mayor que cero" msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4290,8 +4290,8 @@ msgstr "costo base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Paquetes" @@ -4339,14 +4339,18 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 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:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La columna no existe en el archivo de datos" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "El campo no existe en el modelo destino" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Sesión de importación" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Columna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Orden" msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Componente interno" @@ -4918,7 +4922,7 @@ msgstr "Fecha de inicio" msgid "Scheduled start date for this order" msgstr "Fecha de inicio programada para este pedido" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Referencia del pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Estado" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Recibido" msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Precio de Compra" @@ -5211,8 +5215,8 @@ msgstr "Revisado por" msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" @@ -5277,7 +5281,7 @@ msgstr "La cantidad de asignación no puede exceder la cantidad de stock" msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" @@ -5393,7 +5397,7 @@ msgstr "Copiar líneas adicionales" msgid "Copy extra line items from the original order" msgstr "Copiar elementos extra de la línea del pedido original" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copiar Parámetros" @@ -5412,216 +5416,216 @@ msgstr "Partidas" msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID de pedido no válido" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Introduzca el código de lote para los artículos de almacén entrantes" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5837,7 +5841,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5858,7 +5862,7 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Partes" @@ -5973,7 +5977,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -6006,7 +6010,7 @@ msgstr "Expiración por defecto" msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Stock mínimo" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "En construcción" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Elementos instalados" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Ubicación principal" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Desactualizado" @@ -8579,7 +8583,7 @@ msgstr "Se debe especificar la pieza" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "Seleccione una parte del proveedor correspondiente para este artículo d msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" @@ -8640,7 +8644,7 @@ msgstr "¿Está este artículo instalado en otro artículo?" msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" @@ -8753,7 +8757,7 @@ msgstr "El artículo de stock está en producción" msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "Elemento padre" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:746 +#: stock/serializers.py:760 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:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "Órdenes de venta" msgid "Return Orders" msgstr "Ordenes de devolución" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nombre de usuario" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nombre" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nombre del usuario" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Apellido" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Apellido del usuario" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:484 +#: users/serializers.py:491 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" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index 12e3a63eac..4cf7a2dfa2 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -104,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notas" @@ -215,7 +215,7 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Correo electrónico" @@ -336,51 +336,51 @@ msgstr "Se ha registrado un error por el servidor." msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 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:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Incluye Variantes" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaje" @@ -687,7 +687,7 @@ msgstr "Montaje" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Comprobable" @@ -695,24 +695,24 @@ msgstr "Comprobable" msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "En pedido" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Construir órden" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referencia de orden de venta" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Ubicación de la fuente" @@ -861,16 +861,16 @@ msgstr "Estado de la construcción" msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Fecha de Creación" @@ -964,7 +964,7 @@ msgstr "El pedido {build} ha sido procesado" msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" @@ -980,23 +980,23 @@ msgstr "La construcción de la salida ya está completa" msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" @@ -1017,10 +1017,10 @@ msgstr "Construir línea de pedido" msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artículo de stock" @@ -1099,378 +1099,378 @@ msgstr "Artículo de stock de destino" msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceptar que el número requerido de salidas de construcción no se han completado" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Orden de construcción atrasada" msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1550,7 +1550,7 @@ msgstr "No se han proporcionado códigos de divisa válidos" msgid "No plugin" msgstr "Sin plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" @@ -1628,7 +1628,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Precio" @@ -1652,7 +1652,7 @@ msgstr "Nombre para este webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" @@ -2148,7 +2148,7 @@ msgstr "Plantilla" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Datos" @@ -2156,18 +2156,18 @@ msgstr "Datos" msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Nota" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nombre de Archivo" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" @@ -2859,8 +2859,8 @@ msgstr "Las partes son plantillas por defecto" msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Tiene existencias" @@ -4195,7 +4195,7 @@ msgstr "Notas de envío para uso interno" msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -4213,12 +4213,12 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" @@ -4242,8 +4242,8 @@ msgstr "Las unidades de paquete deben ser mayor que cero" msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4290,8 +4290,8 @@ msgstr "costo base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Paquetes" @@ -4339,14 +4339,18 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 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:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La columna no existe en el archivo de datos" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "El campo no existe en el modelo destino" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Sesión de importación" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Columna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Orden" msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Componente interno" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Referencia del pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Estado" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Recibido" msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Precio de Compra" @@ -5211,8 +5215,8 @@ msgstr "Revisado por" msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" @@ -5277,7 +5281,7 @@ msgstr "La cantidad de asignación no puede exceder la cantidad de stock" msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" @@ -5393,7 +5397,7 @@ msgstr "Copiar líneas adicionales" msgid "Copy extra line items from the original order" msgstr "Copiar partidas extra del pedido original" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copiar Parámetros" @@ -5412,216 +5416,216 @@ msgstr "Partidas" msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID de pedido inválido" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Introduzca el código de lote para los artículos de almacén entrantes" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5837,7 +5841,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5858,7 +5862,7 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Partes" @@ -5973,7 +5977,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -6006,7 +6010,7 @@ msgstr "Expiración por defecto" msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Stock mínimo" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "En construcción" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Elementos instalados" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Ubicación principal" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Desactualizado" @@ -8579,7 +8583,7 @@ msgstr "Se debe especificar la pieza" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "Seleccione una parte del proveedor correspondiente para este artículo d msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" @@ -8640,7 +8644,7 @@ msgstr "¿Está este artículo instalado en otro artículo?" msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" @@ -8753,7 +8757,7 @@ msgstr "El artículo de stock está en producción" msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "Elemento padre" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:746 +#: stock/serializers.py:760 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:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "Órdenes de venta" msgid "Return Orders" msgstr "Ordenes de devolución" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nombre de usuario" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nombre" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nombre del usuario" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Apellido" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Apellido del usuario" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:484 +#: users/serializers.py:491 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" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index 9c0f2fd393..04f2d20859 100644 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -104,13 +104,13 @@ msgstr "Pane kuupäev" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Märkmed" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-post" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Pilt" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valikuline" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "Jälgitud" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saadaval" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Asukoht" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "Koostamise olek" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Loomise kuupäev" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Osa nimi" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Tühista kõik laoseisu eraldised mahakantud väljundite jaoks" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Valikained" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Jälgitav" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Saadaval laos" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Katkestatud" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "On link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "On fail" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Pluginat pole" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mall" @@ -2148,7 +2148,7 @@ msgstr "Mall" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Andmed" @@ -2156,18 +2156,18 @@ msgstr "Andmed" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Märkus" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Failinimi" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Mudeli liik" @@ -2465,11 +2465,11 @@ msgstr "Mudeli liik" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Tootja" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Ettevõte" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Laos" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Tarnija" msgid "Select supplier" msgstr "Vali tarnija" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Väli" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Veerg" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Staatus" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Saadetis" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "Kopeeri lisareaüksused algsest tellimusest" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopeeri parameetrid" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Määrake selle tellimuse dubleerimise valikud" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Vale tellimuse ID" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Vöötkood" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skännitud ribakood" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Saadetised" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Järgmised seerianumbrid ei ole saadaval" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "Ikoon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikoon (valikuline)" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Osad" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "Osa kategooria" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimaalne laoseis" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originaalosa" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopeeri pilt" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategooria nimi" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Ehitamine" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Tarnija info" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimaalne hind" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maksimaalne hind" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Uuenda" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Tarnija osa number" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Kasutajanimi" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Eesnimi" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Perekonnanimi" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index a3dd6f0e68..caebd96b9e 100644 --- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -104,13 +104,13 @@ msgstr "تاریخ را وارد کنید" msgid "Invalid decimal value" msgstr "مقدار اعشاری نامعتبر است" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "یادداشت" @@ -215,7 +215,7 @@ msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" msgid "Log in to the app" msgstr "وارد برنامه شوید" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "ایمیل" @@ -336,51 +336,51 @@ msgstr "یک خطا توسط سرور ثبت شده است." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "باید یک عدد معتبر باشد" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "ارز" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "ارز را از گزینه های موجود انتخاب کنید" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "مقدار نامعتبر" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "تصویر ریموت" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "آدرس فایل تصویری از راه دور" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "دانلود تصاویر از URL ریموت فعال نیست" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "دانلود تصویر از URL ریموت انجام نشد" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "دسته" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "اختیاری" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "مونتاژ" @@ -687,7 +687,7 @@ msgstr "مونتاژ" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "سفارش معوق" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "اختصاص داده شده" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "در دسترس" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "سفارش ساخت" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "مکان" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "مرجع سفارش فروش" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "منبع محل" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index 27dacfa79c..d4eb196998 100644 --- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -104,13 +104,13 @@ msgstr "Anna päivämäärä" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Merkinnät" @@ -215,7 +215,7 @@ msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Sähköposti" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Kuva" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Virheellinen arvo" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Kuvatiedoston URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saatavilla" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Sijainti" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Varastotuote" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Seurattavissa" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Peruttu" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Käyttäjä" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Hinta" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiivinen" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Muistiinpano" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Tiedostonimi" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponentti" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Valmistaja" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Yritys" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Valmistajan osanumero" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Toimittaja" msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Tilauksen viite" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Tila" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Vastaanotettu" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "Kuvake" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Käyttäjätunnus" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Etunimi" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Sukunimi" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index d209872183..3cc62ea81e 100644 --- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -104,13 +104,13 @@ msgstr "Entrer la date" msgid "Invalid decimal value" msgstr "Valeur décimale invalide" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notes" @@ -215,7 +215,7 @@ msgstr "L'URL fournie n'est pas un fichier image valide" msgid "Log in to the app" msgstr "Se connecter à l'application" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -336,51 +336,51 @@ msgstr "Une erreur a été loguée par le serveur." msgid "Image" msgstr "Image" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Ce champ ne peut pas être vide." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Images distantes" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL du fichier image distant" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Le téléchargement des images depuis une URL distante n'est pas activé" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Échec du téléchargement de l'image à partir de l'URL distant" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Format du type de contenu invalide" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Type de contenu introuvable" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Le type de contenu ne correspond pas à la classe de mixin requise" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Inclure les variantes" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Inclure les variantes" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Inclure les variantes" msgid "Part" msgstr "Pièce" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Catégorie" @@ -669,16 +669,16 @@ msgstr "Exclure l'arbre" msgid "Build must be cancelled before it can be deleted" msgstr "La construction doit être annulée avant de pouvoir être supprimée" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consommable" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Facultatif" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Assemblage" @@ -687,7 +687,7 @@ msgstr "Assemblage" msgid "Tracked" msgstr "Suivi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testable" @@ -695,24 +695,24 @@ msgstr "Testable" msgid "Order Outstanding" msgstr "Commande en cours" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allouée" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Consommé" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "En Commande" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Emplacement" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Sortie" @@ -783,7 +783,7 @@ msgstr "La date cible doit être postérieure à la date de début" msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Bon de commande de référence" msgid "Sales Order to which this build is allocated" msgstr "Commande de vente à laquelle cette fabrication est allouée" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Emplacement d'origine" @@ -861,16 +861,16 @@ msgstr "État de la construction" msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Date de création" @@ -964,7 +964,7 @@ msgstr "La commande de construction {build} a été effectuée" msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Les numéros de série doivent être fournis pour les pièces traçables" @@ -980,23 +980,23 @@ msgstr "L'ordre de production a déjà été réalisé" msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantité ne peut pas être supérieure à la quantité de sortie" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Les sorties de fabrication n'ont pas passé tous les tests requis" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La sortie de compilation {serial} n'a pas réussi tous les tests requis" @@ -1017,10 +1017,10 @@ msgstr "Poste de l'ordre de construction" msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Création de l'objet" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Article en stock" @@ -1099,378 +1099,378 @@ msgstr "Stock de destination de l'article" msgid "Build Level" msgstr "Niveau de construction" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nom de l'article" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "La pièce en sortie ne correspond pas à la pièce de l'ordre de construction" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantité entière requise, car la facture de matériaux contient des pièces à puce" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Emplacement de stock pour la sortie de la fabrication" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Affecter automatiquement les éléments requis avec les numéros de série correspondants" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Compléter les sorties si le stock n'a pas été entièrement alloué" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consommation du stock alloué" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consommer tout stock qui a déjà été alloué à cette construction" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Supprimer toutes les sorties de construction qui n'ont pas été complétées" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Comment voulez-vous gérer les articles en stock supplémentaires assignés à l'ordre de construction" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepter les articles de stock qui n'ont pas été complètement alloués à cette ordre de production" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepter que tous les ordres de production n'aient pas encore été achevés" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "L'ordre de construction a des ordres de construction enfants ouverts" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "L'ordre de construction doit être en état de production" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "La sortie de la construction doit pointer vers la même construction" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part doit pointer sur la même pièce que l'ordre de construction" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "La sortie de construction doit être spécifiée pour l'allocation des pièces suivies" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La sortie de la construction ne peut pas être spécifiée pour l'allocation des pièces non suivies" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Emplacement de stock où les pièces doivent être fournies (laissez vide pour les prendre à partir de n'importe quel emplacement)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Les articles de stock à plusieurs emplacements peuvent être utilisés de manière interchangeable" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Référence de la nomenclature" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID de la pièce de la nomenclature" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nomenclature Nom de la pièce" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Construire" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Pièce fournisseur" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantité allouée" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Référence de construction" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nom de la catégorie de pièces" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Traçable" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Planifié pour fabrication" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stock externe" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stock de substitution disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Stock de variantes disponibles" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantité consommée dépasse la quantité allouée" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Note optionnelle pour la consommation du stock" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupliquer l'allocation de l'article de fabrication" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Dupliquer l'allocation de ligne de fabrication" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Au moins un élément ou une ligne doit être fourni" @@ -1494,7 +1494,7 @@ msgstr "En pause" msgid "Cancelled" msgstr "Annulé" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Ordre de commande en retard" msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "C'est un lien" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "C'est un fichier" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" @@ -1550,7 +1550,7 @@ msgstr "Aucun code de devise valide fourni" msgid "No plugin" msgstr "Pas de plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Code du projet Étiquette" @@ -1628,7 +1628,7 @@ msgstr "Utilisateur" msgid "Price break quantity" msgstr "Quantité de rupture de prix" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Prix" @@ -1652,7 +1652,7 @@ msgstr "Nom de ce webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actif" @@ -2126,7 +2126,7 @@ msgstr "Paramètres" msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "Type de modèle non valide pour la pièce jointe" @@ -2140,7 +2140,7 @@ msgstr "ID du modèle cible pour ce paramètre" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modèle" @@ -2148,7 +2148,7 @@ msgstr "Modèle" msgid "Parameter template" msgstr "Modèle de paramètre" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Données" @@ -2156,18 +2156,18 @@ msgstr "Données" msgid "Parameter Value" msgstr "Valeur du paramètre" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Note" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Champ de notes facultatif" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nom du fichier" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Type de modèle" @@ -2465,11 +2465,11 @@ msgstr "Type de modèle" msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier des pièces jointes pour ce modèle" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier les paramètres de ce modèle." -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "La liste de sélection est verrouillée" @@ -2859,8 +2859,8 @@ msgstr "Les pièces sont des templates par défaut" msgid "Parts can be assembled from other components by default" msgstr "Les pièces peuvent être assemblées à partir d'autres composants par défaut" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Composant" @@ -3988,33 +3988,33 @@ msgstr "La pièce est active" msgid "Manufacturer is Active" msgstr "Le fabricant est actif" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Le fournisseur de la pièce est active" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "La pièce interne est active" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricant" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Société" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "A du stock" @@ -4195,7 +4195,7 @@ msgstr "Notes internes pour la livraison" msgid "Link to address information (external)" msgstr "Lien vers les informations de l'adresse (externe)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Pièces du fabricant" @@ -4213,12 +4213,12 @@ msgstr "Sélectionner une partie" msgid "Select manufacturer" msgstr "Sélectionner un fabricant" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Référence fabricant" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Référence du fabricant" @@ -4242,8 +4242,8 @@ msgstr "Les unités d'emballage doivent être supérieures à zéro" msgid "Linked manufacturer part must reference the same base part" msgstr "La pièce du fabricant liée doit faire référence à la même pièce de base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Fournisseur" msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" @@ -4290,8 +4290,8 @@ msgstr "coût de base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Conditionnement" @@ -4339,14 +4339,18 @@ msgstr "Devise par défaut utilisée pour ce fournisseur" msgid "Company Name" msgstr "Nom de l'entreprise" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Ruptures de prix" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Une erreur s'est produite lors de l'exportation des données" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Identifiant de base de données existant pour l'enregistrement" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "La colonne est déjà associée à un champ de la base de données" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Le champ est déjà associé à une colonne de données" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Le mappage des colonnes doit être lié à une session d'importation valide" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La colonne n'existe pas dans le fichier de données" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Le champ n'existe pas dans le modèle cible" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Le champ sélectionné est en lecture seule" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Session d'importation" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Champ d'application" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Colonne" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Index des lignes" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Données de la ligne d'origine" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Erreurs" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Valide" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "L'ID est requis pour mettre à jour les enregistrements existants." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Aucun enregistrement trouvé avec l'ID fourni" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Format d'ID invalide" @@ -4821,7 +4825,7 @@ msgstr "Commande" msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Pièces Internes" @@ -4918,7 +4922,7 @@ msgstr "Date de début" msgid "Scheduled start date for this order" msgstr "Date de début prévue pour cette commande" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Date Cible" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Référence de la commande" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "État" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Reçu" msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Prix d'achat" @@ -5211,8 +5215,8 @@ msgstr "Vérifié par" msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envoi" @@ -5277,7 +5281,7 @@ msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantité doit être égale à 1 pour un article de stock sérialisé" @@ -5393,7 +5397,7 @@ msgstr "Copier les lignes supplémentaires" msgid "Copy extra line items from the original order" msgstr "Copier les postes supplémentaires de l'ordre original" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copier les paramètres" @@ -5412,216 +5416,216 @@ msgstr "Postes de travail" msgid "Completed Lines" msgstr "Lignes achevées" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicata de commande" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Spécifier les options de duplication de cette commande" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID de commande invalide" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nom du fournisseur" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permettre la clôture d'une commande avec des postes incomplets" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "La commande comporte des postes incomplets" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Tarification automobile" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calculer automatiquement le prix d'achat sur la base des données de pièces du fournisseur" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Fusionner des éléments" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Fusionner en un seul poste les éléments ayant la même partie, la même destination et la même date cible" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Numéro de pièce interne" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nom de la pièce interne" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "La pièce du fournisseur doit être spécifiée" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Le bon de commande doit être spécifié" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Le fournisseur doit correspondre au bon de commande" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Le bon de commande doit correspondre au fournisseur" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Poste" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Sélectionner le lieu de destination des envois reçus" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Saisir le code de lot pour les articles de stock entrant" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Date d'expiration" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Saisir la date d'expiration des articles de stock entrant" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Entrez les numéros de série pour les articles de stock entrants" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Remplacer les informations d'emballage pour les articles en stock entrants" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Note supplémentaire pour les articles en stock entrant" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Code-barres scanné" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Les postes doivent être fournis" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "L'emplacement de la destination doit être spécifié" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Les valeurs de code-barres fournies doivent être uniques" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envois" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envois terminés" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Lignes allouées" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Postes alloués" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Aucun détail sur l'expédition n'est fourni" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Le poste n'est pas associé à cette commande" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La quantité doit être positive" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "L'envoi a déjà été effectué" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "L'envoi n'est pas associé à cette commande" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Aucune correspondance trouvée pour les numéros de série suivants" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Les numéros de série suivants sont indisponibles" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Poste de commande de retour" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Le poste ne correspond pas à l'ordre de retour" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Le poste a déjà été reçu" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Les articles ne peuvent être reçus que pour des commandes en cours" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Quantité à retourner" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Devise du prix de la ligne" @@ -5837,7 +5841,7 @@ msgstr "Mots-clés par défaut pour les pièces de cette catégorie" msgid "Icon" msgstr "Icône" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icône (facultatif)" @@ -5858,7 +5862,7 @@ msgstr "Valeur par Défaut" msgid "Default Parameter Value" msgstr "Valeur par défaut du paramètre" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Pièces" @@ -5973,7 +5977,7 @@ msgstr "Les mots-clés partiels pour améliorer la visibilité dans les résulta msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -6006,7 +6010,7 @@ msgstr "Expiration par défaut" msgid "Expiry time (in days) for stock items of this part" msgstr "Délai d'expiration (en jours) pour les articles en stock de cette pièce" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Stock Minimum" @@ -6487,355 +6491,355 @@ msgstr "Il n'est pas possible de créer une relation entre une pièce et elle-m msgid "Duplicate relationship already exists" msgstr "Une relation en double existe déjà" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Catégorie de parents" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Catégorie de pièce mère" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Sous-catégories" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Résultats" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Nombre de résultats enregistrés par rapport à ce modèle" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Le fichier n'est pas une image" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Partie originale" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Sélectionner la partie originale à dupliquer" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copier l'image à partir de la partie originale" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copier la nomenclature" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copie de la nomenclature de la pièce originale" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copie des données de paramètres de la pièce d'origine" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Notes sur la copie" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Copier les notes de la partie originale" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Test Copie" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Quantité de stock initial" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Indiquer la quantité de stock initiale pour cette pièce. Si la quantité est égale à zéro, aucun stock n'est ajouté." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Emplacement initial du stock" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Spécifier l'emplacement du stock initial pour cette pièce" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Sélectionner le fournisseur (ou laisser en blanc pour passer)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Sélectionner le fabricant (ou laisser en blanc pour ignorer)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Numéro de pièce du fabricant" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "L'entreprise sélectionnée n'est pas un fournisseur valide" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "L'entreprise sélectionnée n'est pas un fabricant valide" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "La pièce du fabricant correspondant à ce MPN existe déjà" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "La pièce du fournisseur correspondant à cette UGS existe déjà" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nom catégorie" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Construction" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Quantité de cette pièce actuellement en production" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantité exceptionnelle de cette pièce sont planifié à la fabrication" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Éléments en stock" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Révisions" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Stock total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Stock non attribué" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variante Stock" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliquer une pièce" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Copier les données initiales d'une autre partie" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock initial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Créer une pièce avec une quantité de stock initiale" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informations sur le fournisseur" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Ajouter les informations initiales du fournisseur pour cette pièce" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copier les paramètres de la catégorie" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copier les modèles de paramètres de la catégorie de pièces sélectionnée" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Image existante" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Nom de fichier d'une image de pièce existante" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Le fichier image n'existe pas" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Valider l'ensemble de la nomenclature" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Peut construire" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Nécessaire pour fabrication" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Alloué à la fabrication" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Nécessaire pour les commandes" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Alloué aux commandes" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Remplacer la valeur calculée pour le prix minimum" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Prix minimum monnaie" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Remplacer la valeur calculée pour le prix maximum" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Devise du prix maximum" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Mise à jour" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Mise à jour des prix pour cette pièce" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossible de convertir les devises fournies en {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Le prix minimum ne doit pas être supérieur au prix maximum" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Le prix maximum ne doit pas être inférieur au prix minimum" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Sélectionner l'assemblage parent" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Sélectionner le composant" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Sélectionner la pièce à partir de laquelle copier la nomenclature" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Supprimer les données existantes" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Supprimer les postes de nomenclature existants avant de les copier" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Inclure l'héritage" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclure les éléments de nomenclature hérités des pièces modélisées" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Sauter les lignes non valides" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Activez cette option pour ignorer les lignes non valides" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copier les pièces de remplacement" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature" @@ -8288,7 +8292,7 @@ msgstr "Rapport de test des articles en stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Éléments installés" @@ -8361,7 +8365,7 @@ msgstr "Filtrer par lieux de premier niveau" msgid "Include sub-locations in filtered results" msgstr "Inclure les sous-emplacements dans les résultats filtrés" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Emplacement parent" @@ -8445,7 +8449,7 @@ msgstr "Date d'expiration avant" msgid "Expiry date after" msgstr "Date d’expiration après" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Périmé" @@ -8579,7 +8583,7 @@ msgstr "La pièce doit être spécifiée" msgid "Stock items cannot be located into structural stock locations!" msgstr "Les articles en stock ne peuvent pas être localisés dans des emplacements de stock structurel !" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Il n'est pas possible de créer un article de stock pour les pièces virtuelles" @@ -8624,7 +8628,7 @@ msgstr "Sélectionnez une pièce fournisseur correspondante pour cet article en msgid "Where is this stock item located?" msgstr "Où se trouve cet article en stock ?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "L'emballage de cet article en stock est stocké dans" @@ -8640,7 +8644,7 @@ msgstr "L'article a été installé dans un autre article ?" msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Code de lot pour cet article de stock" @@ -8753,7 +8757,7 @@ msgstr "L'article de stock est actuellement en production" msgid "Serialized stock cannot be merged" msgstr "Le stock sérialisé ne peut pas être fusionné" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Articles de stock en double" @@ -8877,7 +8881,7 @@ msgstr "Sélectionner la pièce pour laquelle un numéro de série doit être g msgid "Quantity of serial numbers to generate" msgstr "Nombre de numéros de série à générer" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Modèle de test pour ce résultat" @@ -8901,222 +8905,222 @@ msgstr "Article Parent" msgid "Parent stock item" msgstr "Article de stock parent" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Utiliser la taille de l'emballage lors de l'ajout : la quantité définie est le nombre d'emballages" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Référence du fournisseur" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expiré" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Éléments enfants" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Suivi des éléments" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Prix d'achat de cet article en stock, par unité ou par paquet" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Emplacement du stock de destination" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Les numéros de série ne peuvent pas être assignés à cette pièce" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Sélectionner l'article de stock à installer" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Quantité à installer" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Saisir la quantité d'articles à installer" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Ajouter une note de transaction (facultatif)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "La quantité à installer doit être d'au moins 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "L'article en stock n'est pas disponible" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "La pièce sélectionnée ne figure pas dans la nomenclature" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "La quantité à installer ne doit pas dépasser la quantité disponible" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Emplacement de destination de l'élément désinstallé" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Sélectionner la pièce à convertir en article de stock" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "La partie sélectionnée n'est pas une option valide pour la conversion" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Impossible de convertir un article de stock auquel un SupplierPart a été attribué" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Code d'état de l'article en stock" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Sélectionner les articles en stock pour modifier leur statut" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Aucun article en stock n'a été sélectionné" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sous-localisations" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Emplacement du stock mère" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "La pièce doit être vendable" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "L'article est affecté à une commande client" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "L'article est attribué à un ordre de fabrication" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Affectation d'articles en stock par le client" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "L'entreprise sélectionnée n'est pas un client" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notes d'affectation des stocks" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Une liste des articles en stock doit être fournie" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notes sur les fusions d'actions" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Autoriser les fournisseurs non concordants" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permettre la fusion d'articles en stock avec des pièces de fournisseurs différents" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Autoriser la non-concordance des statuts" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Permettre la fusion d'articles en stock ayant des codes de statut différents" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Au moins deux articles en stock doivent être fournis" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Pas de changement" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valeur de la clé primaire StockItem" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "L'article n'est plus en stock" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notes sur les transactions boursières" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Numéro de série suivant" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Numéro de série précédent" @@ -9598,99 +9602,99 @@ msgstr "Ventes" msgid "Return Orders" msgstr "Commandes de retour" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nom d'utilisateur" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Prénom" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Prénom de l'utilisateur" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Nom" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Nom de famille de l'utilisateur" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Adresse e-mail de l'utilisateur" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super-utilisateur" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Cet utilisateur est-il un super-utilisateur" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ce compte d'utilisateur est-il actif" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Seul un superutilisateur peut modifier ce champ" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Mot de passe" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Mot de passe pour l'utilisateur" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Écraser l'alerte sur les règles de mot de passe" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Vous n'avez pas le droit de créer des utilisateurs" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Votre compte a été créé." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Veuillez utiliser la fonction de réinitialisation du mot de passe pour vous connecter" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bienvenue dans InvenTree" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index 71eaa7ef26..cea6193d22 100644 --- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -104,13 +104,13 @@ msgstr "הזן תאריך סיום" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "אימייל" @@ -336,51 +336,51 @@ msgstr "נרשמה שגיאה על ידי השרת." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "מטבע" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "בחר מטבע מהאפשרויות הזמינות" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "מבוטל" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "משתמש" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "שם קובץ" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "שם משתמש" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "שם פרטי" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 7ff7a8925b..1fa7a1b5a4 100644 --- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -104,13 +104,13 @@ msgstr "तारीख दर्ज करें" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "ई-मेल" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index 07e816734e..ea1f5d9cd2 100644 --- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -104,13 +104,13 @@ msgstr "Dátum megadása" msgid "Invalid decimal value" msgstr "Érvénytelen decimális érték" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Megjegyzések" @@ -215,7 +215,7 @@ msgstr "A megadott URL nem egy érvényes kép fájl" msgid "Log in to the app" msgstr "Bejelentkezés az appba" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -336,51 +336,51 @@ msgstr "A kiszolgáló egy hibaüzenetet rögzített." msgid "Image" msgstr "Kép" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Ez a mező nem lehet null." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Távoli kép" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "A távoli kép URL-je" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 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:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nem sikerült letölteni a képet a távoli URL-ről" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Érvénytelen tartalomtípus-formátum" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tartalomtípus nem található" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "A tartalomtípus nem egyezik a szükséges mixin osztállyal" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Változatokkal együtt" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Változatokkal együtt" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Változatokkal együtt" msgid "Part" msgstr "Alkatrész" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategória" @@ -669,16 +669,16 @@ msgstr "Fa kihagyása" msgid "Build must be cancelled before it can be deleted" msgstr "A gyártást be kell fejezni a törlés előtt" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcionális" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Gyártmány" @@ -687,7 +687,7 @@ msgstr "Gyártmány" msgid "Tracked" msgstr "Követett" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Ellenőrizhető" @@ -695,24 +695,24 @@ msgstr "Ellenőrizhető" msgid "Order Outstanding" msgstr "Befejezetlen rendelés" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Felhasználva" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Elérhető" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Rendelve" @@ -727,19 +727,19 @@ msgstr "Gyártás nem található" msgid "Build Order" msgstr "Gyártási utasítás" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Hely" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Kimenet" @@ -783,7 +783,7 @@ msgstr "Céldátumnak a kezdeti dátum után kell lennie" msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Vevői rendelés azonosító" msgid "Sales Order to which this build is allocated" msgstr "Vevői rendelés, amelyhez ez a gyártás tartozik" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Forrás hely" @@ -861,16 +861,16 @@ msgstr "Gyártási állapot" msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Létrehozás dátuma" @@ -964,7 +964,7 @@ msgstr "A {build} gyártási utasítás elkészült" msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Egyedi követésre jelölt alkatrészeknél kötelező sorozatszámot megadni" @@ -980,23 +980,23 @@ msgstr "Gyártási kimenet már kész" msgid "Build output does not match Build Order" msgstr "Gyártási kimenet nem egyezik a gyártási utasítással" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "A mennyiség nem lehet több mint a gyártási mennyiség" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "A gyártási kimenet nem felelt meg az összes kötelező teszten" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A {serial} gyártási kimenet nem felelt meg az összes kötelező teszten" @@ -1017,10 +1017,10 @@ msgstr "Gyártási Rendelés Sor Tétel" msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Gyártás objektum" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a}) msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Készlet tétel" @@ -1099,379 +1099,379 @@ msgstr "Cél készlet tétel" msgid "Build Level" msgstr "Gyártási Szint" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Alkatrész neve" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Gyártási kimenet nem egyezik a szülő gyártással" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Kimeneti alkatrész nem egyezik a gyártási utasításban lévő alkatrésszel" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Egész számú mennyiség szükséges, mivel az alkatrészjegyzék egyedi követésre kötelezett alkatrészeket tartalmaz" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Legyártott készlet helye" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Szükséges tételek automatikus hozzárendelése a megfelelő sorozatszámokkal" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Kimenetek befejezése akkor is ha a készlet nem\n" "lett teljesen lefoglalva" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Az összes ehhez a gyártáshoz lefoglalt készlet felhasználása" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hogyan kezeljük az gyártáshoz rendelt egyéb készletet" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Fogadd el hogy a készlet tételek nincsenek teljesen lefoglalva ehhez a gyártási utastáshoz" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Fogadd el hogy a szükséges számú gyártási kimenet nem lett elérve" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "A Gyártásnak nyitott leszármazott Gyártása van" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "A Gyártásnak folyamatban kell lennie" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "A gyártási kimenetnek ugyanarra a gyártásra kell mutatnia" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part ugyanarra az alkatrészre kell mutasson mint a gyártási utasítás" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Gyártási kimenetet meg kell adni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Gyártási kimenetet nem lehet megadni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Készlet hely ahonnan az alkatrészek származnak (hagyd üresen ha bárhonnan)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Készlet tételek kizárása erről a kiválasztott helyről" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "A különböző helyeken lévő készlet egyenrangúan felhasználható" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Összes elem" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Nem követett tételek" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Követett tételek" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Tétel típusa" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Válasszon tétel típust az automatikus foglaláshoz" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Alkatrészjegyzék Hivatkozás" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Alkatrészjegyzék Cikk Azonosító" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Alkatrészjegyzék Alkatrész Név" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Beépítés helye" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Gyártás" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Beszállítói alkatrész" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Lefoglalt mennyiség" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Gyártási Hivatkozás" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Alkatrész kategória Neve" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Követésre kötelezett" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Gyártás Ütemezve" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Külső raktárkészlet" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Elérhető Helyettesítő Készlet" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Elérhető Készlet Változatokból" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Felhasznált mennyiség meghaladja a lefoglalt mennyiséget" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Megjegyzés a készletfelhasználáshoz" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Gyártási tételnek a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupla gyártási tétel lefoglalás" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Gyártási sornak a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Duplikált gyártási sor foglalás" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Legalább egy tétel vagy sor megadása kötelező" @@ -1495,7 +1495,7 @@ msgstr "Felfüggesztve" msgid "Cancelled" msgstr "Törölve" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1519,19 +1519,19 @@ msgstr "Késésben lévő gyártás" msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Ez egy hivatkozás" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Ez egy állomány" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "A felhasználó nem jogosult ezen mellékletek törlésére" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "A felhasználó nem jogosult ezen melléklet törlésére" @@ -1551,7 +1551,7 @@ msgstr "Hiányzó érvényes valuta kód" msgid "No plugin" msgstr "Nincsen plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projekt kód címke" @@ -1629,7 +1629,7 @@ msgstr "Felhasználó" msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Ár" @@ -1653,7 +1653,7 @@ msgstr "Webhook neve" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktív" @@ -2127,7 +2127,7 @@ msgstr "Paraméterek" msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "Érvénytelen modelltípus megadva a paraméterhez" @@ -2141,7 +2141,7 @@ msgstr "A célmodell azonosítója ehhez a paraméterhez" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Sablon" @@ -2149,7 +2149,7 @@ msgstr "Sablon" msgid "Parameter template" msgstr "Paraméter sablon" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Adat" @@ -2157,18 +2157,18 @@ msgstr "Adat" msgid "Parameter Value" msgstr "Paraméter értéke" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Megjegyzés" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" @@ -2457,7 +2457,7 @@ msgid "Filename" msgstr "Fájlnév" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modell típusa" @@ -2466,11 +2466,11 @@ msgstr "Modell típusa" 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" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "A felhasználónak nincs jogosultsága paraméterek létrehozására vagy szerkesztésére ehhez a modellhez" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Választéklista lezárva" @@ -2860,8 +2860,8 @@ msgstr "Alkatrészek alapból sablon alkatrészek legyenek" msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Összetevő" @@ -3989,33 +3989,33 @@ msgstr "Az alkatrész aktív" msgid "Manufacturer is Active" msgstr "A Gyártó Aktív" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "A Szállítói Alkatrész Aktív" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "A saját alkatrész Aktív" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Gyártó" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Cég" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Van készleten" @@ -4196,7 +4196,7 @@ msgstr "Szállítási megjegyzések belső használatra" msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" @@ -4214,12 +4214,12 @@ msgstr "Válassz alkatrészt" msgid "Select manufacturer" msgstr "Gyártó kiválasztása" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN (Gyártói cikkszám)" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Gyártói cikkszám" @@ -4243,8 +4243,8 @@ msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" msgid "Linked manufacturer part must reference the same base part" msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészre kell hivatkoznia" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4255,7 +4255,7 @@ msgstr "Beszállító" msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" @@ -4291,8 +4291,8 @@ msgstr "alap költség" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Csomagolás" @@ -4340,14 +4340,18 @@ msgstr "Beszállító által használt alapértelmezett pénznem" msgid "Company Name" msgstr "Cégnév" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Készleten" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Árkategóriák" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Hiba történt adatexportálás közben" @@ -4452,67 +4456,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Létező adatbázis azonosító a rekordhoz" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Oszlop már adatbázis mezőhöz lett rendelve" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Adatbázis mező már adatfájl oszlophoz lett rendelve" -#: importer/models.py:466 +#: importer/models.py:473 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:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Az Oszlop nem létezik ebben a fájlban" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "A mező nem létezik a cél adatszerkezetben" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Kijelölt mező csak olvasható" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importálási művelet" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Mező" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Oszlop" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Sor száma" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Eredeti sor adat" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Hibák" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Érvényes" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "ID-ra van szükség meglévő rekord frissítéshez." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Nem található rekord a megadott ID-vel" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Érvénytelen az ID formátuma" @@ -4822,7 +4826,7 @@ msgstr "Rendelés" msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Belső alkatrész" @@ -4919,7 +4923,7 @@ msgstr "Kezdés dátuma" msgid "Scheduled start date for this order" msgstr "A tervezett kezdeti dátum ehhez a gyártáshoz" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cél dátum" @@ -4957,7 +4961,7 @@ msgid "Order reference" msgstr "Rendelés azonosító" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Állapot" @@ -5014,7 +5018,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5140,7 +5144,7 @@ msgstr "Beérkezett" msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Beszerzési ár" @@ -5212,8 +5216,8 @@ msgstr "Ellenőrizte" msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Szállítmány" @@ -5278,7 +5282,7 @@ msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" @@ -5394,7 +5398,7 @@ msgstr "Extra sorok másolása" msgid "Copy extra line items from the original order" msgstr "Az eredeti rendelés extra tételeinek másolása" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Paraméterek másolása" @@ -5413,216 +5417,216 @@ msgstr "Sortételek" msgid "Completed Lines" msgstr "Kész sorok" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Rendelés duplikálása" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Rendelés másolás beállításai" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Érvénytelen rendelés ID" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Beszállító neve" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Rendelés lezárása teljesítetlen sortételek esetén is" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Beszerzési ár automatikus számítása a beszállítói alkatrész adatai alapján" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Azonos forrás és cél dátumú Alkatrész tételeinek összevonása egy tételre" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Belső cikkszám" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "A beszállítónak egyeznie kell a beszerzési rendelésben lévővel" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Lejárati dátum" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Írd be a beérkező készlet tételek lejárati dátumát" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Bejövő készlettételek csomagolási információjának felülbírálata" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Kiegészítő megjegyzés beérkező készlettételekhez" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Szállítások" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Foglalt tételek" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Az alábbi sorozatszámok nem elérhetők" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Csak folyamatban lévő megrendelés tételeit lehet bevételezni" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Visszaküldési mennyiség" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Sortétel pénzneme" @@ -5838,7 +5842,7 @@ msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (opcionális)" @@ -5859,7 +5863,7 @@ msgstr "Alapértelmezett érték" msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Alkatrészek" @@ -5974,7 +5978,7 @@ msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredmén msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Belső Cikkszám)" @@ -6007,7 +6011,7 @@ msgstr "Alapértelmezett lejárat" msgid "Expiry time (in days) for stock items of this part" msgstr "Lejárati idő (napban) ennek az alkatrésznek a készleteire" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimális készlet" @@ -6488,355 +6492,355 @@ msgstr "Alkatrész kapcsolat nem hozható létre önmagával" msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Szülő Kategória" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Felsőbb szintű alkatrész kategória" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Eredmények" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Eszerint a sablon szerint rögzített eredmények száma" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "A fájl nem kép" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Teszt másolása" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Teszt sablonok másolása az eredeti alkatrészről" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Add meg a kezdeti készlet mennyiséget. Ha nulla akkor nem lesz készlet létrehozva." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Válassz beszállítót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategória neve" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Gyártásban" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Az alkatrészből jelenleg ennyi van gyártás alatt" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Már beütemezett de még nem kész gyártási mennyiség" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Készlet tételek" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Verziók" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Teljes készlet" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Paraméter sablonok másolása a kiválasztott alkatrész kategóriából" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Gyártható" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Gyártásokhoz szükséges" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Gyártási rendelésekhez foglalva" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Értékesítési rendeléshez szükséges" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Értékesítési rendeléshez lefoglalva" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimum ár" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maximum ár" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Megadott pénznem átváltása {default_currency}-re sikertelen" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Szülő összeállítás kiválasztása" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Összetevő alkatrész kijelölése" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Meglévő alkatrészjegyzék tételek törlése a másolás előtt" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Sablon alkatrészektől örökölt alkatrészjegyzék tételek használata" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor" @@ -8289,7 +8293,7 @@ msgstr "Készlet tétel teszt riport" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Beépített tételek" @@ -8362,7 +8366,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:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Szülő hely" @@ -8446,7 +8450,7 @@ msgstr "Lejárat előtt" msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Állott" @@ -8580,7 +8584,7 @@ msgstr "Alkatrész kiválasztása kötelező" msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" @@ -8625,7 +8629,7 @@ msgstr "Válassz egy egyező beszállítói alkatrészt ehhez a készlet tételh msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "A csomagolása ennek a készlet tételnek itt van tárolva" @@ -8641,7 +8645,7 @@ msgstr "Ez a tétel be van építve egy másik tételbe?" msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" @@ -8754,7 +8758,7 @@ msgstr "Készlet tétel gyártás alatt" msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" @@ -8878,7 +8882,7 @@ msgstr "Válassza ki az alkatrészt amihez sorozatszámot akar generálni" msgid "Quantity of serial numbers to generate" msgstr "Hány sorozatszámot generáljunk" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Az eredmény Teszt sablonja" @@ -8902,222 +8906,222 @@ msgstr "Szülő tétel" msgid "Parent stock item" msgstr "Szülő készlet tétel" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Csomagméret használata" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Beszállítói Cikkszám" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Lejárt" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Gyermek tételek" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Nyilvántartott tételek" -#: stock/serializers.py:654 +#: stock/serializers.py:668 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:692 +#: stock/serializers.py:706 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:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Nincsen készlettétel megadva" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Beépítendő mennyiség" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Adja meg a beépítendő mennyiséget" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "A beépítendő mennyiség legalább 1 legyen" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:869 +#: stock/serializers.py:883 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:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:972 +#: stock/serializers.py:986 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:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Készlet tétel státusz kódja" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 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:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Felsőbb szintű készlet hely" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Nincs változás" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Készlettétel nincs készleten" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Készlettétel már készleten van" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Mennyiség nem lehet negatív" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Meglévő készletbe olvasztás" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Visszaérkezett tételek beolvasztása a készlettételekbe ha lehetséges" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Következő sorozatszám" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Előző Sorozatszám" @@ -9599,99 +9603,99 @@ msgstr "Vevői rendelések" msgid "Return Orders" msgstr "Visszavételek" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Felhasználónév" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Keresztnév" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "A felhasználó keresztneve" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Vezetéknév" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "A felhasználó vezetékneve" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "A felhasználó e-mail címe" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Rendszergazda" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "A felhasználó rendszergazda-e" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Aktív a felhasználói fiók" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Csak rendszergazda szerkesztheti ezt a mezőt" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Jelszó" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Felhasználó jelszava" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Figyelmezetés felülbírálása" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "A jelszó szabályok figyelmeztetésének felülbírálata" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Nincs jogosultsága felhasználót létrehozni" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "A fiókod sikeresen létrejött." -#: users/serializers.py:484 +#: users/serializers.py:491 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" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Üdvözlet az InvenTree-ben" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index aaf7973fd5..15de8913de 100644 --- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -104,13 +104,13 @@ msgstr "Masukkan tanggal" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Catatan" @@ -215,7 +215,7 @@ msgstr "URL yang diberikan bukan file gambar yang valid" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Surel" @@ -336,51 +336,51 @@ msgstr "Sebuah kesalahan telah dicatat oleh server." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL file gambar external" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tersedia" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Order Produksi" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokasi" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referensi Order Penjualan" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokasi Sumber" @@ -861,16 +861,16 @@ msgstr "Status pembuatan" msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Tanggal Pembuatan" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "Hasil produksi sudah selesai" msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stok Item" @@ -1099,378 +1099,378 @@ msgstr "Tujuan stok item" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Jumlah harus angka bulat karena terdapat bagian yang dapat dilacak dalam daftar barang" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Tidak diizinkan" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Terima bahwa stok item tidak teralokasikan sepenuhnya ke pesanan ini" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Terima bahwa jumlah hasil produksi yang diperlukan belum selesai" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Hasil produksi tidak dapat ditentukan untuk alokasi barang yang tidak terlacak" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokasi stok, dari mana bahan/bagian akan diambilkan (kosongkan untuk mengambil dari lokasi mana pun)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Dibatalkan" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Pengguna" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Harga" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nama File" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponen" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Perusahaan" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Harga Minimal" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Harga Maksimal" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Perbarui" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nama Pengguna" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nama Depan" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nama depan dari pengguna" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Nama Belakang" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Nama belakang dari pengguna" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Alamat surel dari pengguna" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Selamat Datang di InvenTree" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 2b7b66284a..77304596b0 100644 --- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -104,13 +104,13 @@ msgstr "Inserisci la data" msgid "Invalid decimal value" msgstr "Valore decimale non valido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Note" @@ -215,7 +215,7 @@ msgstr "L'URL fornito non è un file immagine valido" msgid "Log in to the app" msgstr "Accedi all'app" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -336,51 +336,51 @@ msgstr "Un errore è stato loggato dal server." msgid "Image" msgstr "Immagine" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Questo campo non può essere nullo." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Immagine Remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL del file immagine remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Impossibile scaricare l'immagine dall'URL remoto" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Formato tipo di contenuto non valido" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tipo di Contenuto non trovato" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Il tipo di contenuto non corrisponde alla classe mixin richiesta" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Includi Varianti" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Includi Varianti" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Includi Varianti" msgid "Part" msgstr "Articolo" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -669,16 +669,16 @@ msgstr "Escludi Albero" msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opzionale" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Assemblaggio" @@ -687,7 +687,7 @@ msgstr "Assemblaggio" msgid "Tracked" msgstr "Monitorato" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testabile" @@ -695,24 +695,24 @@ msgstr "Testabile" msgid "Order Outstanding" msgstr "Ordine In Corso" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allocato" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Utilizzato" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponibile" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Ordinato" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Ordine di Produzione" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Posizione" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Output" @@ -783,7 +783,7 @@ msgstr "La data di scadenza deve essere successiva alla data d'inizio" msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Numero di riferimento ordine di vendita" msgid "Sales Order to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Posizione Di Origine" @@ -861,16 +861,16 @@ msgstr "Stato Produzione" msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Data di creazione" @@ -964,7 +964,7 @@ msgstr "L'ordine di produzione {build} è stato completato" msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili" @@ -980,23 +980,23 @@ msgstr "La produzione è stata completata" msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "La produzione non ha superati tutti i test richiesti" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "L'output della build {serial} non ha superato tutti i test richiesti" @@ -1017,10 +1017,10 @@ msgstr "Elemento di Riga Ordine di Produzione" msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Crea oggetto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità di msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Articoli in magazzino" @@ -1099,378 +1099,378 @@ msgstr "Destinazione articolo in giacenza" msgid "Build Level" msgstr "Livello Produzione" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nome Articolo" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantità totale richiesta, poiché la fattura dei materiali contiene articoli rintracciabili" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Posizione dello stock per l'output della produzione" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Posizione dello stock per l'output di produzione rimosso" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Scarta Assegnazioni" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Scartare tutte le assegnazioni di magazzino per gli output rimossi" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motivo dell'eliminazione degli output di compilazione" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completa l'output se le scorte non sono state interamente assegnate" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consuma Giacenze Allocate" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consuma tutte le scorte che sono già state assegnate a questa produzione" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Come si desidera gestire gli elementi extra giacenza assegnati all'ordine di produzione" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accetta che gli elementi in giacenza non sono stati completamente assegnati a questo ordine di produzione" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accetta che il numero richiesto di output di produzione non sia stato completato" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "L'ordine di costruzione ha ancora degli ordini di costruzione figli" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "L'ordine di costruzione deve essere in stato di produzione" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "gli elementi degli articoli della distinta base devono puntare alla stessa parte dell'ordine di produzione" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "L'output di produzione deve essere specificato per l'ubicazione delle parti tracciate" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "L'output di produzione non deve essere specificato per l'ubicazione delle parti non tracciate" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Posizione dello stock in cui le parti devono prelevate (lasciare vuoto per prelevare da qualsiasi luogo)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Gli elementi in magazzino in più sedi possono essere utilizzati in modo intercambiabile" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Riferimento BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Identificativo dell'Articolo BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nome Articolo BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Costruzione" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Articolo Fornitore" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantità assegnata" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Riferimento Ordine Di Costruzione" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nome Categoria Articolo" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Tracciabile" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "In Produzione" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Pianificato per la produzione" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Scorte esterne" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Disponibili scorte alternative" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Disponibili varianti delle scorte" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantità consumata supera la quantità assegnata" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Note facoltative per il consumo di magazzino" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "L'articolo prodotto deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Duplica l'allocazione degli articoli da produrre" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "La riga di produzione deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Duplica l'allocazione della riga di produzione" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Deve essere fornita almeno un articolo o riga" @@ -1494,7 +1494,7 @@ msgstr "In Attesa" msgid "Cancelled" msgstr "Annullato" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Ordine di produzione in ritardo" msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "È Un Connegamento" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "E' un file" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "L'utente non ha il permesso di eliminare questi allegati" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "L'utente non ha il permesso di eliminare questo allegato" @@ -1550,7 +1550,7 @@ msgstr "Nessun codice valuta valido fornito" msgid "No plugin" msgstr "Nessun plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etichetta Codice Progetto" @@ -1628,7 +1628,7 @@ msgstr "Utente" msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Prezzo" @@ -1652,7 +1652,7 @@ msgstr "Nome per questa notifica" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Attivo" @@ -2126,7 +2126,7 @@ msgstr "Parametri" msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "Tipo di modello specificato per parametro non valido" @@ -2140,7 +2140,7 @@ msgstr "ID del modello di destinazione per questo parametro" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modello" @@ -2148,7 +2148,7 @@ msgstr "Modello" msgid "Parameter template" msgstr "Modello Parametro" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dati" @@ -2156,18 +2156,18 @@ msgstr "Dati" msgid "Parameter Value" msgstr "Valore del Parametro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Nota" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Note opzionali elemento" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nome del file" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Tipo di modello" @@ -2465,11 +2465,11 @@ msgstr "Tipo di modello" msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utente non ha il permesso di creare o modificare allegati per questo modello" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utente non ha il permesso di creare o modificare parametri per questo modello" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Lista di selezione bloccata" @@ -2859,8 +2859,8 @@ msgstr "Gli articoli sono modelli per impostazione predefinita" msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" @@ -3988,33 +3988,33 @@ msgstr "L'articolo è attivo" msgid "Manufacturer is Active" msgstr "Il produttore è attivo" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "L'articolo fornitore è attivo" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "L'articolo interno è attivo" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Il fornitore è attivo" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Produttore" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Azienda" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Ha Scorte" @@ -4195,7 +4195,7 @@ msgstr "Note di spedizione per uso interno" msgid "Link to address information (external)" msgstr "Collegamento alle informazioni sull'indirizzo (esterno)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Codice articolo produttore" @@ -4213,12 +4213,12 @@ msgstr "Seleziona articolo" msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Codice articolo produttore (MPN)" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Codice articolo produttore" @@ -4242,8 +4242,8 @@ msgstr "Le unità del pacchetto devono essere maggiori di zero" msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Fornitore" msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" @@ -4290,8 +4290,8 @@ msgstr "costo base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Confezionamento" @@ -4339,14 +4339,18 @@ msgstr "Valuta predefinita utilizzata per questo fornitore" msgid "Company Name" msgstr "Nome Azienda" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "In magazzino" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Sconti a scalare" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Errore durante l'esportazione dei dati" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Identificatore del database esistente per il record" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "La colonna è già mappata a un campo del database" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Il campo è già mappato a una colonna di dati" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "La mappatura delle colonne deve essere collegata a una sessione di importazione valida" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La colonna non esiste nel file dati" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Il campo non esiste nel modello di destinazione" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Il campo selezionato è di sola lettura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Sessione d'importazione" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Colonna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Indice riga" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Dati riga originali" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Errori" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Valido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "L'ID è richiesto per aggiornare i record esistenti." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Nessun record trovato con l'ID fornito" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Formato ID fornito non valido" @@ -4821,7 +4825,7 @@ msgstr "Ordine" msgid "Order Complete" msgstr "Ordine completato" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Articolo interno" @@ -4918,7 +4922,7 @@ msgstr "Data iniziale" msgid "Scheduled start date for this order" msgstr "Data d'inizio programmata per questo ordine" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data scadenza" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Riferimento ordine" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Stato" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Ricevuto" msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Prezzo di Acquisto" @@ -5211,8 +5215,8 @@ msgstr "Verificato Da" msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Spedizione" @@ -5277,7 +5281,7 @@ msgstr "La quantità di ripartizione non puo' superare la disponibilità della g msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" @@ -5393,7 +5397,7 @@ msgstr "Copia Linee Extra" msgid "Copy extra line items from the original order" msgstr "Copia gli elementi di riga extra dall'ordine originale" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copia parametri" @@ -5412,216 +5416,216 @@ msgstr "Elementi Riga" msgid "Completed Lines" msgstr "Righe Completate" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplica Ordine" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Specifica le opzioni per duplicare questo ordine" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID dell'ordine non corretto" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nome Fornitore" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Prezzo Automatico" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcola automaticamente il prezzo di acquisto in base ai dati del fornitore articolo" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Unisci elementi" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Unisce gli elementi con lo stesso articolo, destinazione e data di destinazione in una riga" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Numero Articolo Interno" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data di Scadenza" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Inserisci la data di scadenza per gli articoli in arrivo" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Sovrascrivi le informazioni d'imballaggio per gli articoli in arrivo" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Nota aggiuntiva per gli articoli in arrivo" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Spedizioni" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementi Assegnati" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "I seguenti numeri di serie non sono disponibili" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Articoli Linea Ordine Reso" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "L'elemento di riga non corrisponde all'ordine di reso" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "L'elemento di riga è già stato ricevuto" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Gli elementi possono essere ricevuti solo con ordini in corso" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Quantità da restituire" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta del prezzo" @@ -5837,7 +5841,7 @@ msgstr "Parole chiave predefinite per gli articoli in questa categoria" msgid "Icon" msgstr "Icona" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icona (facoltativa)" @@ -5858,7 +5862,7 @@ msgstr "Valore Predefinito" msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Articoli" @@ -5973,7 +5977,7 @@ msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN - Numero di riferimento interno" @@ -6006,7 +6010,7 @@ msgstr "Scadenza Predefinita" msgid "Expiry time (in days) for stock items of this part" msgstr "Scadenza (in giorni) per gli articoli in giacenza di questo pezzo" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Scorta Minima" @@ -6487,355 +6491,355 @@ msgstr "Non si può creare una relazione tra l'articolo e sé stesso" msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Categoria Superiore" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoria articolo principale" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Risultati" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Numero di risultati registrati rispetto a questo modello" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Il file non è un immagine" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copia note" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Copia note dall'articolo originale" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Copia Test" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Copia modelli di test dall'articolo originale" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nome Categoria" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "In Costruzione" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Quantità di questo articolo attualmente in produzione" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Eccezionale quantità di questa parte prevista da costruire" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Articoli in magazzino" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revisioni" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Giacenze Totali" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Scorte Non Assegnate" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Scorta Variante" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Immagine esistente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Nome del file di un'immagine articolo esistente" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Il file immagine non esiste" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Puoi produrre" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Richiesto per gli Ordini di Produzione" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Assegnato agli Ordini di Produzione" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Richiesto per gli Ordini di Vendita" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Sovrascrivi valore calcolato per il prezzo minimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Valuta del prezzo minimo" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Sovrascrivi valore calcolato per il prezzo massimo" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Valuta del prezzo massimo" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossibile convertire dalle valute fornite in {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Il prezzo minimo non può essere maggiore del prezzo massimo" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Il prezzo massimo non può essere minore del prezzo minimo" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Seleziona l'assemblaggio padre" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Seleziona la componente" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" @@ -8288,7 +8292,7 @@ msgstr "Test Report Elemento Stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Elementi installati" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Obsoleto" @@ -8579,7 +8583,7 @@ msgstr "L'articolo deve essere specificato" msgid "Stock items cannot be located into structural stock locations!" msgstr "Gli articoli di magazzino non possono essere ubicati in posizioni di magazzino strutturali!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" @@ -8624,7 +8628,7 @@ msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di ma msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" @@ -8640,7 +8644,7 @@ msgstr "Questo elemento è stato installato su un altro elemento?" msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" @@ -8753,7 +8757,7 @@ msgstr "L'elemento di magazzino è attualmente in produzione" msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "Elemento principale" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Scaduto" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementi secondari" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Inserisci il numero di elementi di magazzino da serializzare" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Numeri di serie non possono essere assegnati a questo articolo" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Consenti stato non corrispondente" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Nessun cambiamento" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Note sugli spostamenti di magazzino" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "Ordini di Vendita" msgid "Return Orders" msgstr "Ordini di reso" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nome utente" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nome" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nome dell'utente" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Cognome" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Cognome dell'utente" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Indirizzo email dell'utente" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Questo utente è un superutente" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Questo account utente è attivo" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Il tuo account è stato creato." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Si prega di utilizzare la funzione di reimpostazione password per accedere" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Benvenuto in InvenTree" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index a6668e73e5..16091844df 100644 --- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -104,13 +104,13 @@ msgstr "日付を入力する" msgid "Invalid decimal value" msgstr "無効な10進数値" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "メモ" @@ -215,7 +215,7 @@ msgstr "指定されたURLは有効な画像ファイルではありません" msgid "Log in to the app" msgstr "アプリにログイン" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "メールアドレス" @@ -336,51 +336,51 @@ msgstr "サーバーによってエラーが記録されました。" msgid "Image" msgstr "画像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "通貨" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "この項目は空欄にできません。" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "遠隔画像" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "外部画像ファイルのURL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "リモートURLからの画像ダウンロードに失敗しました" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "無効なコンテンツタイプ形式です" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "コンテンツタイプが見つかりません" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "コンテンツタイプが必須のミックスインクラスと一致しません" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "バリアントを含む" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "バリアントを含む" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "カテゴリ" @@ -669,16 +669,16 @@ msgstr "ツリーを除く" msgid "Build must be cancelled before it can be deleted" msgstr "削除するには、ビルドをキャンセルする必要があります。" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "消耗品" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "オプション" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "アセンブリ" @@ -687,7 +687,7 @@ msgstr "アセンブリ" msgid "Tracked" msgstr "追跡" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "テスト可能" @@ -695,24 +695,24 @@ msgstr "テスト可能" msgid "Order Outstanding" msgstr "受注残高" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "割り当てられた" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "消費されました" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "利用可能" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "注文中" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "組立注文" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "場所" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "出力" @@ -783,7 +783,7 @@ msgstr "目標期日は開始日以降であること" msgid "Build Order Reference" msgstr "ビルド・オーダー・リファレンス" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "セールス・オーダー・リファレンス" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "ソース・ロケーション" @@ -861,16 +861,16 @@ msgstr "組立状況" msgid "Build status code" msgstr "ビルドステータスコード" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "バッチコード" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "このビルド出力のバッチコード" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "作成日時" @@ -964,7 +964,7 @@ msgstr "ビルドオーダー{build}が完了しました" msgid "A build order has been completed" msgstr "建設発注が完了しました" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "追跡可能な部品については、シリアル番号の提示が必要です。" @@ -980,23 +980,23 @@ msgstr "ビルド出力はすでに完了しています" msgid "Build output does not match Build Order" msgstr "ビルド出力がビルド順序と一致しません" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "数量はゼロより大きくなければなりません" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "数量が出力数量を上回ることはできません" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "ビルド出力は、必要なすべてのテストを通過していません" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。" @@ -1017,10 +1017,10 @@ msgstr "ビルドオーダーラインアイテム" msgid "Build object" msgstr "ビルドオブジェクト" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "ビルドオブジェクト" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりませ msgid "Stock item is over-allocated" msgstr "在庫が過剰配分" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "在庫商品" @@ -1099,378 +1099,378 @@ msgstr "仕向け地在庫品" msgid "Build Level" msgstr "ビルドレベル" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "部品名" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "ビルド出力" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "ビルド出力が親ビルドと一致しません" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "出力部分が BuildOrder 部分と一致しません。" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "このビルド出力はすでに完了しています" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "このビルド出力は完全に割り当てられていません" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "ビルド出力の数量を入力" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "追跡可能な部品に必要な整数個数" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "ビルド出力のためのシリアル番号の入力" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "ビルド出力のストック位置" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "シリアル番号の自動割り当て" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下のシリアル番号は既に存在するか、無効です。" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "ビルド出力のリストを提供する必要があります。" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "スクラップされたアウトプットの在庫場所" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "廃棄割り当て" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "廃棄されたアウトプットに割り当てられた在庫の破棄" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "ビルドアウトプットを廃棄する理由" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "完成した建造物のアウトプットの場所" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "不完全割当の受入れ" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "在庫が完全に割り当てられていない場合は、出力を完了します。" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "割当在庫の消費" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "このビルドに割り当て済みのストックを消費します。" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "不完全な出力の削除" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "完了していないビルド出力を削除します。" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "不可" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "このビルド・オーダーで消費されるものとして受け入れます。" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "このビルドオーダーを完了する前に割り当てを解除します。" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "総合在庫" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "製造オーダーに割り当てられた余分な在庫品をどのように処理しますか?" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "一部の在庫品目は全体的に配分されています。" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "未割り当ての受け入れ" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当てられていないことを受け入れます。" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "必要在庫の配分が完了していません" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "インコンプリートの受け入れ" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "必要な数のビルドアウトプットが完了していないことを受け入れます。" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "必要な構築数量が完了していません" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "ビルド・オーダーには未完成の子ビルド・オーダーがあります。" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "受注生産状態であること" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "ビルド・オーダーの出力が不完全" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "ビルド出力" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "ビルド出力は同じビルド" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "ビルドラインアイテム" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.partは、ビルドオーダーと同じパーツを指す必要があります。" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "在庫があること" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "使用可能数量({q})を超過" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "追跡部品の割り当てには、ビルド出力を指定する必要があります。" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "割り当て項目の提供" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部品を調達する在庫場所(任意の場所から調達する場合は空白にしてください。)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "場所を除く" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "この選択された場所から在庫商品を除外" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "交換可能ストック" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "複数の拠点にある在庫品を交換可能" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "代替ストック" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "代替部品の割り当て" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "オプション" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "オプションのBOMアイテムをビルドオーダーに割り当てます。" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOMリファレンス" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOMパーツID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "部品表 部品名" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "ビルド" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "サプライヤー" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "割当数量" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "ビルドリファレンス" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "部品分類名" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "追跡可能" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "継承" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOMアイテム" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "生産中" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "ビルド予定" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "在庫状況" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "利用可能な代替ストック" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "在庫状況" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "消費量が割り当て量を超過しています" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "在庫消費に関する任意の注記" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "ビルド項目は正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "重複したビルド項目の割り当て" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "ビルドラインは正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "重複したビルドラインの割り当て" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "少なくとも1つの項目または行を指示する必要があります" @@ -1494,7 +1494,7 @@ msgstr "保留中" msgid "Cancelled" msgstr "キャンセル済" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "期限切れ注文" msgid "Build order {bo} is now overdue" msgstr "ビルドオーダー{bo}は現在期限切れです" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "リンク" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "ファイル" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "ユーザーにはこの添付ファイルを削除する権限がありません" @@ -1550,7 +1550,7 @@ msgstr "有効な通貨コードはありません" msgid "No plugin" msgstr "プラグインなし" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "プロジェクトコードラベル" @@ -1628,7 +1628,7 @@ msgstr "ユーザー" msgid "Price break quantity" msgstr "価格破壊数量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "価格" @@ -1652,7 +1652,7 @@ msgstr "このウェブフックの名前" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "有効" @@ -2126,7 +2126,7 @@ msgstr "パラメータ" msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "パラメータに対して無効なモデルタイプが指定されています" @@ -2140,7 +2140,7 @@ msgstr "このパラメータの対象となるモデルのID" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "テンプレート" @@ -2148,7 +2148,7 @@ msgstr "テンプレート" msgid "Parameter template" msgstr "パラメータテンプレート" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "データ" @@ -2156,18 +2156,18 @@ msgstr "データ" msgid "Parameter Value" msgstr "パラメータ値" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "備考" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "任意のメモ欄" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "ファイル名" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "モデルタイプ" @@ -2465,11 +2465,11 @@ msgstr "モデルタイプ" msgid "User does not have permission to create or edit attachments for this model" msgstr "このモデルの添付ファイルを作成または編集する権限がありません。" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "ユーザーは、このモデルのパラメータを作成または編集する権限がありません。" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "選択リストがロックされています" @@ -2859,8 +2859,8 @@ msgstr "パーツはデフォルトのテンプレートです" msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "コンポーネント" @@ -3988,33 +3988,33 @@ msgstr "パートはアクティブ" msgid "Manufacturer is Active" msgstr "メーカーはアクティブ" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "サプライヤーが活動中" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "内部はアクティブ" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "サプライヤーの活動" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "製造元" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "会社名" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "在庫あり" @@ -4195,7 +4195,7 @@ msgstr "社内用出荷注意事項" msgid "Link to address information (external)" msgstr "住所情報へのリンク(外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "メーカー・パーツ" @@ -4213,12 +4213,12 @@ msgstr "部品を選択" msgid "Select manufacturer" msgstr "メーカー選択" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "メーカー品番" @@ -4242,8 +4242,8 @@ msgstr "パック単位はゼロより大きくなければなりません。" msgid "Linked manufacturer part must reference the same base part" msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "仕入先" msgid "Select supplier" msgstr "サプライヤーを選択" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "サプライヤー在庫管理ユニット" @@ -4290,8 +4290,8 @@ msgstr "基本料金" msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "パッケージング" @@ -4339,14 +4339,18 @@ msgstr "このサプライヤーで使用されるデフォルト通貨" msgid "Company Name" msgstr "会社名" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "在庫あり" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "価格割り引き" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "データのエクスポート中にエラーが発生しました" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "レコードの既存データベース識別子" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "カラムはすでにデータベースのフィールドにマッピングされています。" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "フィールドはすでにデータ列にマッピングされています。" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "カラムマッピングは有効なインポートセッションにリンクされている必要があります。" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "カラムがデータファイルに存在しません。" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "対象モデルにフィールドが存在しない" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "選択されたフィールドは読み取り専用です。" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "インポートセッション" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "フィールド" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "列" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "行インデックス" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "元の行データ" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "エラー" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "有効" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "既存の記録を更新するにはIDが必要です。" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "指定のIDで該当する記録は見つかりませんでした" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "無効なID形式が指定されました" @@ -4821,7 +4825,7 @@ msgstr "注文" msgid "Order Complete" msgstr "注文完了" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "内部パーツ" @@ -4918,7 +4922,7 @@ msgstr "開始日" msgid "Scheduled start date for this order" msgstr "本注文の開始予定日" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "終了日に達したら" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "注文参照" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "ステータス" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "受信" msgid "Number of items received" msgstr "受領品目数" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "購入金額" @@ -5211,8 +5215,8 @@ msgstr "チェック済み" msgid "User who checked this shipment" msgstr "この貨物をチェックしたユーザー" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "発送" @@ -5277,7 +5281,7 @@ msgstr "割当数量が在庫数量を超えることはできません" msgid "Allocation quantity must be greater than zero" msgstr "割当数量はゼロより大きくなければなりません" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。" @@ -5393,7 +5397,7 @@ msgstr "余分な行をコピー" msgid "Copy extra line items from the original order" msgstr "元の注文から余分な項目をコピー" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "コピーパラメータ" @@ -5412,216 +5416,216 @@ msgstr "ラインアイテム" msgid "Completed Lines" msgstr "完成路線" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "重複した注文" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "この注文を複製するためのオプションを指定します。" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "無効なオーダーID" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "サプライヤー名" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "ご注文のキャンセルはできません。" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "未完了の行項目で注文を閉じることができます。" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "注文に不備がある場合" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "ご注文は受け付けておりません。" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自動車価格" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "サプライヤーの部品データに基づいて購入価格を自動計算" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "購入価格通貨" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "アイテムのマージ" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "内部部品番号" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "内部部品名" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "サプライヤー部品の指定が必要" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "注文書の指定が必要" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "サプライヤーは発注書と一致しなければなりません。" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "発注書はサプライヤーと一致している必要があります。" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "明細" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "受取商品の配送先選択" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "入荷在庫品のバッチコード入力" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有効期限" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "入荷在庫の有効期限の入力" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "入荷した在庫品のシリアル番号の入力" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "入荷在庫品の包装情報の上書き" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "在庫品の入荷に関する注意事項" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "バーコード" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "スキャンされたバーコード" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "バーコードはすでに使用されています" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "項目は必ずご記入ください。" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "デスティネーション・ロケーションを指定する必要があります。" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "バーコードの値は一意でなければなりません。" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "発送" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完了した出荷" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "販売価格通貨" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "割当項目" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "出荷の詳細は記載されていません" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "ラインアイテムは、この注文に関連付けられていません。" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "数量は正数でなければなりません。" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "出荷済み" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "この注文には出荷が関連付けられていません" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "以下のシリアル番号に該当するものは見つかりませんでした。" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下のシリアル番号はご利用いただけません。" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "返品注文項目" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "ラインアイテムが返品オーダーと一致しません" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "ラインアイテムはすでに受領済み" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "返品数量" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "ライン価格通貨" @@ -5837,7 +5841,7 @@ msgstr "このカテゴリの部品のデフォルトキーワード" msgid "Icon" msgstr "アイコン" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "アイコン (オプション)" @@ -5858,7 +5862,7 @@ msgstr "初期値" msgid "Default Parameter Value" msgstr "パラメータのデフォルト値" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "パーツ" @@ -5973,7 +5977,7 @@ msgstr "検索結果での視認性を向上させる部分キーワード" msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "即時支払通知" @@ -6006,7 +6010,7 @@ msgstr "デフォルトの有効期限" msgid "Expiry time (in days) for stock items of this part" msgstr "この部品の在庫品の有効期限(日単位" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "最小在庫" @@ -6487,355 +6491,355 @@ msgstr "部品とそれ自身との間に部品関係を作ることはできま msgid "Duplicate relationship already exists" msgstr "重複する関係が既に存在します。" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "親カテゴリ" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "親部品カテゴリー" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "結果" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "このテンプレートに対して記録された結果の数" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "この在庫商品の購入通貨" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "ファイルが画像ではありません" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "オリジナルパート" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "複製する元の部品を選択" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "コピー画像" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "元の部分から画像をコピー" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "コピーBOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "元の部品から部品表をコピー" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "元の部品からパラメータデータをコピー" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "コピーノート" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "元のパートからメモをコピー" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "コピーテスト" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "元の部品からテスト用テンプレートをコピーしてください" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "初期在庫量" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "初期在庫場所" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "この部品の初期在庫場所を指定してください。" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "サプライヤーを選択してください。" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "メーカーを選択してください。" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "メーカー品番" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "選択された企業は有効なサプライヤーではありません。" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "選択された会社は有効な製造業者ではありません。" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "このMPNに一致するメーカー部品はすでに存在します。" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "このSKUに一致するサプライヤー部品は既に存在します。" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "カテゴリ名" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "建物" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "現在生産中の当該部品の数量" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "この部品の予定生産数量" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "在庫商品" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "リビジョン" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "総在庫" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "未割当株式" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "バリアントストック" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "重複部分" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "別のパートから初期データをコピー" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "初期在庫" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "初期在庫数で部品を作成" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "サプライヤー情報" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "この部品の初期サプライヤー情報を追加します。" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "コピーカテゴリパラメータ" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "既存イメージ" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "既存の部品画像のファイル名" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "画像ファイルが存在しません" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "部品表全体の検証" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "ビルド" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "ビルドオーダーに必要なもの" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "ビルドオーダーに割り当てられました" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "セールスオーダーに必要なもの" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "セールスオーダーに割り当てられました" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "最小価格" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "最低価格の計算値の上書き" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "最低価格通貨" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "最大価格" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "最高価格の計算値を上書き" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "最高価格通貨" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "更新" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "この部品の価格を更新" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "提供された通貨から{default_currency}に変換できませんでした。" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "最低価格は最高価格を超えてはなりません。" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "最高価格は最低価格を下回ってはなりません。" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "親アセンブリを選択" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "構成部品の選択" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "BOMをコピーする部品を選択します。" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "既存データの削除" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "コピー前に既存のBOMアイテムを削除" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "インクルード継承" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "テンプレート化された部品から継承されたBOM項目を含めます。" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "無効な行をスキップ" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "無効な行をスキップするには、このオプションを有効にします。" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "コピー代用部品" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOMアイテムの重複時に代替部品をコピー" @@ -8288,7 +8292,7 @@ msgstr "在庫品テストレポート" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "設置項目" @@ -8361,7 +8365,7 @@ msgstr "トップレベルのロケーションによるフィルタリング" msgid "Include sub-locations in filtered results" msgstr "フィルタリング結果にサブロケーションを含めることができます。" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "親の位置" @@ -8445,7 +8449,7 @@ msgstr "有効期限" msgid "Expiry date after" msgstr "有効期限" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "期限失効" @@ -8579,7 +8583,7 @@ msgstr "部品の指定が必要" msgid "Stock items cannot be located into structural stock locations!" msgstr "在庫品は、構造的な在庫場所に配置することはできません!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "仮想部品にストックアイテムを作成できません" @@ -8624,7 +8628,7 @@ msgstr "この在庫品に一致するサプライヤー部品を選択してく msgid "Where is this stock item located?" msgstr "この在庫品はどこにありますか?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "この在庫品は以下の梱包で保管されています。" @@ -8640,7 +8644,7 @@ msgstr "このアイテムは他のアイテムにインストールされてい msgid "Serial number for this item" msgstr "この商品のシリアル番号" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "このストックアイテムのバッチコード" @@ -8753,7 +8757,7 @@ msgstr "在庫品は現在生産中です。" msgid "Serialized stock cannot be merged" msgstr "連番在庫の統合はできません" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "在庫品の重複" @@ -8877,7 +8881,7 @@ msgstr "シリアル番号を生成する部品を選択します。" msgid "Quantity of serial numbers to generate" msgstr "生成するシリアル番号の数" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "この結果のテストテンプレート" @@ -8901,222 +8905,222 @@ msgstr "親アイテム" msgid "Parent stock item" msgstr "親株式" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "数量はパック数です。" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "パッケージサイズを使用" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "新しい商品のシリアル番号の入力" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "サプライヤー品番" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "期限切れ" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "子供用品" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "追跡項目" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "この在庫品の購入価格、単位またはパックあたり" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "シリアル化するストックアイテムの数を入力" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "在庫品目がしていされていません" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量は在庫数 ({q}) を超えてはなりません。" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "仕向け地" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "この部品にシリアル番号を割り当てることはできません" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "シリアル番号が既に存在します" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "インストールするストックアイテムを選択" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "設置数量" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "インストールするアイテムの数量を入力してください。" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "取引メモの追加(オプション)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "設置数量は1台以上" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "在庫がありません" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "選択した部品が部品表にない" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "設置する数量は、利用可能な数量を超えてはなりません。" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "アンインストール先の場所" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "在庫品を変換する部品を選択" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "選択された部分は、変換のための有効なオプションではありません。" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "SupplierPartが割り当てられている在庫品を変換できません。" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "在庫商品ステータスコード" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "ステータスを変更するストックアイテムを選択" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "ストックアイテムが選択されていません" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "サブロケーション" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "親株式所在地" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "商品が販売オーダーに割り当てられています。" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "アイテムがビルドオーダーに割り当てられています。" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "在庫アイテムを割り当てるお客様" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "選択された企業は顧客ではありません" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "株式譲渡に関する注意事項" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "在庫品のリストが必要です。" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "株式併合に関する注意事項" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "不一致のサプライヤーを許可" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "異なるサプライヤの部品を持つ在庫品目をマージできるようにします。" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "不一致の状態を許可" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "異なるステータスコードを持つストックアイテムをマージすることができます。" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "少なくとも2つのストックアイテムを提供する必要があります。" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "変化なし" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "StockItem 主キー値" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "在庫がありません" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "在庫品目は既に在庫にあります" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "数量は負の数であってはなりません。" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "株式取引に関する注記" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "既存の在庫に統合します" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "可能なら、返品された商品を既存の在庫商品に統合してください" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "次のシリアル番号" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "以前のシリアル番号" @@ -9598,99 +9602,99 @@ msgstr "セールスオーダー" msgid "Return Orders" msgstr "返品注文" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "ユーザー名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "ユーザーの名" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "姓" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "ユーザーの姓" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "ユーザーのメールアドレス" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "スーパーユーザー" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "このユーザーはスーパーユーザーですか?" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "このユーザーアカウントはアクティブですか" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "このフィールドを調整できるのはスーパーユーザーのみです。" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "パスワード" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "ユーザーのパスワード" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "警告を上書きします" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "パスワードルールに関する警告を無効にする" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "ユーザーを作成する権限がありません" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "アカウントが作成されました" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "パスワードリセット機能を使ってログインしてください" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "InvenTreeへようこそ" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index 0e282ae42e..7ce41b0292 100644 --- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -104,13 +104,13 @@ msgstr "날짜 입력" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "메모" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "이메일" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "유효하지 않은 값" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "분류" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "소모품" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "선택사항" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "시리얼 번호 (일련번호)" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index 7bd0e70d68..dad03aa1ed 100644 --- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -104,13 +104,13 @@ msgstr "Įveskite datą" msgid "Invalid decimal value" msgstr "Neteisinga dešimtainė reikšmė" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Pastabos" @@ -215,7 +215,7 @@ msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" msgid "Log in to the app" msgstr "Prisijungti prie programos" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "El. paštas" @@ -336,51 +336,51 @@ msgstr "Serveris užfiksavo klaidą." msgid "Image" msgstr "Paveikslėlis" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Turi būti teisingas skaičius" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valiuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Pasirinkite valiutą iš galimų variantų" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Neteisinga reikšmė" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Nutolęs paveikslėlis" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Nutolusio paveikslėlio failo URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Paveikslėlių atsisiuntimas iš nutolusio URL neįjungtas" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nepavyko atsisiųsti paveikslėlio iš nutolusio URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Įtraukti variantus" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Įtraukti variantus" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Įtraukti variantus" msgid "Part" msgstr "Detalė" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -669,16 +669,16 @@ msgstr "Neįtraukti medžio struktūros" msgid "Build must be cancelled before it can be deleted" msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Pasirinktinai" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Surinkimas" @@ -687,7 +687,7 @@ msgstr "Surinkimas" msgid "Tracked" msgstr "Sekama" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testuojama" @@ -695,24 +695,24 @@ msgstr "Testuojama" msgid "Order Outstanding" msgstr "Liko neįvykdytų užsakymų" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Priskirta" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Prieinama" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Užsakyta" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Gamybos užsakymas" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Vieta" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "Tikslinė data turi būti po pradžios datos" msgid "Build Order Reference" msgstr "Gamybos užsakymo nuoroda" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Pardavimo užsakymo nuoroda" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Šaltinio vieta" @@ -861,16 +861,16 @@ msgstr "Gamybos būsena" msgid "Build status code" msgstr "Gamybos būsenos kodas" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Partijos kodas" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Šios gamybos partijos kodas" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Sukūrimo data" @@ -964,7 +964,7 @@ msgstr "Gamybos užsakymas {build} užbaigtas" msgid "A build order has been completed" msgstr "Gamybos užsakymas užbaigtas" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Sekamoms detalėms būtina nurodyti serijos numerius" @@ -980,23 +980,23 @@ msgstr "Gamybos rezultatas jau užbaigtas" msgid "Build output does not match Build Order" msgstr "Gamybos rezultatas neatitinka gamybos užsakymo" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Kiekis turi būti didesnis nei nulis" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Kiekis negali viršyti rezultato kiekio" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Gamybos rezultatas {serial} nepraėjo visų privalomų testų" @@ -1017,10 +1017,10 @@ msgstr "Gamybos užsakymo eilutės įrašas" msgid "Build object" msgstr "Gamybos objektas" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Gamybos objektas" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Priskirtas kiekis ({q}) negali viršyti galimo atsargų kiekio ({a})" msgid "Stock item is over-allocated" msgstr "Atsargų elementas per daug paskirstytas" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Atsargų elementas" @@ -1099,378 +1099,378 @@ msgstr "Paskirties atsargų elementas" msgid "Build Level" msgstr "Gamybos lygis" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Detalės pavadinimas" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Gamybos rezultatas" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Gamybos rezultatas neatitinka pirminės gamybos" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Rezultato detalė neatitinka gamybos užsakymo detalės" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Šis gamybos rezultatas jau užbaigtas" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Šis gamybos rezultatas nėra visiškai paskirstytas" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Įveskite kiekį gamybos rezultatui" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Sekamoms detalėms reikalingas sveikasis kiekis" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Reikalingas sveikasis kiekis, nes komplektavimo žiniaraštyje yra sekamų detalių" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serijos numeriai" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Įveskite serijos numerius gamybos rezultatams" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Atsargų vieta gamybos rezultatams" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatiškai priskirti serijos numerius" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Turi būti pateiktas gamybos rezultatų sąrašas" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Atsargų vieta brokuotiems rezultatams" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Atmesti priskyrimus" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Atmesti visus atsargų priskyrimus brokuotiems rezultatams" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Priežastis, dėl kurios gamybos rezultatas(-ai) buvo nurašytas(-i)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Vieta, kur laikomi užbaigti gamybos rezultatai" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Priimti nepilną priskyrimą" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Užbaigti rezultatus, net jei atsargos dar nėra pilnai priskirtos" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Sunaudoti priskirtas atsargas" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Sunaudoti bet kokias šiai gamybai jau priskirtas atsargas" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Pašalinti nebaigtus rezultatus" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Ištrinti visus nebaigtus gamybos rezultatus" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Neleidžiama" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Priimti kaip sunaudotą šio gamybos užsakymo metu" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Panaikinkite priskyrimus prieš užbaigiant šį gamybos užsakymą" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Per daug paskirstytos atsargos" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Kaip norite elgtis su papildomai šiam gamybos užsakymui priskirtomis atsargomis" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Kai kurios atsargos paskirstytos per daug" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Priimti nepriskirtą" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Priimti, kad atsargos nebuvo visiškai priskirtos šiam gamybos užsakymui" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Reikalingos atsargos nėra visiškai priskirtos" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Priimti nepilną" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Priimti, kad ne visi reikalingi gamybos rezultatai buvo užbaigti" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Reikalingas gamybos kiekis nebuvo užbaigtas" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Gamybos užsakymas turi nebaigtų antrinių gamybų" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Gamybos užsakymas turi būti gamybos būsenoje" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Gamybos užsakymas turi nebaigtų rezultatų" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Gamybos eilutė" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Gamybos rezultatas" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Gamybos rezultatas turi būti susietas su ta pačia gamyba" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Gamybos eilutės įrašas" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part turi būti ta pati detalė kaip ir gamybos užsakyme" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Prekė turi būti atsargose" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Viršytas prieinamas kiekis ({q})" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Sekamų detalių priskyrymui turi būti nurodytas gamybos rezultatas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Negalima nurodyti gamybos rezultato nesekamoms detalėms" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Turi būti pateikti paskirstymo elementai" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Atsargų vieta, iš kurios bus imamos detalės (palikite tuščią, jei tinka bet kuri vieta)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Neįtraukti vietos" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Neįtraukti atsargų iš šios pasirinktos vietos" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Keičiamos atsargos" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Atsargos iš skirtingų vietų gali būti naudojamos pakaitomis" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Pakaitinės atsargos" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Leisti priskirti pakaitines detales" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Pasirenkami elementai" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Priskirti papildomus BOM elementus gamybos užsakymui" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM nuoroda" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM detalės ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "BOM detalės pavadinimas" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Gamyba" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Tiekėjo detalė" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Priskirtas kiekis" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Gamybos nuoroda" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Detalės kategorijos pavadinimas" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sekama" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM elementas" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Gamyboje" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Išorinės atsargos" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Prieinamos atsargos" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Prieinamos pakaitinės atsargos" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Prieinamos variantų atsargos" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "Sulaikyta" msgid "Cancelled" msgstr "Atšaukta" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Vėluojantis gamybos užsakymas" msgid "Build order {bo} is now overdue" msgstr "Gamybos užsakymas {bo} dabar vėluoja" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Yra nuoroda" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Yra failas" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Vartotojas neturi teisės ištrinti šių priedų" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Vartotojas neturi teisės ištrinti šio priedo" @@ -1550,7 +1550,7 @@ msgstr "Nepateikta jokių galiojančių valiutos kodų" msgid "No plugin" msgstr "Nėra papildinio" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projekto kodo etiketė" @@ -1628,7 +1628,7 @@ msgstr "Vartotojas" msgid "Price break quantity" msgstr "Kiekio ribinis taškas kainai" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Kaina" @@ -1652,7 +1652,7 @@ msgstr "Šio webhook'o pavadinimas" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktyvus" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablonas" @@ -2148,7 +2148,7 @@ msgstr "Šablonas" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" @@ -2156,18 +2156,18 @@ msgstr "Data" msgid "Parameter Value" msgstr "Parametro reikšmė" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Pastaba" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Neprivalomas pastabų laukas" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Failo pavadinimas" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelio tipas" @@ -2465,11 +2465,11 @@ msgstr "Modelio tipas" msgid "User does not have permission to create or edit attachments for this model" msgstr "Vartotojas neturi leidimo kurti ar redaguoti šio modelio priedų" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Pasirinkimų sąrašas yra užrakintas" @@ -2859,8 +2859,8 @@ msgstr "Detalės pagal nutylėjimą yra šablonai" msgid "Parts can be assembled from other components by default" msgstr "Detalės pagal nutylėjimą gali būti surenkamos iš kitų komponentų" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponentas" @@ -3988,33 +3988,33 @@ msgstr "Detalė yra aktyvi" msgid "Manufacturer is Active" msgstr "Gamintojas yra aktyvus" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Tiekėjo detalė yra aktyvi" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Vidinė detalė yra aktyvi" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Gamintojas" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Įmonė" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Turi atsargų" @@ -4195,7 +4195,7 @@ msgstr "Siuntimo pastabos vidiniam naudojimui" msgid "Link to address information (external)" msgstr "Nuoroda į adreso informaciją (išorinė)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gamintojo detalė" @@ -4213,12 +4213,12 @@ msgstr "Pasirinkite detalę" msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Gamintojo detalės numeris (MPN)" @@ -4242,8 +4242,8 @@ msgstr "Pakuotės vienetų kiekis turi būti didesnis už nulį" msgid "Linked manufacturer part must reference the same base part" msgstr "Susieta gamintojo detalė turi nurodyti tą pačią pagrindinę detalę" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Tiekėjas" msgid "Select supplier" msgstr "Pasirinkite tiekėją" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Tiekėjo sandėlio numeris (SKU)" @@ -4290,8 +4290,8 @@ msgstr "bazinė kaina" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Pakuotė" @@ -4339,14 +4339,18 @@ msgstr "Numatytoji valiuta, naudojama šiam tiekėjui" msgid "Company Name" msgstr "Įmonės pavadinimas" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Sandėlyje" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Įvyko klaida eksportuojant duomenis" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Šis stulpelis jau yra susietas su duomenų bazės lauku" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Šis laukas jau yra susietas su duomenų stulpeliu" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Stulpelių susiejimas turi būti susietas su galiojančia importavimo sesija" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Stulpelis neegzistuoja duomenų faile" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Laukas neegzistuoja tiksliniame modelyje" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Pasirinktas laukas yra tik skaitomas" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importavimo sesija" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Laukas" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Stulpelis" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Eilutės indeksas" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Pradiniai eilutės duomenys" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Klaidos" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Galiojantis" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Užsakymas" msgid "Order Complete" msgstr "Užsakymas įvykdytas" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Vidinė detalė" @@ -4918,7 +4922,7 @@ msgstr "Pradžios data" msgid "Scheduled start date for this order" msgstr "Numatyta pradžios data šiam užsakymui" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Tikslinė data" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Užsakymo nuoroda" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Būsena" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Gauta" msgid "Number of items received" msgstr "Gautų prekių kiekis" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Pirkimo kaina" @@ -5211,8 +5215,8 @@ msgstr "Patikrino" msgid "User who checked this shipment" msgstr "Vartotojas, patikrinęs šią siuntą" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Siunta" @@ -5277,7 +5281,7 @@ msgstr "Priskiriamas kiekis negali viršyti atsargų kiekio" msgid "Allocation quantity must be greater than zero" msgstr "Priskirtas kiekis turi būti didesnis nei nulis" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Kiekis turi būti 1, jei prekė turi serijos numerį" @@ -5393,7 +5397,7 @@ msgstr "Kopijuoti papildomas eilutes" msgid "Copy extra line items from the original order" msgstr "Kopijuoti papildomas eilutes iš pradinio užsakymo" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopijuoti parametrus" @@ -5412,216 +5416,216 @@ msgstr "Eilutės įrašai" msgid "Completed Lines" msgstr "Užbaigtos eilutės" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Dubliuoti užsakymą" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Nurodykite užsakymo dubliavimo parinktis" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Neteisingas užsakymo ID" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tiekėjo pavadinimas" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Užsakymo atšaukti negalima" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Leisti užbaigti užsakymą su neužbaigtais eilutės įrašais" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Užsakyme yra neužbaigtų eilutės įrašų" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Užsakymas nėra atidarytas" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatinis kainų nustatymas" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatiškai apskaičiuoti pirkimo kainą pagal tiekėjo detalės duomenis" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Pirkimo kainos valiuta" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Sujungti elementus" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sujungti elementus su ta pačia detale, paskirtimi ir tiksline data į vieną eilutės įrašą" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Vidinis detalės numeris" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Vidinis detalės pavadinimas" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Turi būti nurodyta tiekėjo detalė" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Turi būti nurodytas pirkimo užsakymas" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Tiekėjas turi atitikti pirkimo užsakymą" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Pirkimo užsakymas turi atitikti tiekėją" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Eilutės įrašas" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Pasirinkite paskirties vietą gautiems elementams" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Įveskite partijos kodą gaunamoms atsargoms" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Galiojimo data" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Įveskite galiojimo datą gaunamoms atsargoms" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Įveskite gaunamų atsargų serijos numerius" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Pakeisti gaunamų atsargų pakavimo informaciją" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Papildoma pastaba gaunamoms atsargoms" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Brūkšninis kodas" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Nuskaitytas brūkšninis kodas" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Brūkšninis kodas jau naudojamas" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Turi būti pateikti eilutės įrašai" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Turi būti nurodyta paskirties vieta" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Pateiktos brūkšninių kodų reikšmės turi būti unikalios" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Siuntos" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Užbaigtos siuntos" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Pardavimo kainos valiuta" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Paskirstyti elementai" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nepateikta siuntos informacija" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Eilutės įrašas nėra susijęs su šiuo užsakymu" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Kiekis turi būti teigiamas" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Įveskite priskiriamus serijos numerius" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Siunta jau išsiųsta" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Siunta nėra susieta su šiuo užsakymu" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nerasta atitikmenų šiems serijos numeriams" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Šie serijos numeriai nepasiekiami" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Eilutės įrašas neatitinka grąžinimo užsakymo" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Eilutės įrašas jau gautas" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Elementai gali būti priimami tik pagal vykdomus užsakymus" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Grąžinamas kiekis" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Eilutės kainos valiuta" @@ -5837,7 +5841,7 @@ msgstr "Numatytieji raktažodžiai detalėms šioje kategorijoje" msgid "Icon" msgstr "Piktograma" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Piktograma (neprivaloma)" @@ -5858,7 +5862,7 @@ msgstr "Numatytoji reikšmė" msgid "Default Parameter Value" msgstr "Numatytoji parametro reikšmė" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Detalės" @@ -5973,7 +5977,7 @@ msgstr "Detalės raktažodžiai, skirti pagerinti matomumą paieškos rezultatuo msgid "Part category" msgstr "Detalės kategorija" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -6006,7 +6010,7 @@ msgstr "Numatytasis galiojimo laikas" msgid "Expiry time (in days) for stock items of this part" msgstr "Šios detalės atsargų galiojimo laikas (dienomis)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimalus atsargų kiekis" @@ -6487,355 +6491,355 @@ msgstr "Detalių ryšio negalima sukurti tarp detalės ir jos pačios" msgid "Duplicate relationship already exists" msgstr "Toks ryšys jau egzistuoja" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Pagrindinė kategorija" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Pagrindinė detalių kategorija" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subkategorijos" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Rezultatai" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Rezultatų skaičius, susietas su šiuo šablonu" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Šio atsargų elemento pirkimo valiuta" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Failas nėra paveikslėlis" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Pradinė detalė" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Pasirinkite pradinę detalę kopijavimui" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopijuoti paveikslėlį" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopijuoti paveikslėlį iš pradinės detalės" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopijuoti BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopijuoti parametrų duomenis iš pradinės detalės" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopijuoti pastabas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopijuoti pastabas iš pradinės detalės" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Pradinis atsargų kiekis" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Nurodykite pradinį atsargų kiekį šiai detalei. Jei kiekis nulis - atsargos nebus pridėtos." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Pradinė atsargų vieta" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Nurodykite pradinę atsargų vietą šiai detalei" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Pasirinkite tiekėją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Pasirinkite gamintoją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Gamintojo detalės numeris" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Pasirinkta įmonė nėra galiojantis gamintojas" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategorijos pavadinimas" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Surinkimas" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Atsargos" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Versijos" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Bendros atsargos" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nepriskirtos atsargos" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variantų atsargos" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Kopijuoti detalę" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopijuoti pradinius duomenis iš kitos detalės" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Pradinės atsargos" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Sukurti detalę su pradiniu atsargų kiekiu" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Tiekėjo informacija" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopijuoti kategorijos parametrus" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Esamas paveikslėlis" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Esamos detalės paveikslėlio failo pavadinimas" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Paveikslėlio failas neegzistuoja" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Patvirtinti visą komplektavimo žiniaraštį" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Galima surinkti" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Mažiausia kaina" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Pakeisti apskaičiuotą mažiausią kainą" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Mažiausios kainos valiuta" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Didžiausia kaina" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Pakeisti apskaičiuotą didžiausią kainą" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Didžiausios kainos valiuta" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Atnaujinti" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Atnaujinti šios detalės kainodarą" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nepavyko konvertuoti iš nurodytų valiutų į {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Mažiausia kaina negali būti didesnė už didžiausią kainą" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Didžiausia kaina negali būti mažesnė už mažiausią kainą" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Pasirinkite pirminį surinkimą" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Pasirinkite komponentinę detalę" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Pašalinti esamus duomenis" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Pašalinti esamus BOM elementus prieš kopijuojant" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Įtraukti paveldėtus" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Įtraukti BOM elementus, paveldėtus iš šabloninių detalių" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Praleisti netinkamas eilutes" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopijuoti pakaitines detales" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai" @@ -8288,7 +8292,7 @@ msgstr "Atsargų elemento bandymo ataskaita" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Sumontuoti elementai" @@ -8361,7 +8365,7 @@ msgstr "Filtruoti pagal aukščiausio lygio vietas" msgid "Include sub-locations in filtered results" msgstr "Įtraukti sub-vietas į filtravimo rezultatus" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Pirminė vieta" @@ -8445,7 +8449,7 @@ msgstr "Galiojimo data iki" msgid "Expiry date after" msgstr "Galiojimo data po" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Pasenusi" @@ -8579,7 +8583,7 @@ msgstr "Turi būti nurodyta detalė" msgid "Stock items cannot be located into structural stock locations!" msgstr "Atsargos negali būti patalpintos į struktūrines atsargų vietas!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Atsargų elementas negali būti sukurtas virtualioms detalėms" @@ -8624,7 +8628,7 @@ msgstr "Pasirinkite atitinkančią tiekėjo detalę šiam atsargų elementui" msgid "Where is this stock item located?" msgstr "Kur yra šis atsargų elementas?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Pakuotė, kurioje laikomas šis atsargų elementas" @@ -8640,7 +8644,7 @@ msgstr "Ar šis elementas yra sumontuotas kitame elemente?" msgid "Serial number for this item" msgstr "Šio elemento serijos numeris" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Šio atsargų elemento partijos kodas" @@ -8753,7 +8757,7 @@ msgstr "Atsargų elementas šiuo metu gaminamas" msgid "Serialized stock cannot be merged" msgstr "Su serijos numeriais pažymėtų atsargų sujungti negalima" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Pasikartojantys atsargų elementai" @@ -8877,7 +8881,7 @@ msgstr "Pasirinkite detalę serijos numeriui sugeneruoti" msgid "Quantity of serial numbers to generate" msgstr "Kiekis serijos numerių, kuriuos reikia sugeneruoti" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Bandymo šablonas šiam rezultatui" @@ -8901,222 +8905,222 @@ msgstr "Pirminis elementas" msgid "Parent stock item" msgstr "Pirminis atsargų elementas" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Naudoti pakuotės dydį pridedant: nurodytas kiekis yra pakuočių skaičius" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Įveskite serijos numerius naujiems elementams" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Tiekėjo detalės numeris" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Nebegaliojantis" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Antriniai elementai" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Sekami elementai" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Šio atsargų elemento pirkimo kaina, vienetui arba pakuotei" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Įveskite atsargų elementų, kuriuos reikia serializuoti, skaičių" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Paskirties atsargų vieta" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Šiai detalei negali būti priskirti serijos numeriai" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Serijos numeriai jau egzistuoja" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Pasirinkite atsargų elementą montavimui" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Montuojamas kiekis" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Įveskite montuojamų elementų kiekį" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Pridėkite operacijos pastabą (neprivaloma)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Montuojamas kiekis turi būti bent 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Atsargų elementas nepasiekiamas" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Pasirinktos detalės nėra komplektavimo žiniaraštyje" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Montuojamas kiekis negali viršyti turimo kiekio" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Paskirties vieta išmontuotam elementui" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Pasirinkite detalę, į kurią konvertuoti atsargų elementą" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Pasirinkta detalė netinkama konvertavimui" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Negalima konvertuoti atsargų elemento, kuriam priskirta tiekėjo detalė" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Atsargų elemento būsenos kodas" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Pasirinkite atsargų elementus būsenai pakeisti" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nepasirinkti jokie atsargų elementai" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-vietos" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Pirminė atsargų vieta" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Detalė turi būti parduodama" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Elementas priskirtas pardavimo užsakymui" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Elementas priskirtas gamybos užsakymui" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Klientas, kuriam priskiriami atsargų elementai" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Pasirinkta įmonė nėra klientas" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Atsargų priskyrimo pastabos" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Turi būti pateiktas atsargų elementų sąrašas" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Atsargų sujungimo pastabos" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Leisti skirtingus tiekėjus" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingomis tiekėjų detalėmis" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Leisti skirtingas būsenas" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingais būsenos kodais" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Turi būti pateikti bent du atsargų elementai" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Be pakeitimų" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Atsargų elemento pirminio rakto reikšmė" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Atsargų elemento nėra sandėlyje" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Atsargų operacijos pastabos" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Kitas serijos numeris" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Ankstesnis serijos numeris" @@ -9598,99 +9602,99 @@ msgstr "Pardavimo užsakymai" msgid "Return Orders" msgstr "Grąžinimo užsakymai" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Vartotojo vardas" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Vardas" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Vartotojo vardas" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Pavardė" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Vartotojo pavardė" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Vartotojo el. pašto adresas" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Supervartotojas" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ar šis vartotojas yra supervartotojas" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ar ši vartotojo paskyra yra aktyvi" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Tik supervartotojas gali keisti šį lauką" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Neturite leidimo kurti vartotojų" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Jūsų paskyra sukurta." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Prisijungimui naudokite slaptažodžio atstatymo funkciją" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Sveiki atvykę į InvenTree" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index 73107e725c..5644d12970 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -104,13 +104,13 @@ msgstr "Ievadiet datumu" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Piezīmes" @@ -215,7 +215,7 @@ msgstr "Norādītajā URL nav derīgs attēla fails" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index e50f14380d..7c76c77f53 100644 --- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -23,7 +23,7 @@ msgstr "API eindpunt niet gevonden" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "Lijst met items of filters moet worden opgegeven voor bulk bewerking" #: InvenTree/api.py:445 msgid "Items must be provided as a list" @@ -104,13 +104,13 @@ msgstr "Voer datum in" msgid "Invalid decimal value" msgstr "Ongeldige decimale waarde" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Opmerkingen" @@ -165,19 +165,19 @@ msgstr "Gegevens bevatten verboden markdown inhoud" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "Ongeldige URL: geen hostnaam" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "Ongeldige URL: hostnaam kon niet worden opgelost" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL-punten naar een privé of gereserveerd IP-adres" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "Te veel doorverwijzingen" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -215,7 +215,7 @@ msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" msgid "Log in to the app" msgstr "Log in op de app" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -336,51 +336,51 @@ msgstr "Er is een fout gelogd door de server." msgid "Image" msgstr "Afbeelding" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Dit veld mag niet nul zijn." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Externe afbeelding" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL van extern afbeeldingsbestand" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Fout bij het downloaden van afbeelding van externe URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Ongeldig inhoudstype" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Inhoudstype niet gevonden" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Content type komt niet overeen met de vereiste mixin klasse" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Inclusief varianten" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Inclusief varianten" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Inclusief varianten" msgid "Part" msgstr "Onderdeel" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -669,16 +669,16 @@ msgstr "Boomstructuur uitsluiten" msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Optioneel" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Samenstelling" @@ -687,7 +687,7 @@ msgstr "Samenstelling" msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testbaar" @@ -695,30 +695,30 @@ msgstr "Testbaar" msgid "Order Outstanding" msgstr "Openstaande order" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Verbruikt" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Beschikbaar" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "In bestelling" #: build/api.py:671 msgid "Build not found" -msgstr "" +msgstr "Build niet gevonden" #: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Productieorder" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Locatie" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Uitvoer" @@ -783,7 +783,7 @@ msgstr "Doeldatum moet na startdatum zijn" msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Verkooporder Referentie" msgid "Sales Order to which this build is allocated" msgstr "Productieopdracht waar dit productie aan is toegewezen" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Bronlocatie" @@ -861,16 +861,16 @@ msgstr "Productiestatus" msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Aanmaakdatum" @@ -964,7 +964,7 @@ msgstr "Productieorder {build} is voltooid" msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen" @@ -980,23 +980,23 @@ msgstr "Productie uitvoer is al voltooid" msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Build output heeft niet alle vereiste tests doorstaan" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build output {serial} heeft niet alle vereiste tests doorstaan" @@ -1017,10 +1017,10 @@ msgstr "Bouw order regel item" msgid "Build object" msgstr "Bouw object" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Bouw object" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet over msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Voorraadartikel" @@ -1099,378 +1099,378 @@ msgstr "Bestemming voorraadartikel" msgid "Build Level" msgstr "Bouw level" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Onderdeel naam" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Geheel getal vereist omdat de stuklijst traceerbare onderdelen bevat" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Voorraad locatie voor project uitvoer" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Toegewezen voorraad gebruiken" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Verbruik elke voorraad die al is toegewezen aan deze build" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hoe wilt u omgaan met extra voorraaditems toegewezen aan de bouworder" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepteer dat voorraadartikelen niet volledig zijn toegewezen aan deze productieorder" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepteer dat het vereist aantal productieuitvoeren niet is voltooid" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Bouw opdracht heeft open sub bouw orders" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Bouwen moet in de productiestatus staan" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part moet naar hetzelfde onderdeel wijzen als de productieorder" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Productieuitvoer moet worden opgegeven voor de toewijzing van gevolgde onderdelen" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Productieuitvoer kan niet worden gespecificeerd voor de toewijzing van niet gevolgde onderdelen" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Voorraadlocatie waar onderdelen afkomstig zijn (laat leeg om van elke locatie te nemen)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Alle artikelen" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Niet Gevolgde items" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Gevolgde Items" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Item Type" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Selecteer item type om automatisch toe te wijzen" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM referentie" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM onderdeel ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "BOM onderdeel naam" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Instaleeren Op" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Bouwen" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leveranciersonderdeel" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Toegewezen hoeveelheid" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Bouw referentie" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Naam categorie onderdeel" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Volgbaar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "In productie" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Gepland om te bouwen" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Externe voorraad" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Beschikbare vervanging voorraad" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Beschikbare varianten voorraad" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbruikte hoeveelheid overschrijdt toegewezen hoeveelheid" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Optionele notities voor voorraadverbruik" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Het bouwelement moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupliceer build item allocatie" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Build line moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Dupliceer build line toewijzing" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Ten minste één item of regel moet worden opgegeven" @@ -1494,7 +1494,7 @@ msgstr "In de wacht" msgid "Cancelled" msgstr "Geannuleerd" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Achterstallige Productieorder" msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Is koppeling" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Is een bestand" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Gebruiker heeft geen toestemming om deze bijlagen te verwijderen" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen." @@ -1550,7 +1550,7 @@ msgstr "Geen geldige valuta codes opgegeven" msgid "No plugin" msgstr "Geen plug-in gevonden" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projectcode label" @@ -1628,7 +1628,7 @@ msgstr "Gebruiker" msgid "Price break quantity" msgstr "Prijs pauze hoeveelheid" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Prijs" @@ -1652,7 +1652,7 @@ msgstr "Naam van deze webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actief" @@ -2126,7 +2126,7 @@ msgstr "Parameters" msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "Ongeldig modeltype opgegeven voor parameter" @@ -2140,7 +2140,7 @@ msgstr "ID van het doelmodel voor deze parameter" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Sjabloon" @@ -2148,7 +2148,7 @@ msgstr "Sjabloon" msgid "Parameter template" msgstr "Parameter sjabloon" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Gegevens" @@ -2156,18 +2156,18 @@ msgstr "Gegevens" msgid "Parameter Value" msgstr "Parameterwaarde" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Opmerking" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Optioneel notities veld" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Bestandsnaam" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Model type" @@ -2465,11 +2465,11 @@ msgstr "Model type" msgid "User does not have permission to create or edit attachments for this model" msgstr "Gebruiker heeft geen toestemming om bijlagen voor dit model te maken of te bewerken" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "Gebruiker heeft geen toestemming om parameters voor dit model te maken of te bewerken" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Lijst met selecties is vergrendeld" @@ -2547,19 +2547,19 @@ msgstr "Toon de `over` modal alleen aan superusers" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "Toon superuser banner" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "Toon een waarschuwings-banner in de UI wanneer ingelogd als superuser" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "Toon admin banner" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "Toon een waarschuwings-banner in de UI wanneer ingelogd als admin" #: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" @@ -2859,8 +2859,8 @@ msgstr "Onderdelen zijn standaard sjablonen" msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Onderdeel" @@ -3034,7 +3034,7 @@ msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijs #: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "BOM Zero Quantity toestaan" #: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" @@ -3601,7 +3601,7 @@ msgstr "Voorraadgegevens zal worden verwijderd na het opgegeven aantal dagen" #: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "Oude voorraadgegevens verwijderen" #: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" @@ -3988,33 +3988,33 @@ msgstr "Onderdeel is actief" msgid "Manufacturer is Active" msgstr "Fabrikant is actief" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Leveranciersonderdelen is actief" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Primaire leverancierdeel" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Intern onderdeel is actief" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Leverancier is actief" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabrikant" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Bedrijf" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Heeft voorraad" @@ -4195,7 +4195,7 @@ msgstr "Verzend notities voor intern gebruik" msgid "Link to address information (external)" msgstr "Link naar adres gegevens (extern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" @@ -4213,12 +4213,12 @@ msgstr "Onderdeel selecteren" msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Fabrikant artikel nummer" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Fabrikant artikel nummer (MPN)" @@ -4242,8 +4242,8 @@ msgstr "Hoeveelheid moet groter zijn dan nul" msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Leverancier" msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Voorraad beheers eenheid voor leveranciers" @@ -4290,8 +4290,8 @@ msgstr "basisprijs" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Verpakking" @@ -4339,14 +4339,18 @@ msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier" msgid "Company Name" msgstr "Bedrijfsnaam" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Op voorraad" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Prijsverschillen" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Fout opgetreden tijdens data export" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Bestaande database-identifier voor het record" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "De kolom is al toegewezen aan een database veld" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Het veld is al toegewezen aan een data-kolom" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Kolom toewijzing moet worden gekoppeld aan een geldige importsessie" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Kolom bestaat niet in het gegevensbestand" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Veld bestaat niet in het doel model" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Geselecteerde veld is alleen lezen" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importeer sessie" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Veld" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Kolom" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Rij index" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Oorspronkelijke rij gegevens" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Fouten" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Geldig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "ID is vereist voor het bijwerken van bestaande records." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Geen record gevonden met het opgegeven ID" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Ongeldig ID formaat opgegeven" @@ -4821,7 +4825,7 @@ msgstr "Bestellen" msgid "Order Complete" msgstr "Bestelling voltooid" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern onderdeel" @@ -4918,7 +4922,7 @@ msgstr "Start datum" msgid "Scheduled start date for this order" msgstr "Geplande startdatum voor deze bestelling" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Streefdatum" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Orderreferentie" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Ontvangen" msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Inkoopprijs" @@ -5211,8 +5215,8 @@ msgstr "Gecontroleerd door" msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Zending" @@ -5277,7 +5281,7 @@ msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" @@ -5393,7 +5397,7 @@ msgstr "Extra regels kopiëren" msgid "Copy extra line items from the original order" msgstr "Extra regelitems van de oorspronkelijke bestelling kopiëren" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Parameters kopiëren" @@ -5412,217 +5416,217 @@ msgstr "Artikelen" msgid "Completed Lines" msgstr "Afgeronde regel items" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Artikel dupliceren" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Specificeer opties voor het dupliceren van deze bestelling" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Ongeldige order ID" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leveranciers Naam" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Toestaan order te sluiten met onvolledige regelitems" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Bestelling heeft onvolledige regelitems" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatisch prijzen" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Koopprijs automatisch berekenen gebaseerd op leveranciers \n" " onderdelen gegevens" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Items samenvoegen" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Items met hetzelfde onderdeel, bestemming en doeldatum samenvoegen in één regelitem" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interne naam onderdeel" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Voer batch code in voor inkomende voorraad items" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Vervaldatum" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Voer vervaldatum in voor inkomende voorraad items" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Extra opmerking voor inkomende voorraad items" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Streepjescode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Gescande streepjescode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Verzendingen" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Toegewezen lijnen" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Toegewezen items" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "De volgende serienummers zijn niet beschikbaar" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Retourneer regel item" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Regel item is al ontvangen" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Artikelen kunnen alleen worden ontvangen tegen lopende bestellingen" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Hoeveelheid te retourneren" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Lijn prijs valuta" @@ -5838,7 +5842,7 @@ msgstr "Standaard trefwoorden voor delen in deze categorie" msgid "Icon" msgstr "Pictogram" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Pictogram (optioneel)" @@ -5859,7 +5863,7 @@ msgstr "Standaard waarde" msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Onderdelen" @@ -5974,7 +5978,7 @@ msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbete msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -6007,7 +6011,7 @@ msgstr "Standaard verval datum" msgid "Expiry time (in days) for stock items of this part" msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimum voorraad" @@ -6488,355 +6492,355 @@ msgstr "Onderdeel relatie kan niet worden gecreëerd tussen een deel en zichzelf msgid "Duplicate relationship already exists" msgstr "Dubbele relatie bestaat al" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Bovenliggende categorie" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Bovenliggende onderdeel categorie" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subcategorieën" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Resultaten" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Aantal resultaten opgenomen ten opzichte van deze template" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Bestand is geen afbeelding" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Oorspronkelijk onderdeel" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Selecteer origineel onderdeel om te dupliceren" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copy BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopieer materiaal van het oorspronkelijke deel" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Notities kopiëren" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopieer notities van het originele deel" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Tests kopiëren" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Test sjablonen kopiëren van het originele deel" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Eerste voorraad hoeveelheid" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificeer de initiële voorraad hoeveelheid voor dit onderdeel. Als het aantal nul is, wordt er geen voorraad toegevoegd." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Eerste voorraad locatie" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Fabrikant artikel nummer" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Geselecteerde onderneming is geen geldige leverancier" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Geselecteerde bedrijf is geen geldige fabrikant" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Categorie naam" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Bouwen" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Hoeveelheid van dit deel dat momenteel in productie is" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Er zal een onuitputtelijke hoeveelheid van dit deel worden gebouwd" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Voorraadartikelen" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revisies" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Totale Voorraad" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Niet toegewezen voorraad" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variant voorraad" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliceer onderdeel" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopieer eerste gegevens uit een ander onderdeel" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Eerste voorraad" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Maak onderdeel met eerste voorraad" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Leveranciersgegevens" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Categorie parameters kopiëren" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Bestaande afbeelding" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Bestandsnaam van een bestaande onderdeel afbeelding" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Afbeeldingsbestand bestaat niet" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Valideer de gehele materiaalbon" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Kan bouwen" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Vereist voor bouworders" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Toegewezen aan bouwen van orders" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Vereist voor verkooporders" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "IPN onderdeel" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Onderdeel omschrijving" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Rapport Maken" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimale prijs" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Overschrijf berekende waarde voor minimale prijs" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimale prijs valuta" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maximale prijs" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Overschrijf de berekende waarde voor de maximale prijs" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maximale prijs valuta" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Bijwerken" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Prijzen voor dit onderdeel bijwerken" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan niet converteren van de verstrekte valuta naar {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Selecteer de bovenliggende assemblage" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Selecteer het onderdeel" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Selecteer onderdeel om BOM van te kopiëren" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Bestaande gegevens verwijderen" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Verwijder bestaande BOM items voor het kopiëren" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Inclusief overgenomen" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Ongeldige regels overslaan" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Schakel deze optie in om ongeldige rijen over te slaan" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Verwijder vervangend deel" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items" @@ -8289,7 +8293,7 @@ msgstr "Rapport voorraadcontrole" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Geïnstalleerde items" @@ -8362,7 +8366,7 @@ msgstr "Filter op topniveau locaties" msgid "Include sub-locations in filtered results" msgstr "Inclusief sublocaties in gefilterde resultaten" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Bovenliggende locatie" @@ -8446,7 +8450,7 @@ msgstr "Vervaldatum voor" msgid "Expiry date after" msgstr "Vervaldatum na" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Verouderd" @@ -8580,7 +8584,7 @@ msgstr "Onderdeel moet gespecificeerd worden" msgid "Stock items cannot be located into structural stock locations!" msgstr "Voorraaditems kunnen niet worden geplaatst in structurele voorraadlocaties!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Voorraadartikel kan niet worden aangemaakt voor virtuele onderdelen" @@ -8625,7 +8629,7 @@ msgstr "Selecteer een leveranciersdeel voor dit voorraadartikel" msgid "Where is this stock item located?" msgstr "Waar bevindt zich dit voorraaditem?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Het verpakken van dit voorraaditem is opgeslagen in" @@ -8641,7 +8645,7 @@ msgstr "Is dit item geïnstalleerd in een ander item?" msgid "Serial number for this item" msgstr "Serienummer van dit item" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batch code voor dit voorraaditem" @@ -8754,7 +8758,7 @@ msgstr "Voorraad item is momenteel in productie" msgid "Serialized stock cannot be merged" msgstr "Geserialiseerde voorraad kan niet worden samengevoegd" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Dupliceer voorraadartikelen" @@ -8878,7 +8882,7 @@ msgstr "Selecteer onderdeel voor het genereren van het serienummer voor" msgid "Quantity of serial numbers to generate" msgstr "Aantal serienummers om te genereren" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Test template voor dit resultaat" @@ -8902,222 +8906,222 @@ msgstr "Bovenliggend Item" msgid "Parent stock item" msgstr "Bovenliggende voorraad item" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Gebruik pakketgrootte" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Voer serienummers voor nieuwe items in" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Leverancier artikelnummer" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Verlopen" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Onderliggende items" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Items volgen" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Inkoopprijs van dit voorraadartikel, per eenheid of pakket" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Aantal voorraaditems om serienummers voor te maken" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Geen voorraad item opgegeven" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Locatie van bestemming" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummers kunnen niet worden toegewezen aan dit deel" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Serienummers bestaan al" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Selecteer voorraaditem om te installeren" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Te installeren hoeveelheid" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Voer de te installeren hoeveelheid items in" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Transactienotitie toevoegen (optioneel)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Te installeren hoeveelheid moet minimaal 1 zijn" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Voorraadartikel is niet beschikbaar" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Het geselecteerde deel zit niet in de materialen lijst" -#: stock/serializers.py:869 +#: stock/serializers.py:883 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:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Bestemmingslocatie voor verwijderd item" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Selecteer onderdeel om voorraaditem om te zetten in" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Het geselecteerde deel is geen geldige optie voor de omzetting" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan voorraadartikel niet converteren met toegewezen leverancier deel" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Voorraad status code" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Selecteer voorraadartikelen om status te wijzigen" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Geen voorraaditems geselecteerd" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Bovenliggende voorraad locatie" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Onderdeel moet verkoopbaar zijn" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Klant om voorraadartikelen toe te wijzen" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Geselecteerde bedrijf is geen klant" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Voorraad toewijzing notities" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Een lijst met voorraad artikelen moet worden opgegeven" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Voorraad samenvoegen notities" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Niet overeen komende leveranciers toestaan" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende leveranciers onderdelen worden samengevoegd" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Sta onjuiste status toe" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende statuscodes worden samengevoegd" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Er moeten ten minste twee voorraadartikelen worden opgegeven" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Geen wijziging" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Voorraaditem primaire sleutel waarde" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Voorraad artikel is niet op voorraad" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Voorraad artikel is al in voorraad" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Hoeveelheid mag niet negatief zijn" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Voorraad transactie notities" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Samenvoegen in bestaande voorraad" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Voeg indien mogelijk geretourneerde items samen in bestaande voorraad" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Volgend serienummer" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Vorig serienummer" @@ -9599,99 +9603,99 @@ msgstr "Verkooporders" msgid "Return Orders" msgstr "Retour orders" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Gebruikersnaam" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Voornaam :" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Voornaam van de gebruiker" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Achternaam" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Achternaam van de gebruiker" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "E-mailadres van de gebruiker" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Administrator " -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Is deze gebruiker een administrator " -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Is dit gebruikersaccount actief" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Enkel een supergebruiker kan dit veld aanpassen" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Wachtwoord" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Wachtwoord voor de gebruiker" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Overschrijf waarschuwing" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Overschrijf de waarschuwing over wachtwoord regels" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "U hebt geen toestemming om gebruikers aan te maken" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Je account is aangemaakt." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Gebruik de wachtwoordreset functie om in te loggen" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Welkom bij InvenTree" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index d4101780da..f94fd138d1 100644 --- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -104,13 +104,13 @@ msgstr "Oppgi dato" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notater" @@ -215,7 +215,7 @@ msgstr "Angitt URL er ikke en gyldig bildefil" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-post" @@ -336,51 +336,51 @@ msgstr "En feil har blitt logget av serveren." msgid "Image" msgstr "Bilde" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Eksternt bilde" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URLtil ekstern bildefil" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Sammenstilling" @@ -687,7 +687,7 @@ msgstr "Sammenstilling" msgid "Tracked" msgstr "Spores" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgjengelig" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "I bestilling" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Produksjonsordre" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Plassering" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Salgsordrereferanse" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Kildeplassering" @@ -861,16 +861,16 @@ msgstr "Produksjonsstatus" msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Opprettelsesdato" @@ -964,7 +964,7 @@ msgstr "Produksjonsordre {build} er fullført" msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienumre må angis for sporbare deler" @@ -980,23 +980,23 @@ msgstr "Produksjonsartikkelen er allerede fullført" msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Produksjonsartikkel {serial} har ikke bestått alle påkrevde tester" @@ -1017,10 +1017,10 @@ msgstr "Produksjonsartikkel" msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Produksjonsobjekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelig lagerbeholdning ({a msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagervare" @@ -1099,378 +1099,378 @@ msgstr "Lagervare for montering" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Delnavn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Lagerplassering for produksjonsartikkel" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Bruk tildelt lagerbeholdning" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Bruk all lagerbeholdning som allerede er tildelt denne produksjonen" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hvordan vil du håndtere ekstra lagervarer tildelt produksjonsordren" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Godta at lagervarer ikke er fullt tildelt til denne produksjonsordren" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Godta at nødvendig antall fullførte produksjonsartikler ikke er nådd" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part må peke på den samme delen som produksjonsordren" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagerplassering hvor deler skal hentes (la stå tomt for å ta fra alle plasseringer)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM-referanse" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leverandørdel" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tildelt antall" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Produksjonsreferanse" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Delkategorinavn" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sporbar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Ekstern lagerbeholdning" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Tilgjengelige erstatningsvarer" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Tilgjengelige variantvarer" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Kansellert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Forfalt produksjonsordre" msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Er lenke" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Er fil" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" @@ -1550,7 +1550,7 @@ msgstr "Ingen gyldige valutakoder angitt" msgid "No plugin" msgstr "Ingen programtillegg" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etikett for prosjektkode" @@ -1628,7 +1628,7 @@ msgstr "Bruker" msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1652,7 +1652,7 @@ msgstr "Navn for webhooken" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mal" @@ -2148,7 +2148,7 @@ msgstr "Mal" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "Parameterverdi" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Notat" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Valgfritt notatfelt" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Filnavn" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltype" @@ -2465,11 +2465,11 @@ msgstr "Modelltype" 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" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "Deler er maler som standard" msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" @@ -3988,33 +3988,33 @@ msgstr "Delen er aktiv" msgid "Manufacturer is Active" msgstr "Leverandør er aktiv" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Leverandørdel er aktiv" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Intern del er aktiv" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Leverandør er aktiv" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Produsent" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "Fraktnotater for internt bruk" msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Produsentdeler" @@ -4213,12 +4213,12 @@ msgstr "Velg del" msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Produsentens varenummer" @@ -4242,8 +4242,8 @@ msgstr "Pakkeenhet må være mer enn null" msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Leverandør" msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" @@ -4290,8 +4290,8 @@ msgstr "grunnkostnad" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Emballasje" @@ -4339,14 +4339,18 @@ msgstr "Standardvaluta brukt for denne leverandøren" msgid "Company Name" msgstr "Bedriftsnavn" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "På lager" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Gyldig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Ordre" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern del" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldato" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Ordrereferanse" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Mottatt" msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Innkjøpspris" @@ -5211,8 +5215,8 @@ msgstr "Sjekket Av" msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Forsendelse" @@ -5277,7 +5281,7 @@ msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopier parametere" @@ -5412,216 +5416,216 @@ msgstr "Linjeelementer" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leverandørnavn" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Internt delnummer" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Utløpsdato" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Artikler kan bare mottas mot ordrer som pågår" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta for linje" @@ -5837,7 +5841,7 @@ msgstr "Standard nøkkelord for deler i denne kategorien" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" @@ -5858,7 +5862,7 @@ msgstr "Standardverdi" msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Deler" @@ -5973,7 +5977,7 @@ msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" msgid "Part category" msgstr "Delkategori" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "Standard utløp" msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" @@ -6487,355 +6491,355 @@ msgstr "Del-forhold kan ikke opprettes mellom en del og seg selv" msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Angi initiell lagermengde for denne delen. Hvis antall er null, er ingen lagerbeholdning lagt til." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategorinavn" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Produseres" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagervarer" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Total lagerbeholdning" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Kan Produsere" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minstepris" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Makspris" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan ikke konvertere fra gitte valutaer til {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" @@ -8288,7 +8292,7 @@ msgstr "Testrapport for lagervare" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Installerte artikler" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "Utløpsdato før" msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Foreldet" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" @@ -8624,7 +8628,7 @@ msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" @@ -8640,7 +8644,7 @@ msgstr "Er denne artikkelen montert i en annen artikkel?" msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" @@ -8753,7 +8757,7 @@ msgstr "Lagervare er for tiden i produksjon" msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplisert lagervare" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "Overodnet element" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Leverandørens delnummer" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Utløpt" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Underordnede artikler" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Angi antall lagervarer som skal serialiseres" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Til Lagerplassering" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummer kan ikke tilordnes denne delen" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Velg lagervare å montere" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Antall å installere" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Angi antallet elementer som skal installeres" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Legg til transaksjonsnotat (valgfritt)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Antall å installere må være minst 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Lagervaren er utilgjengelig" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Valgt del er ikke i stykklisten" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Antall å installere må ikke overskride tilgjengelig antall" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Lagerplassering for den avinstallerte artikkelen" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Velg del å konvertere lagervare til" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Valgt del er ikke et gyldig alternativ for konvertering" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Lagervare statuskode" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Velg lagervarer for å endre status" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Tillat forskjellig status" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Minst to lagervarer må oppgis" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Lagervare primærnøkkel verdi" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Lager transaksjonsnotater" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "Salgsordre" msgid "Return Orders" msgstr "Returordrer" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Brukernavn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Fornavn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Fornavn på brukeren" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Etternavn" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Etternavn på brukeren" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "E-postadressen til brukeren" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superbruker" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Er denne brukeren en superbruker" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Er denne brukerkontoen aktiv" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Din konto er opprettet." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index 73485a7b24..17489fd479 100644 --- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -104,13 +104,13 @@ msgstr "Wprowadź dane" msgid "Invalid decimal value" msgstr "Niepoprawna wartość dziesiętna" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Uwagi" @@ -215,7 +215,7 @@ msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" msgid "Log in to the app" msgstr "Logowanie do aplikacji" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Adres E-Mail" @@ -336,51 +336,51 @@ msgstr "Błąd został zapisany w logach serwera." msgid "Image" msgstr "Obraz" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Obrazek zewnętrzny" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Adres URL zdalnego pliku obrazu" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nie udało się pobrać obrazu ze zdalnego adresu URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Obejmuje warianty" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Obejmuje warianty" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Obejmuje warianty" msgid "Part" msgstr "Komponent" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -669,16 +669,16 @@ msgstr "Wyklucz drzewo" msgid "Build must be cancelled before it can be deleted" msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Złożenie" @@ -687,7 +687,7 @@ msgstr "Złożenie" msgid "Tracked" msgstr "Śledzony" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testowalne" @@ -695,24 +695,24 @@ msgstr "Testowalne" msgid "Order Outstanding" msgstr "Zaległe zamówienie" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostępne" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "W Zamówieniu" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokalizacja" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Wyjście" @@ -783,7 +783,7 @@ msgstr "Data docelowa musi być po dacie rozpoczęcia" msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Odwołanie do zamówienia sprzedaży" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokalizacja źródła" @@ -861,16 +861,16 @@ msgstr "Status budowania" msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Data utworzenia" @@ -964,7 +964,7 @@ msgstr "Kolejność kompilacji {build} została zakończona" msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Należy podać numery seryjne dla lokalizowania części" @@ -980,23 +980,23 @@ msgstr "Budowanie wyjścia jest już ukończone" msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Wyjście budowy {serial} nie przeszło wszystkich testów" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Zbuduj obiekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Przydzielona ilość ({q}) nie może przekraczać dostępnej ilości zap msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Element magazynowy" @@ -1099,378 +1099,378 @@ msgstr "Docelowa lokalizacja magazynowa przedmiotu" msgid "Build Level" msgstr "Poziom budowania" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nazwa komponentu" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Zaakceptuj nieprzydzielone" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Zaakceptuj, że przedmioty magazynowe nie zostały w pełni przypisane do tego zlecenia budowy" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostępna ilość ({q}) przekroczona" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Magazyn, z którego mają być pozyskane elementy (pozostaw puste, aby pobrać z dowolnej lokalizacji)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Magazyn wymienny" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Przydziel opcjonalne elementy BOM do zbudowania zamówienia" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Odniesienie BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID części BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nazwa części BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Wersja" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Część dostawcy" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Ilość zarezerwowana" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Możliwość śledzenia" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Zew. zasoby magazynowe" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Dostępny magazyn zastępczy" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "Wstrzymane" msgid "Cancelled" msgstr "Anulowano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Jest plikiem" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Brak wtyczki" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Użytkownik" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktywny" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Szablon" @@ -2148,7 +2148,7 @@ msgstr "Szablon" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dane" @@ -2156,18 +2156,18 @@ msgstr "Dane" msgid "Parameter Value" msgstr "Wartość parametru" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Uwaga" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nazwa pliku" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" @@ -2465,11 +2465,11 @@ msgstr "Typ modelu" msgid "User does not have permission to create or edit attachments for this model" msgstr "Użytkownik nie ma uprawnień do tworzenia lub edytowania załączników dla tego modelu" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Lista wyboru jest zablokowana" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" @@ -3988,33 +3988,33 @@ msgstr "Komponent jest aktywny" msgid "Manufacturer is Active" msgstr "Producent jest aktywny" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Producent" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "Notatki wysyłkowe do użytku wewnętrznego" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Komponent producenta" @@ -4213,12 +4213,12 @@ msgstr "Wybierz część" msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Numer producenta komponentu" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Dostawca" msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "koszt podstawowy" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Opakowanie" @@ -4339,14 +4339,18 @@ msgstr "Domyślna waluta używana dla tego dostawcy" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Na stanie" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Ważny" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Zamówienie" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Komponent wewnętrzny" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data docelowa" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Odniesienie zamówienia" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Odebrane" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Cena zakupu" @@ -5211,8 +5215,8 @@ msgstr "Sprawdzone przez" msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Przesyłka" @@ -5277,7 +5281,7 @@ msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopiuj parametry" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data ważności" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "Wartość domyślna" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Części" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "Domyślne wygasanie" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Towary" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Zainstalowane elementy" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "Wybierz pasującą część dostawcy dla tego towaru" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "Element nadrzędny" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Termin minął" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementy podrzędne" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Czy to konto użytkownika jest aktywne" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Twoje konto zostało utworzone." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Zresetuj hasło" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Witamy w InvenTree" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index b32ef565ca..45cc2002cc 100644 --- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -104,13 +104,13 @@ msgstr "Insira uma Data" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Anotações" @@ -215,7 +215,7 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -336,51 +336,51 @@ msgstr "Log de erro salvo pelo servidor." msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selecione a Moeda nas opções disponíveis" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagens Remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL do arquivo de imagem remoto" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Peça" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montagem" @@ -687,7 +687,7 @@ msgstr "Montagem" msgid "Tracked" msgstr "Monitorado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "No pedido" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Ordem de Produção" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referência do pedido de venda" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Local de Origem" @@ -861,16 +861,16 @@ msgstr "Progresso da produção" msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Código de Lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Criado em" @@ -964,7 +964,7 @@ msgstr "O Pedido de produção {build} foi concluído!" msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" @@ -980,23 +980,23 @@ msgstr "Saída de produção já completada" msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde ao Pedido de Produção" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Quantidade não pode ser maior do que a quantidade de saída" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "O item de produção {serial} não passou todos os testes necessários" @@ -1017,10 +1017,10 @@ msgstr "Item da linha de Produção" msgid "Build object" msgstr "Objeto de produção" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Objeto de produção" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em e msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Item de estoque" @@ -1099,378 +1099,378 @@ msgstr "Destino do Item do Estoque" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "A saída de produção não está completamente alocada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Entre a quantidade da saída de produção" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Local de estoque para a produção" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas recicladas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas sucateadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motivo para sucatear saída(s) de produção" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar este pedido de produção" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Estoque sobrealocado" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrealocados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta produção" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceitar que o número requerido de saídas de produção não foi concluído" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linha de produção" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bin_item.part deve indicar a mesma peça do pedido de produção" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Item deve estar em estoque" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção deve ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Alocação do Item precisa ser fornecida" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Local de estoque onde peças serão extraídas (deixar em branco para qualquer local)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Local não incluso" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Não incluir itens de estoque deste local" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Estoque permutável" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Itens de estoque em múltiplos locais pode ser permutável" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Substituir Estoque" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens LDM opcionais para o pedido de produção" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Pedido de produção vencido" msgid "Build order {bo} is now overdue" msgstr "Pedido de produção {bo} está atrasada" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "É uma Ligação" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "O Utilizador não tem permissão para remover este anexo" @@ -1550,7 +1550,7 @@ msgstr "Nenhum código de moeda válido foi fornecido" msgid "No plugin" msgstr "Sem extensão" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preço" @@ -1652,7 +1652,7 @@ msgstr "Nome para este webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modelo" @@ -2148,7 +2148,7 @@ msgstr "Modelo" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dados" @@ -2156,18 +2156,18 @@ msgstr "Dados" msgid "Parameter Value" msgstr "Valor do Parâmetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Anotação" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nome do arquivo" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "Peças são modelos por padrão" msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "Notas de envio para uso interno" msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Peça do Fabricante" @@ -4213,12 +4213,12 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "NPF" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" @@ -4242,8 +4242,8 @@ msgstr "Unidades de pacote deve ser maior do que zero" msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4290,8 +4290,8 @@ msgstr "preço base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Embalagem" @@ -4339,14 +4339,18 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Pedido" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Peça Interna" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data alvo" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Referência do pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Situação" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Recebido" msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preço de Compra" @@ -5211,8 +5215,8 @@ msgstr "Verificado por" msgid "User who checked this shipment" msgstr "Usuário que verificou esta remessa" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Remessa" @@ -5277,7 +5281,7 @@ msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Quantidade deve ser 1 para item de estoque serializado" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copiar Parâmetros" @@ -5412,216 +5416,216 @@ msgstr "Itens de linha" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nome do Fornecedor" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir que o pedido seja fechado com itens de linha incompletos" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "O pedido tem itens da linha incompletos" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moeda de preço de compra" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Numero interno do produto" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Itens de linha" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Selecione o local de destino para os itens recebidos" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Digite o código do lote para itens de estoque recebidos" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data de validade" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Digite o número de série para itens de estoque recebidos" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras já em uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envios concluídos" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moeda de preço de venda" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Item de linha não está associado a este pedido" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Digite números de série para alocar" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "O pedido já foi enviado" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "O envio não está associado a este pedido" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nenhuma correspondência encontrada para os seguintes números de série" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Devolver item do pedido" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Item do pedido não bate com o pedido de devolução" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Item do pedido já foi recebido" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Itens só podem ser recebidos de pedidos em processamento" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Tipo de moeda para o item do pedido" @@ -5837,7 +5841,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5858,7 +5862,7 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Peças" @@ -5973,7 +5977,7 @@ msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "Validade Padrão" msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Estoque Mínimo" @@ -6487,355 +6491,355 @@ msgstr "Relacionamento da peça não pode ser criada com ela mesma" msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoria de peça pai" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Sub-categorias" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moeda de compra deste item de estoque" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Peça Original" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copiar imagem" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copiar LDM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nome da Categoria" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Produzindo" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validar a Lista de Materiais completa" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Pode Produzir" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Preço Máximo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Não foi possível converter das moedas fornecidas para {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Preço mínimo não pode ser maior que o preço máximo" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Preço máximo não pode ser menor que o preço mínimo" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluir itens LDM que são herdados de peças modelo" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" @@ -8288,7 +8292,7 @@ msgstr "Relatório Teste do Item em Estoque" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Itens instalados" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "Data de validade antes" msgid "Expiry date after" msgstr "Data de validade depois" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Inativo" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Os itens de estoque não podem estar localizados em locais de estoque estrutural!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Item de estoque não pode ser criado para peças virtuais" @@ -8624,7 +8628,7 @@ msgstr "Selecione uma peça do fornecedor correspondente para este item de estoq msgid "Where is this stock item located?" msgstr "Onde está localizado este item de estoque?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Embalagem deste item de estoque está armazenado em" @@ -8640,7 +8644,7 @@ msgstr "Este item está instalado em outro item?" msgid "Serial number for this item" msgstr "Número de série para este item" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código do lote para este item de estoque" @@ -8753,7 +8757,7 @@ msgstr "Item no estoque está em produção no momento" msgid "Serialized stock cannot be merged" msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Item de estoque duplicado" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "Item Primário" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Inserir número de série para novos itens" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Itens Filhos" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 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:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Insira o número de itens de estoque para serializar" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Local de destino do estoque" -#: stock/serializers.py:746 +#: stock/serializers.py:760 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:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Números de série já existem" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Selecione o item de estoque para instalar" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Quantidade a Instalar" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Insira a quantidade de itens a instalar" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Adicionar nota de transação (opcional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "A quantidade para instalar deve ser pelo menos 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Item de estoque indisponível" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Peça selecionada não está na Lista de Materiais" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Quantidade a instalar não deve exceder a quantidade disponível" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Local de destino para o item desinstalado" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Selecione peça para converter o item de estoque em" -#: stock/serializers.py:955 +#: stock/serializers.py:969 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:972 +#: stock/serializers.py:986 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:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Código de estado do item estoque" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Selecionar itens de estoque para mudar estados" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nenhum item de estoque selecionado" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-locais" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Parte deve ser comercializável" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Item é alocado para um pedido de venda" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Item está alocado a um pedido de produção" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente para atribuir itens de estoque" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "A empresa selecionada não é um cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Nodas atribuídas a estoque" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Uma lista de item de estoque deve ser providenciada" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notas de fusão de estoque" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Permitir fornecedores divergentes" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Permitir estado incompatível" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Ao menos dois itens de estoque devem ser providenciados" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valor da chave primária do Item Estoque" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notas da transação de estoque" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "Pedidos de vendas" msgid "Return Orders" msgstr "Pedidos de Devolução" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nome de usuário" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Primeiro Nome" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Sobrenome" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Por favor, use a função de redefinir senha para acessar" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index 302ee4688c..2d84ccc249 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -104,13 +104,13 @@ msgstr "Informe a data" msgid "Invalid decimal value" msgstr "Valor decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Observações" @@ -215,7 +215,7 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "Entrar no aplicativo" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -336,51 +336,51 @@ msgstr "Um erro foi registrado pelo servidor." msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Deve ser um número válido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selecione a moeda entre as opções disponíveis" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Este campo não pode ser nulo." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagem remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL do arquivo da imagem remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Falha ao baixar a imagem da URL remota" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Formato de conteúdo inválido" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tipo de conteúdo não encontrado" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Incluir Variáveis" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Incluir Variáveis" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Incluir Variáveis" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -669,16 +669,16 @@ msgstr "Excluir árvore" msgid "Build must be cancelled before it can be deleted" msgstr "A compilação deve ser cancelada antes de ser excluída" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montagem" @@ -687,7 +687,7 @@ msgstr "Montagem" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testável" @@ -695,24 +695,24 @@ msgstr "Testável" msgid "Order Outstanding" msgstr "Pedido pendente" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Em pedido" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Ordem da compilação" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Saída" @@ -783,7 +783,7 @@ msgstr "A data limite deve ser posterior à data inicial" msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referência do pedido de venda" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Local de Origem" @@ -861,16 +861,16 @@ msgstr "Progresso da produção" msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Código do lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Criado em" @@ -964,7 +964,7 @@ msgstr "O Pedido de produção {build} foi concluído" msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" @@ -980,23 +980,23 @@ msgstr "Saída da produção já está concluída" msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde à Ordem de Produção" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "A quantidade não pode ser maior que a quantidade de saída" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "A saída da produção não passou em todos os testes necessários" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A saída da produção {serial} não passou em todos os testes necessários" @@ -1017,10 +1017,10 @@ msgstr "Item da ordem de produção" msgid "Build object" msgstr "Compilar objeto" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Compilar objeto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em e msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Item de Estoque" @@ -1099,378 +1099,378 @@ msgstr "Destino do Item do Estoque" msgid "Build Level" msgstr "Nível de produção" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Esta saída de produção não está totalmente alocada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Insira a quantidade para construir a saída de produção" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Local de estoque para saídas de produção" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas eliminadas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas eliminadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motivo para eliminar saída(s) de produção" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar esta ordem de produção" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrecarregados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta encomenda" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceitar que o número requerido de saídas de produção não foi concluído" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "A ordem de produção tem ordens de produção secundárias abertas" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Ordem de produção deve estar no estado de produção" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Ordem de produção tem saídas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linha de Produção" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part deve apontar para a mesma parte que a ordem de produção" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "O item deve estar em estoque" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção não pode ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Alocação de itens precisam ser fornecidos" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Localização do estoque onde as peças devem ser originadas (deixe em branco a partir de qualquer local)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Excluir Local" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Excluir itens de estoque desta localização selecionada" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Estoque Intercambiável" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Itens de estoque em múltiplos locais podem ser intercambiáveis" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Estoque Substituto" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens BOM opcionais para ordem de produção" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referência do BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID da parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nome da peça BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Produção" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referência da produção" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nome da Categoria" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Agendado para produção" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Estoque Externo" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Estoque Substituto Disponível" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Estoque de Variantes Disponível" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "Em Espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Ordem de produção vencido" msgid "Build order {bo} is now overdue" msgstr "Ordem de produção {bo} está atrasada" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "É um link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "O usuário não tem permissão para deletar esses anexos" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "O usuário não tem permissão para deletar esse anexo" @@ -1550,7 +1550,7 @@ msgstr "Nenhum código de moeda válido fornecido" msgid "No plugin" msgstr "Sem extensão" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Rótulo de código do projeto" @@ -1628,7 +1628,7 @@ msgstr "Usuário" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preço" @@ -1652,7 +1652,7 @@ msgstr "Nome para este webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modelo" @@ -2148,7 +2148,7 @@ msgstr "Modelo" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dados" @@ -2156,18 +2156,18 @@ msgstr "Dados" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Anotação" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nome do arquivo" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Categoria de Modelo" @@ -2465,11 +2465,11 @@ msgstr "Categoria de Modelo" msgid "User does not have permission to create or edit attachments for this model" msgstr "Usuário não tem permissão para criar ou editar anexos para este modelo" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Lista de seleção bloqueada" @@ -2859,8 +2859,8 @@ msgstr "Peças são modelos por padrão" msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" @@ -3988,33 +3988,33 @@ msgstr "A peça está ativa" msgid "Manufacturer is Active" msgstr "Fabricante está ativo" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "A peça do Fornecedor está ativa" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "A peça interna está ativa" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "O fornecedor está Ativo" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Tem estoque" @@ -4195,7 +4195,7 @@ msgstr "Notas de envio para uso interno" msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabricante da peça" @@ -4213,12 +4213,12 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "NPF" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" @@ -4242,8 +4242,8 @@ msgstr "Unidades de pacote devem ser maior que zero" msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4290,8 +4290,8 @@ msgstr "preço base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Embalagem" @@ -4339,14 +4339,18 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "Nome da Empresa" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Ocorreu um erro ao exportar os dados" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "A coluna já está mapeada a um campo de banco de dados" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "O campo já está mapeado para uma coluna de dados" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Mapeamento de coluna deve ser ligado a uma sessão de importação válida" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "A coluna não existe no arquivo de dados" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "O campo não existe no modelo de destino" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "O campo selecionado é somente leitura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importar Sessão" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Coluna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Índice de fileira" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Dados da linha original" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Erros" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Pedido" msgid "Order Complete" msgstr "Pedido Completo" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Peça Interna" @@ -4918,7 +4922,7 @@ msgstr "Data inicial" msgid "Scheduled start date for this order" msgstr "Data de início programada para esta encomenda" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data Prevista" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Referência do pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Situação" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Recebido" msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preço de Compra" @@ -5211,8 +5215,8 @@ msgstr "Verificado por" msgid "User who checked this shipment" msgstr "Usuário que verificou este envio" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envio" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicar Pedido" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID do pedido inválido" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "O pedido não pode ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Mesclar Itens" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Número Interno da Peça" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nome Interno da Peça" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras já está em uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Itens Alocados" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Os seguintes números de série não estão disponíveis" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5858,7 +5862,7 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Peças" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "Validade Padrão" msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Estoque Mínimo" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Estoque Inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Ignorar Linhas Inválidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Habilite essa opção para ignorar linhas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nome de usuário" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Primeiro Nome" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Primeiro nome do usuário" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Sobrenome" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Sobrenome do usuário" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Endereço de e-mail do usuário" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuário" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Somente um superusuário pode ajustar este campo" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Senha" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Senha do usuário" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Você não tem permissão para criar usuários" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index 1b2875155d..ffc3bb6e8d 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -104,13 +104,13 @@ msgstr "Enter Date" msgid "Invalid decimal value" msgstr "Valoare zecimală nevalidă" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notițe" @@ -215,7 +215,7 @@ msgstr "URL-ul furnizat nu este un fișier imagine valid" msgid "Log in to the app" msgstr "Conectați-vă la aplicație" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -336,51 +336,51 @@ msgstr "A fost înregistrată o eroare de către server." msgid "Image" msgstr "Imagine" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Trebuie sa fie un număr valid" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Monedă" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selectați moneda din opțiunile disponibile" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Acest câmp nu poate fi null." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valoare invalidă" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagini de la distanţă" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL-ul imaginii la distanţă" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Descărcarea imaginilor din URL-ul de la distanţă nu este activată" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Descărcarea imaginii din URL-ul de la distanță a eșuat" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Format de tip de conținut nevalid" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tipul de conținut nu a fost găsit" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Tipul de conținut nu se potrivește cu mixin necesar clasei" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "İnclude variante" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "İnclude variante" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "İnclude variante" msgid "Part" msgstr "Piesă" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -669,16 +669,16 @@ msgstr "Exclude arbore" msgid "Build must be cancelled before it can be deleted" msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opţional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Asamblate" @@ -687,7 +687,7 @@ msgstr "Asamblate" msgid "Tracked" msgstr "Urmarit" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testabilă" @@ -695,24 +695,24 @@ msgstr "Testabilă" msgid "Order Outstanding" msgstr "Comandă restantă" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocate" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Consumat" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponibil" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Pe comandă" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Comenzi de Producție" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Locatie" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Ieșire" @@ -783,7 +783,7 @@ msgstr "Data țintă trebuie să fie după data de început" msgid "Build Order Reference" msgstr "Referință comandă producție" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referință comandă de vânzare" msgid "Sales Order to which this build is allocated" msgstr "Comanda de vânzare pentru care această construcție este alocată" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Locație sursă" @@ -861,16 +861,16 @@ msgstr "Stare producției" msgid "Build status code" msgstr "Cod status producție" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Cod lot" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Cod de lot pentru această producție" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Data creării" @@ -964,7 +964,7 @@ msgstr "A fost finalizată o comandă de producție {build}" msgid "A build order has been completed" msgstr "A fost finalizată o comandă de producție" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile" @@ -980,23 +980,23 @@ msgstr "Construcția este deja finalizată" msgid "Build output does not match Build Order" msgstr "Construcția nu se potrivește cu Comanda de producție" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Cantitatea trebuie să fie mai mare decât zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Cantitatea nu poate fi mai mare decât cantitatea de ieşire" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Construcția nu a trecut toate testele necesare" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Construcția {serial} nu a trecut toate testele necesare" @@ -1017,10 +1017,10 @@ msgstr "Element linie comandă de producție" msgid "Build object" msgstr "Construiește obiectul" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Construiește obiectul" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Cantitate alocata ({q}) nu trebuie sa depaseasca cantitatea disponibila msgid "Stock item is over-allocated" msgstr "Articolul din stoc este supra alocat" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Articol Stoc" @@ -1099,378 +1099,378 @@ msgstr "Destinație articol in stoc" msgid "Build Level" msgstr "Nivel de construcție" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Numele Piesei" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Rezultat de construcție" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Producția nu corespunde cu producția-mamă" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Componenta de ieșire nu corespunde componentei din comanda de producție" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Această producție este deja finalizată" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Această producție nu este alocată integral" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Introduceți cantitatea pentru producția de ieșire" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Număr de serie" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nu este permisă" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Acceptați nealocat" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Acceptați Incomplet" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linie de construcție" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Rezultatul construirii" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Locația stocului de unde vor fi procurate piesele (lăsați necompletat pentru a prelua piesele din orice locație)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nume piesă BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Producție" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nume Categorie Piesă" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "În Producţie" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stoc extern" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stoc disponibil" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stoc de înlocuire disponibil" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "Suspendat" msgid "Cancelled" msgstr "Anulat" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Comandă de producție restantă" msgid "Build order {bo} is now overdue" msgstr "Comanda de producție {bo} este în întârziere" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etichetă Cod Proiect" @@ -1628,7 +1628,7 @@ msgstr "Utilizator" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preț" @@ -1652,7 +1652,7 @@ msgstr "Nume pentru acest webhook" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activ" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Nume fișier" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Introduceți codul lotului pentru articolele din stoc primite" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Versiunea" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Descrierea piesei" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Codul lotului pentru acest element din stoc" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nume utilizator" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Prenumele" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Prenumele utilizatorului" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Parolă" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Parolă pentru utilizator" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Suprascrie avertismentul cu privire la regulile parolei" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Vă rugăm să utilizați funcția de resetare a parolei pentru a vă autentifica" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 01bae25974..5c1e2fec73 100644 --- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -104,13 +104,13 @@ msgstr "Введите дату" msgid "Invalid decimal value" msgstr "Не верное десятичное значение" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Заметки" @@ -215,7 +215,7 @@ msgstr "Предоставленный URL не является допусти msgid "Log in to the app" msgstr "Войти в приложение" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Электронная почта" @@ -336,51 +336,51 @@ msgstr "Сервер зарегистрировал ошибку." msgid "Image" msgstr "Изображение" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Это поле не может быть пустым." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Удаленное изображение" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "ССЫЛКА файла изображения на удаленном сервере" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Не удалось загрузить изображение из URL адреса" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Неверный формат типа содержимого" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Тип содержимого не найден" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Тип содержимого не соответствует требуемому классу миксина" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Включая варианты" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Включая варианты" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Включая варианты" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Категория" @@ -669,16 +669,16 @@ msgstr "Исключить дерево" msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Расходник" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Необязательно" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Сборная деталь" @@ -687,7 +687,7 @@ msgstr "Сборная деталь" msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Тестируемая" @@ -695,24 +695,24 @@ msgstr "Тестируемая" msgid "Order Outstanding" msgstr "Невыполненные заказы" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Потреблено" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "В заказе" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Заказ на производство" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Расположение" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Выход" @@ -783,7 +783,7 @@ msgstr "Целевая дата должна быть после даты нач msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Ссылка на заказ" msgid "Sales Order to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Место хранения комплектующих" @@ -861,16 +861,16 @@ msgstr "Статус заказа на производство" msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Дата создания" @@ -964,7 +964,7 @@ msgstr "Заказ на производство {build} был завершен msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых деталей должны быть указаны серийные номера" @@ -980,23 +980,23 @@ msgstr "Продукция уже произведена" msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Выход сборки не прошёл все необходимые тесты" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" @@ -1017,10 +1017,10 @@ msgstr "Номер позиции для производства" msgid "Build object" msgstr "Объект производства" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Объект производства" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Резервируемое количество ({q}) не должно msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Складская позиция" @@ -1099,378 +1099,378 @@ msgstr "Целевая складская позиция" msgid "Build Level" msgstr "Уровень сборки" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Наименование детали" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Местоположение склада для результата сборки" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, даже если остатки не были полностью зарезервированы" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Израсходовать зарезервированные остатки" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Израсходовать складские позиции, которые были зарезервированы для этой продукции" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Производственный заказ имеет незавершённые дочерние заказы" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Заказ на производство должен быть в стадии выполнения" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Ссылка на спецификацию (BOM)" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID детали в спецификации (BOM)" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Название детали в спецификации (BOM)" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Установить в" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Сборка" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Деталь поставщика" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Зарезервированное количество" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Ссылка на сборку" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Название категории детали" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Отслеживание" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Запланировано к сборке" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Доступный запас" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Доступный запас заменителей" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Доступный запас вариантов" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Потреблённое количество превышает выделенное количество" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Дополнительные примечания по расходу запаса" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Элемент сборки должен ссылаться на правильный заказ на сборку" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Дублирование выделения элемента сборки" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Строка сборки должна ссылаться на правильный заказ на сборку" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Дублирование выделения строки сборки" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Должен быть указан хотя бы один элемент или строка" @@ -1494,7 +1494,7 @@ msgstr "Отложен" msgid "Cancelled" msgstr "Отменён" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Просроченный заказ сборки" msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Ссылка" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Файл" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "У пользователя нет прав для удаления этих вложений" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "У пользователя нет прав на удаление этого вложения" @@ -1550,7 +1550,7 @@ msgstr "Не указаны действительные коды валют" msgid "No plugin" msgstr "Нет плагина" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Название кода проекта" @@ -1628,7 +1628,7 @@ msgstr "Пользователь" msgid "Price break quantity" msgstr "Скидка распространяется на заданное количество" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Цена" @@ -1652,7 +1652,7 @@ msgstr "Имя для этого веб-хука" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Активный" @@ -2126,7 +2126,7 @@ msgstr "Параметры" msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "Указан неверный тип модели для параметра" @@ -2140,7 +2140,7 @@ msgstr "ID целевой модели для этого параметра" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" @@ -2148,7 +2148,7 @@ msgstr "Шаблон" msgid "Parameter template" msgstr "Шаблон параметра" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Данные" @@ -2156,18 +2156,18 @@ msgstr "Данные" msgid "Parameter Value" msgstr "Значение параметра" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Заметка" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Опциональное поле записей" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Имя файла" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Тип модели" @@ -2465,11 +2465,11 @@ msgstr "Тип модели" msgid "User does not have permission to create or edit attachments for this model" msgstr "Пользователь не имеет разрешения создавать или редактировать вложения для этой модели" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "У пользователя нет разрешения на создание или редактирование параметров для этой модели" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Список выбора заблокирован" @@ -2859,8 +2859,8 @@ msgstr "По умолчанию детали являются шаблонами msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Компонент" @@ -3988,33 +3988,33 @@ msgstr "Деталь активна" msgid "Manufacturer is Active" msgstr "Производитель активен" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Поставляемая деталь активна" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Внутренняя деталь активна" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Поставщик активен" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Производитель" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Компания" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Есть запас" @@ -4195,7 +4195,7 @@ msgstr "Записи отправления для внутреннего пол msgid "Link to address information (external)" msgstr "Ссылка на адресную информацию (внешняя)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Производитель детали" @@ -4213,12 +4213,12 @@ msgstr "Выберите деталь" msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Артикул производителя" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Артикул производителя" @@ -4242,8 +4242,8 @@ msgstr "Единицы упаковки должны быть больше ну msgid "Linked manufacturer part must reference the same base part" msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Поставщик" msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Артикул поставщика" @@ -4290,8 +4290,8 @@ msgstr "базовая стоимость" msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Упаковка" @@ -4339,14 +4339,18 @@ msgstr "Валюта по умолчанию для этого поставщи msgid "Company Name" msgstr "Название компании" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "На складе" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Ценовые пороги" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Произошла ошибка при экспорте данных" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Существующий идентификатор записи в базе данных" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Колонка уже сопоставлена с полем базы данных" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Поле уже сопоставлено с колонкой данных" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Сопоставление столбцов должно быть связано с корректным сеансом импорта" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Колонка не существует в файле данных" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Поле не существует в целевой модели" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Выбранное поле доступно только для чтения" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Сессия импорта" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Поле" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Колонка" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Номер строки" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Исходные данные строки" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Ошибки" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Корректный" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "Для обновления существующих записей требуется ID." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Запись с указанным ID не найдена" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Указан недействительный формат ID" @@ -4821,7 +4825,7 @@ msgstr "Заказ" msgid "Order Complete" msgstr "Заказ выполнен" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Внутренняя деталь" @@ -4918,7 +4922,7 @@ msgstr "Начальная дата" msgid "Scheduled start date for this order" msgstr "Запланированная начальная дата этого заказа" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Целевая дата" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Ссылка на заказ" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Статус" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Получено" msgid "Number of items received" msgstr "Количество полученных предметов" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Закупочная цена" @@ -5211,8 +5215,8 @@ msgstr "Проверн" msgid "User who checked this shipment" msgstr "Пользователь, проверивший эту отгрузку" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Отправление" @@ -5277,7 +5281,7 @@ msgstr "Количество распределения не может прев msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" @@ -5393,7 +5397,7 @@ msgstr "Копировать дополнительные позиции" msgid "Copy extra line items from the original order" msgstr "Копировать дополнительные позиции из исходного заказа" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Скопировать параметры" @@ -5412,216 +5416,216 @@ msgstr "Позиции" msgid "Completed Lines" msgstr "Завершённые позиции" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Дублировать заказ" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Указать параметры для дублирования этого заказа" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Недействительный ID заказа" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Имя поставщика" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Заказ не может быть отменён" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Разрешить закрывать заказ с незавершёнными позициями" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "В заказе есть незавершённые позиции" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Автоматическая цена" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Валюта заказа на закупку" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Объединять элементы" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Внутренний артикул детали" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Внутреннее название детали" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Необходимо указать поставляемую деталь" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Необходимо указать заказ на закупку" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Поставщик должен соответствовать заказу на закупку" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Заказ на закупку должен соответствовать поставщику" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Истекает" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Введите дату истечения срока годности для поступающих складских единиц" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Переопределить информацию об упаковке для поступающих складских единиц" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Дополнительная заметка для поступающих складских единиц" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Штрихкод уже используется" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Необходимо предоставить позиции" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Необходимо указать место назначения" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Предоставленные значения штрихкодов должны быть уникальными" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Отгрузки" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Выполненные отгрузки" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Зарезервированные позиции" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Выделенные элементы" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Информация об отгрузке не предоставлена" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Позиция не связана с этим заказом" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Количество должно быть положительным" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Отгрузка уже отправлена" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Отгрузка не связана с этим заказом" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Совпадений для следующих серийных номеров не найдено" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Следующие серийные номера недоступны" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Позиция заказа на возврат" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Позиция не соответствует заказу на возврат" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Позиция уже получена" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Количество для возврата" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Валюта цены позиции" @@ -5837,7 +5841,7 @@ msgstr "Ключевые слова по умолчанию для детале msgid "Icon" msgstr "Значок" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Значок (необязательно)" @@ -5858,7 +5862,7 @@ msgstr "Значение по умолчанию" msgid "Default Parameter Value" msgstr "Значение параметра по умолчанию" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Детали" @@ -5973,7 +5977,7 @@ msgstr "Ключевые слова для улучшения видимости msgid "Part category" msgstr "Категория" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Внутренний артикул" @@ -6006,7 +6010,7 @@ msgstr "Срок действия по умолчанию" msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Минимальный запас" @@ -6487,355 +6491,355 @@ msgstr "Нельзя создать отношение детали с само msgid "Duplicate relationship already exists" msgstr "Дублирующее отношение уже существует" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Родительская категория" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Родительская категория деталей" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Результаты" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Количество результатов, зарегистрированных по этому шаблону" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Файл не является изображением" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Выберите исходную деталь для копирования" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Копировать изображение из исходной детали" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Копировать спецификацию из исходной детали" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Копировать данные параметров из исходной детали" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Копировать тесты" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Копировать шаблоны тестов из исходной детали" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Начальное количество на складе" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Задайте начальное количество этой детали на складе. Если количество равно 0, складская позиция не будет добавлена." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Начальное местоположение запаса" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Укажите начальное местоположение запаса для этой детали" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Артикул производителя" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Выбранная компания не является допустимым поставщиком" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Выбранная компания не является допустимым производителем" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Деталь производителя с данным артикулом уже существует" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Деталь поставщика с данным артикулом уже существует" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Название категории" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Производится" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Количество этой детали, находящееся в производстве" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Оставшееся количество этой детали, запланированное к сборке" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Складские позиции" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Ревизии" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Общий запас" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Нераспределённый запас" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Запас вариантов" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Копировать начальные данные из другой детали" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Создавать деталь с начальным количеством на складе" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Информация о поставщике" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Добавить начальную информацию о поставщике для этой детали" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Имя файла существующего изображения детали" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Файл изображения не существует" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Проверить всю спецификацию" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Можно произвести" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Требуется для заказов на сборку" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Выделено для заказов на сборку" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Требуется для заказов на продажу" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Выделено для заказов на продажу" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "Внутренний артикул детали" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Описание детали" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Выберите деталь (и любые её варианты) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Выберите категорию (и любые её подкатегории) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Выберите склад, чтобы включить все детали в наличии в указанном складе (включая подразделы)" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "Создать записи инвентаризации" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "Сохранить записи инвентаризации для выбранных деталей" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "Создать отчёт инвентаризации для выбранных деталей" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Переопределить рассчитанное значение минимальной цены" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Валюта минимальной цены" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Переопределить рассчитанное значение максимальной цены" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Валюта максимальной цены" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Обновить цены для этой детали" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Не удалось конвертировать из предоставленных валют в {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Минимальная цена не должна превышать максимальную цену" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Максимальная цена не должна быть меньше минимальной" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Выберите родительскую сборку" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Выберите деталь, которая является компонентом" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Выберите деталь, из которой копировать спецификацию" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Удалить существующие данные" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Удалить существующие пункты спецификации перед копированием" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Включая наследуемые" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Включать пункты спецификации, унаследованные от шаблонных деталей" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Пропустить некорректные строки" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Включите эту опцию, чтобы пропускать недопустимые строки" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Копировать детали-заменители" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Копировать детали-заменители при дублировании пунктов спецификации" @@ -8288,7 +8292,7 @@ msgstr "Отчет тестирования складской позиции" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Установленные элементы" @@ -8361,7 +8365,7 @@ msgstr "Фильтровать по местоположениям верхне msgid "Include sub-locations in filtered results" msgstr "Включать подместоположения в отфильтрованные результаты" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Основной склад" @@ -8445,7 +8449,7 @@ msgstr "Дата истечения до" msgid "Expiry date after" msgstr "Дата истечения после" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Залежалый" @@ -8579,7 +8583,7 @@ msgstr "Необходимо указать деталь" msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" @@ -8624,7 +8628,7 @@ msgstr "Выберите соответствующего поставщика msgid "Where is this stock item located?" msgstr "Где находится эта складская позиция?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" @@ -8640,7 +8644,7 @@ msgstr "Установлен ли этот элемент в другой эле msgid "Serial number for this item" msgstr "Серийный номер для этого элемента" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" @@ -8753,7 +8757,7 @@ msgstr "Складская позиция в производстве" msgid "Serialized stock cannot be merged" msgstr "Серийные запасы нельзя объединить" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Дублирующие складские элементы" @@ -8877,7 +8881,7 @@ msgstr "Выберите деталь для генерации серийног msgid "Quantity of serial numbers to generate" msgstr "Количество серийных номеров для генерации" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Шаблон теста для этого результата" @@ -8901,222 +8905,222 @@ msgstr "Родительский элемент" msgid "Parent stock item" msgstr "Родительский складской элемент" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Использовать размер упаковки при добавлении: заданное количество — это количество упаковок" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Использовать размер упаковки" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Номер детали поставщика" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Просрочен" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Дочерние элементы" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Отслеживание элементов" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Введите количество складских позиций для сериализации" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Складской элемент не предоставлен" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Количество не должно превышать доступный запас ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Целевое место хранения" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Серийные номера не могут присваиваться данной детали" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Выберите складскую позицию для установки" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Количество для установки" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Введите количество элементов для установки" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Добавить запись к транзакции (необязательно)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Количество для установки должно быть не менее 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Складская позиция недоступна" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Количество для установки не должно превышать доступное количество" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Место назначения для демонтированного элемента" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Выберите деталь в которую будет преобразована складская позиция" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Выбранная деталь не является допустимым вариантом для преобразования" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Статус складской позиции" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Выберите складские позиции для изменения статуса" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Родительское местоположение запаса" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Деталь должна быть продаваемой" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Элемент распределён в заказ на продажу" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Заметки об объединении складских позиций" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Разрешить несоответствие поставщиков" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить объединение складских позиций с различными поставщиками" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Разрешить несоответствие статусов" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить объединение складских позиций с различными статусами" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Нет изменений" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Первичный ключ складского элемента" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Складской элемент отсутствует на складе" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Складской элемент уже на складе" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Количество не должно быть отрицательным" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Заметки об изменении склада" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Объединить с существующим запасом" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Объединять возвращённые элементы с существующими складскими элементами, если возможно" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Следующий серийный номер" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Предыдущий серийный номер" @@ -9598,99 +9602,99 @@ msgstr "Заказы на продажу" msgid "Return Orders" msgstr "Заказы на возврат" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Логин" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Имя" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Имя пользователя" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Фамилия" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Фамилия пользователя" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Адрес электронной почты пользователя" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Суперпользователь" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Это пользователь является суперпользователем" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Активна эта учетная запись" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Только суперпользователь может изменить это поле" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Пароль" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Пароль пользователя" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Игнорировать предупреждение" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Игнорировать предупреждение о правилах пароля" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "У вас нет разрешения на создание пользователей" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ваша учётная запись была успешно создана." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Пожалуйста, используйте функцию сброса пароля для входа" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Добро пожаловать в InvenTree" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 7434729026..4046cce3ab 100644 --- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -104,13 +104,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 00b3c3b084..f360e1829a 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -104,13 +104,13 @@ msgstr "Vnesi datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Zapiski" @@ -215,7 +215,7 @@ msgstr "Podani URL ni veljavna slikovna datoteka" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-pošta" @@ -336,51 +336,51 @@ msgstr "Zaznana napaka na strežniku." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Oddaljena slika" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Povezava do oddaljene slike" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Neobvezno" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaža" @@ -687,7 +687,7 @@ msgstr "Montaža" msgid "Tracked" msgstr "Sledi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testno" @@ -695,24 +695,24 @@ msgstr "Testno" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Dodeljeno" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Na voljo" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Nalog izgradnje" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referenca dobavnica" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokacija vira" @@ -861,16 +861,16 @@ msgstr "Status izgradnje" msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Datum ustvarjenja" @@ -964,7 +964,7 @@ msgstr "Nalog izgradnje {build} je dokončan" msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "Igradnja je že dokončana" msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})" msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Postavka zaloge" @@ -1099,378 +1099,378 @@ msgstr "Destinacija postavke zaloge" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Preklicano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Uporabnik" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivno" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Ime datoteke" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Uporabniško ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Ime uporabnika" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Priimek" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Priimek uporabnika" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Email uporabnika" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuporabnik" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ali je ta uporabnik superuporabnik" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ali je ta račun aktiven" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Vaš račun je bil ustvarjen." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Dobrodošli v InvenTree" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index d2b1ffc79e..7bea5a31c2 100644 --- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -104,13 +104,13 @@ msgstr "Unesite datum" msgid "Invalid decimal value" msgstr "Neispravna decimalna vrednost" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Napomene" @@ -215,7 +215,7 @@ msgstr "Navedeni URL nije važeća slikovna datoteka" msgid "Log in to the app" msgstr "Prijavljivanje na aplikaciju" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-Pošta" @@ -336,51 +336,51 @@ msgstr "Server je zabležio grešku." msgid "Image" msgstr "Slika" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Nevažeća vrednost" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Udaljena slika" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL udaljene slike" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Neuspešno preuzimanje slike sa udaljene URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Uključi varijante" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Uključi varijante" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Uključi varijante" msgid "Part" msgstr "Deo" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -669,16 +669,16 @@ msgstr "Ne uključuj stablo" msgid "Build must be cancelled before it can be deleted" msgstr "Proizvod mora biti poništen pre nego što se izbriše" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opciono" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Sklapanje" @@ -687,7 +687,7 @@ msgstr "Sklapanje" msgid "Tracked" msgstr "Praćeno" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Proverljivo" @@ -695,24 +695,24 @@ msgstr "Proverljivo" msgid "Order Outstanding" msgstr "Neizmirena narudžbina" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocirano" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupno" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Po narudžbini" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Nalog za izradu" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokacija" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Referenca naloga za prodaju" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokacija izvora" @@ -861,16 +861,16 @@ msgstr "Status izgradnje" msgid "Build status code" msgstr "Kod statusa izgradnje" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kod serije" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Kod izgradnje za ovaj izlaz" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "datum kreiranja" @@ -964,7 +964,7 @@ msgstr "Nalog za izgradnju {build} je kompletiran" msgid "A build order has been completed" msgstr "Nalog za izgradnju je kompletiran" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Za delove koji mogu da se prate moraju se dostaviri serijski brojevi" @@ -980,23 +980,23 @@ msgstr "Izlaz izgradnje je već kompletiran" msgid "Build output does not match Build Order" msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Količina mora biti veća od nule" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Količina ne sme da bude veća od izlazne količine" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove" @@ -1017,10 +1017,10 @@ msgstr "Stavka porudžbine naloga za izgradnju" msgid "Build object" msgstr "Objekat izgradnje" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Objekat izgradnje" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Alocirana količina ({q}) ne sme da bude veća od količine dostupnih za msgid "Stock item is over-allocated" msgstr "Stavka zaliha je prealocirana" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stavka zaliha" @@ -1099,378 +1099,378 @@ msgstr "Stavka zaliha odredišta" msgid "Build Level" msgstr "Nivo izgradnje" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Ime dela" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Izlaz izgradnje" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Izlaz izgradnje se ne slaže sa nadređenom izgradnjom" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Izlazni deo se ne slaže sa delom Naloga za Izgradnju" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Ovaj izlaz izgradnje je već kompletiran" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Ovaj izlaz izgradnje nije u potpunosti alociran" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Unesi količinu za izlaz izgradnje" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Brojčana količina potrebna za delove koji mogu da se prate" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Potrebna je brojčana količina, jer opis materijala sadrži delove koji se mogu pratiti" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serijski brojevi" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Unesi serijske brojeve za izlaz izgradnje" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Lokacija zaliha za izlaz izgradnje" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatski alociraj serijske brojeve" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Sledeći serijski brojevi već postoje ili su neispravni" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Lista izlaza izgradnje se mora obezbediti" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lokacija zaliha za otpisane izlaze" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Odbaci alokacije" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Odbaci bilo kojiu alokaciju zaliha za otpisane izlaze" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Razlog za otpisane izlaz(e) izgradnje" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Lokacija za završene izlaze izgradnje" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Prihvati nekompletirane Alokacije" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "kompletiraj izlaze ako zalihe nisu u potpunosti alocirane" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Troši alocirane zalihe" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Troši bilo koje zalihe koje su već alocirane za ovu izgradnju" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Ukloni nekompletirane izlaze" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Izbriši svei izlaze izgradnje koji nisu kompletirani" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nije dozvoljeno" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Prihvati kao potrošeno od strane ovog naloga za izgradnju" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Izmesti bre završetka ovog naloga za izgradnju" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Sveukupne izdvojene zalihe" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Šta želite da radite sa viškom stavki u zalihama koje su dodeljene nalogu za izgradnju?" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Neke stavke zaliha su prealocirane" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Prihvati nealocirano" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Prihvati da stavke zaliha nisu u potpunosti alocirane za ovaj nalog za izgradnju" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Tražene zalihe nisu u potpunosti alocirane" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Prihvati nekompletirano" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Prihvati da je traženi broj izlaza izgradnje nekompletan" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Traženi broj izgradnji nije kompletan" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Nalog za izgradnju ima otvoren potčinjene naloge za izgradnju" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Nalog za izgradnju mora biti u stanju produkcije" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Nalog za izgradnju ima nekompletne izlaze" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Porudžbina izgradnje" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Izlaz izgradnje" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Izlaz izgradnje mora da referencira istu izgradnju" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Stavka porudžbine za izradu" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part mora da se referencira istom delu kao u nalogu za izgradnju" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Stavka mora da bude u zalihama" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupna količina ({q}) premašena" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Izlaz izgradnje mora da određen za alokaciju praćenih delova" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Izlaz izgradnje ne može biti određen za alokaciju nepraćenih delova" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Stavke alociranja se moraju odrediti" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokacija zaliha koje će da budu izvor delova (ostavi prazno ukoliko uzimate sa bilo koje lokacije)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Isključi lokaciju" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Isključi stavke zaliha za ovu selektovanu lokaciju" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Zamenljive zalihe" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Stavke zaliha koje su na različitim lokacijama se mogu međusobno menjati" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Zamenske zalihe" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Dozvoli alociranje delova koji su zamenski" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Opcionalne stavke" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alociraj opcione BOM stavke na nalog za izgradnju" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referenca BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM ID dela" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "BOM ime dela" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Deo dobavljača" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Alocirana količina" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referenca izgradnje" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Ime kategorije dela" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Može da se prati" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM stavka" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "U proizvodnji" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Spoljašnje zalihe" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostupne zalihe" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Dostupne zamenske zalihe" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Dostupne varijante zaliha" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "Na čekanju" msgid "Cancelled" msgstr "Otkazano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Prekoračeni nalog za izgradnju" msgid "Build order {bo} is now overdue" msgstr "Nalog za izgradnju {bo} je sada prekoračen" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "je link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "je datoteka" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Korisnik nema potrebne dozvole da bi izbrisao ove atačmente" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Korisnik nema dozvolu da izbriše ovaj atačment" @@ -1550,7 +1550,7 @@ msgstr "Nisu obezbeđeni ispravni kodovi valuta" msgid "No plugin" msgstr "Nema dodataka" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Naziv koda projekta" @@ -1628,7 +1628,7 @@ msgstr "Korisnik" msgid "Price break quantity" msgstr "Prelomna količina cene" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1652,7 +1652,7 @@ msgstr "Ime ovog zahteva za izmenu stranice" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivan" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablon" @@ -2148,7 +2148,7 @@ msgstr "Šablon" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Podaci" @@ -2156,18 +2156,18 @@ msgstr "Podaci" msgid "Parameter Value" msgstr "Vrednost parametra" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Beleška" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Opciona beleška" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Ime datoteke" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Tip modela" @@ -2465,11 +2465,11 @@ msgstr "Tip modela" msgid "User does not have permission to create or edit attachments for this model" msgstr "Korisnik nema dozvolu da napravi ili izmeni priloge za ovaj model" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Lista odabira je zaključana" @@ -2859,8 +2859,8 @@ msgstr "Podrazumevano je da su delovi šabloni" msgid "Parts can be assembled from other components by default" msgstr "Podrazumevano je da se delovi mogu sastavljati od drugih komponenti" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponenta" @@ -3988,33 +3988,33 @@ msgstr "Deo je aktivan" msgid "Manufacturer is Active" msgstr "Proizvođač je aktivan" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Deo dobavljača je aktivan" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Interni deo je aktivan" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Dobavljač je aktivan" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Proizvođač" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Kompanija" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Ima zalihe" @@ -4195,7 +4195,7 @@ msgstr "Beleške o isporuci za internu upotrebu" msgid "Link to address information (external)" msgstr "Link za adresne informacije (eksterni)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Deo proizvođača" @@ -4213,12 +4213,12 @@ msgstr "Izaberi deo" msgid "Select manufacturer" msgstr "Izaberi proizvođača" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Broj dela proizvođača" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Broj dela proizvođača" @@ -4242,8 +4242,8 @@ msgstr "Jedinice pakovanja moraju biti veće od nule" msgid "Linked manufacturer part must reference the same base part" msgstr "Povezani delovi dobavljača moraju referencirati isti osnovni deo" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Dobavljač" msgid "Select supplier" msgstr "Izaberi dobavljača" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Jedinica za držanje dobavljačevih zaliha" @@ -4290,8 +4290,8 @@ msgstr "osnovni trošak" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Pakovanje" @@ -4339,14 +4339,18 @@ msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača" msgid "Company Name" msgstr "Naziv kompanije" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Na zalihama" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Kolona je već mapirana u polje u bazi podataka" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Polje je već mapirano u kolonu sa podacima" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Mapiranje kolona mora biti linkovano da bi se uvezla važeća sesija" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Kolona ne postoji u fajlu sa podacima" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Polje ne postoji u ciljnom modelu" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Izabrano polje je samo za čitanje" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Uvezi sesiju" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Polje" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Kolona" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Indeks vrsta" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Originalni podaci vrste" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Greške" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Važeće" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Nalog" msgid "Order Complete" msgstr "Nalog završen" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Interni deo" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ciljani datum" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Referenca naloga" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Primljeno" msgid "Number of items received" msgstr "Broj primljenih stavki" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Kupovna cena" @@ -5211,8 +5215,8 @@ msgstr "Provereno od strane" msgid "User who checked this shipment" msgstr "Korisnik koji je proverio ovu isporuku" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Isporuka" @@ -5277,7 +5281,7 @@ msgstr "Alocirana količina ne sme da pređe količinu zaliha" msgid "Allocation quantity must be greater than zero" msgstr "Količina alokacije mora da bude veća od nule" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Količina mora biti 1 za serijalizovane stavke sa zaliha" @@ -5393,7 +5397,7 @@ msgstr "Kopiraj dodatne porudžbine" msgid "Copy extra line items from the original order" msgstr "Kopiraj dodatne stavke porudžbine sa originalnog naloga" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopiraj parametre" @@ -5412,216 +5416,216 @@ msgstr "Stavke porudbžine" msgid "Completed Lines" msgstr "Završene porudbžine" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Dupliraj nalog" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Odredi opcije za dupliranje ovog naloga" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Nevažeći ID naloga" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Naziv dobavljača" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Nalog ne može biti otkazan" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Dozvoli da nalog bude zatvoren sa nepotpunim porudžbinama" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Nalog ima nepotpune stavke porudžbine" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Nalog nije otvoren" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatske cene" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatski izračunaj kupovnu cenu na osnovu podataka o delovima dobavljača" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta kupovne cene" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Spoj stavke" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Spoj stavke sa istim delom, odredištem i ciljanim datumom u jednu stavku porudžbine" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Interni broj dela" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interni naziv dela" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Deo dobavljača mora biti određen" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Nalog za kupovinu mora biti određen" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Nalog za kupovinu mora da se poklapa sa dobavljačem" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Stavka porudbžine" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Izaberi odredišnu lokaciju za primljene stavke" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Unesi šifru ture za nadolazeće stavke sa zaliha" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum isteka" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Unesi serijske brojeve za nadolazeće stavke sa zaliha" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Promeni informacije o pakovanju za nadolazeće stavke sa zaliha" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Dodatne beleške za nadolazeće stavke sa zaliha" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Bar kod" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skeniran bar kod" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Bar kod je već u upotrebi" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Stavke porudžbine moraju biti dostavljene" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Odredišna lokacija mora biti određena" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Isporuke" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Završene isporuke" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta prodajne cene" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Alocirane stavke" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nisu dostavljeni detalji isporuke" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Stavka porudžbine nije asocirana sa ovim nalogom" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Količina mora biti pozitivna" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Unesi serijske brojeve za alokaciju" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Isporuka je već isporučena" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Isporuka nije povezana sa ovim nalogom" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nema pronađenih poklapanja za sledeće serijske brojeve" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Sledeći serijski brojevi su nedostupni" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Stavka porudžbine naloga za vraćanje" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za vraćanje" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Stavka porudžbine je već primljena" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Stavke se mogu primiti samo na osnovu naloga koji su u toku" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Količina za vraćanje" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta cene porudžbine" @@ -5837,7 +5841,7 @@ msgstr "Podrazumevane ključne reči za delove ove kategorije" msgid "Icon" msgstr "Ikonica" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikonica (opciono)" @@ -5858,7 +5862,7 @@ msgstr "Podrazumevana vrednost" msgid "Default Parameter Value" msgstr "Podrazumevana vrednost parametra" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Delovi" @@ -5973,7 +5977,7 @@ msgstr "Ključne reči dela da bi se poboljšala vidljivost u rezultatima pretra msgid "Part category" msgstr "Kategorija dela" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interni broj dela" @@ -6006,7 +6010,7 @@ msgstr "Podrazumevani istek" msgid "Expiry time (in days) for stock items of this part" msgstr "Vreme isteka (u danima) za stavke sa zaliha ovog dela" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimalne zalihe" @@ -6487,355 +6491,355 @@ msgstr "Relacija između delova ne može biti kreirana između jednog istog dela msgid "Duplicate relationship already exists" msgstr "Identična veza već postoji" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Nadređena kategorija" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Nadređena kategorija dela" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Podkategorije" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Rezultati" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Broj rezultata napravljenih na osnovu ovog šablona" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Valuta kupovine za ovu stavku sa zaliha" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originalni deo" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Izaberi originalni deo za duplikaciju" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopiraj sliku" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopiraj sliku sa originalnog dela" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopiraj spisak materijala" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopiraj spisak materijala sa originalnog dela" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopiraj parametarske podatke sa originalnog dela" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopiraj beleške" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopiraj beleške sa originalnog dela" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Inicijalna količina zaliha" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Odredi inicijalnu količinu zaliha za ovaj deo. Ukoliko je količina nula, neće biti dodate zalihe." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Inicijalna lokacija zaliha" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Broj dela proizvođača" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Izabrana kompanija nije validan dobavljač" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Izabrana kompanija nije validan proizvođač" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Deo proizvođača koji se poklapa sa ovim brojem dela proizvođača već postoji" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Deo dobavljača koji se opklapa sa ovim brojem dela dobavljača već postoji" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Naziv kategorije" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Izrađivanje" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stavke sa zaliha" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revizije" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Ukupne zalihe" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nealocirane zalihe" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Varijante zaliha" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliraj deo" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopiraj inicijalne podatke od drugog dela" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Početne zalihe" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Kreiraj deo sa početnom količinom zaliha" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informacije o dobavljaču" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopiraj parametre kategorije" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Postojeća slika" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Ime fajla postojeće slike dela" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Fajl sa slikom ne postoji" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validiraj ceo spisak materijala" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Može se izgraditi" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimalna cena" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Izmeni izračunatu vrednost za minimalnu cenu" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimalna valuta cene" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maksimalna cena" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Izmeni izračunatu vrednost maksimalne cene" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maksimalna valuta cene" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Ažuriraj" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Ažuriraj cene za ovaj deo" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nija moguća konverzija iz dostavljen valute u {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimalna cena ne sme biti veća od maksimalne cene" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maksimalna cena ne sme biti manja od minimalne cene" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Izaberi nadređeni sklop" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Izaberi komponentu dela" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Izaberi deo sa kog će se kopirati spisak materijala" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Ukloni postojeće podatke" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Uključi nasleđeno" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Uključi stavke sa spiska materijala koje su nasleđene od šablonskih delova" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Preskoči nevažeće vrste" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopiraj zamenske delove" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala" @@ -8288,7 +8292,7 @@ msgstr "Izveštaj sa testa za stavku sa zaliha" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Instalirane stavke" @@ -8361,7 +8365,7 @@ msgstr "Filtriraj po nadređenim lokacijama" msgid "Include sub-locations in filtered results" msgstr "Uključi podlokacije u filtriranim rezultatima" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Nadređena lokacija" @@ -8445,7 +8449,7 @@ msgstr "Datum isteka pre" msgid "Expiry date after" msgstr "Datum isteka nakon" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Zastarelo" @@ -8579,7 +8583,7 @@ msgstr "Deo mora biti određen" msgid "Stock items cannot be located into structural stock locations!" msgstr "Stavka sa zaliha ne može biti locirana u strukturnim lokacijama zaliha!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Stavka sa zaliha ne može biti kreirana za virtuelne delove" @@ -8624,7 +8628,7 @@ msgstr "Izaberi odgovarajući deo dobavljača za ovu stavku sa zaliha" msgid "Where is this stock item located?" msgstr "Gde je locirana ova stavka sa zaliha?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Pakovanje u kom je ova stavka sa zaliha" @@ -8640,7 +8644,7 @@ msgstr "Da li je ova stavka instalirana u drugu stavku?" msgid "Serial number for this item" msgstr "Serijski broj za ovu stavku" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Šifra ture za ovu stavku sa zaliha" @@ -8753,7 +8757,7 @@ msgstr "Stavka sa zaliha je trenutno u produkciji" msgid "Serialized stock cannot be merged" msgstr "Serijalizovane zalihe se ne mogu spojiti" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Dupliraj stavke sa zaliha" @@ -8877,7 +8881,7 @@ msgstr "Izaberi deo za koji će se generisati serijski broj" msgid "Quantity of serial numbers to generate" msgstr "Količina serijskih brojeva koji će se generisati" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Test šablon za ovaj rezultat" @@ -8901,222 +8905,222 @@ msgstr "Nadređena stavka" msgid "Parent stock item" msgstr "Nadređena stavka sa zaliha" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Koristi pakovanja prilikom dodavanja: količina je definisana brojem pakovanja" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Unesi serijske brojeve za nove stavke" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Dobavljački broj dela" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Isteklo" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Podređene stavke" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Stavke za praćenje" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nabavna cena ove stavke, po jedinici ili pakovanju" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Unesi broj stavka sa zaliha za serijalizaciju" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Odredišna lokacija zaliha" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Serijski brojevi ne mogu biti dodeljeni ovom delu" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Serijski broj već postoji" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Izaberi stavku za instaliranje" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Količina za instaliranje" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Izaberi količinu stavki za instaliranje" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Dodaj beleške transakcija (opciono)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Količina za instaliranje mora biti najmanje 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Stavka je nedostupna" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Izabrani deo nije na spisku materijala" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Količina za instaliranje ne sme preći dostupnu količinu" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Odredišna lokacija za deinstalirane stavke" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Izaberi deo u koji će se konvertovati stavka" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Izabrani deo nije validna opcija za konverziju" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Ne može se konvertovati stavka sa dodeljenim delom dobavljača" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Statusni kod stavke sa zaliha" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Izaberi stavke kojoj će se promeniti status" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nije izabrana stavka" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Podlokacije" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Lokacija nadređenih zaliha" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Deo mora biti za prodaju" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Stavka je alocirana nalogu za prodaju" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Stavka je alocirana nalogu za izradu" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Mušterija kojoj će se dodeliti stavke sa zaliha" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Izabrana kompanija nije mušterija" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Beleške dodeljivanja zaliha" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Lista stavki mora biti dostavljena" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Beleške spajanja zaliha" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Dozvoli neslagajuće dobavljače" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Dozvoli spajanje stavki sa različitim delovima dobavljača" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Dozvoli neslagajući status" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Dozvoli spajanje stavki sa različitim statusnim kodovima" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Bar dve stavke moraju biti dostavljene" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Nema promena" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Vrednost primarnog ključa stavke" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Stavka nije na zalihama" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Beleške transakcija zaliha" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "Nalozi za prodaju" msgid "Return Orders" msgstr "Nalozi za vraćanje" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Korisničko ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Ime korisnika" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Prezime" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Prezime korisnika" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Adresa E-pošte korisnika" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super korisnik" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Da li je ovaj korisnik Super korisnik?" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Da li je nalog ovog korisnika aktivan?" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Vaš nalog je kreiran" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Molimo vas koristite opciju resetovanja lozinke da biste se prijavili" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Dobrodošli u InvenTree" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index 4f7b647b34..a6f5f51af4 100644 --- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -104,13 +104,13 @@ msgstr "Ange datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Anteckningar" @@ -215,7 +215,7 @@ msgstr "Angiven URL är inte en giltig bildfil" msgid "Log in to the app" msgstr "Logga in på appen" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-postadress" @@ -336,51 +336,51 @@ msgstr "Ett fel har loggats av servern." msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Fjärransluten bild" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL för fjärrbildsfil" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Inkludera varianter" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Inkludera varianter" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Inkludera varianter" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Tillverkningen måste avbrytas innan den kan tas bort" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valfri" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "Spårad" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testbar" @@ -695,24 +695,24 @@ msgstr "Testbar" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allokerad" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Konsumerad" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tillgänglig" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Byggorder" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Plats" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Tillverknings order referens" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Försäljningsorderreferens" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Källa Plats" @@ -861,16 +861,16 @@ msgstr "Tillverknings status" msgid "Build status code" msgstr "Tillverkning statuskod" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Skapad" @@ -964,7 +964,7 @@ msgstr "Tillverknings order {build} har slutförts" msgid "A build order has been completed" msgstr "En tillverknings order har slutförts" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "Byggutgång är redan slutförd" msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "Bygg objekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Bygg objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artikel i lager" @@ -1099,378 +1099,378 @@ msgstr "Destination lagervara" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Delnamn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Ange serienummer för att tillverkade produkter" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "En lista över tillverkade produkter måste anges" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lagerplats för skrotade produkter" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Ignorera alla lagerallokeringar för skrotade produkter" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Plats för färdiga produkter" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Slutför utfall om lager inte har tilldelats fullt ut" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Ta bort ofullständiga produkter" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Ta bort eventuella produkter som inte har slutförts" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Acceptera att det önskade antalet produkter som inte har slutförts" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Tillverknings ordern är ofullständig" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Spårbar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Avbruten" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Är länk" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Är fil" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Användare" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mall" @@ -2148,7 +2148,7 @@ msgstr "Mall" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" @@ -2156,18 +2156,18 @@ msgstr "Data" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Filnamn" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" @@ -2465,11 +2465,11 @@ msgstr "Modelltyp" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Tillverkare" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Företag" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "Välj del" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Leverantör" msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "Företagsnamn" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "I lager" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Fält" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Kolumn" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Radindex" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Fel" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Giltig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern del" @@ -4918,7 +4922,7 @@ msgstr "Startdatum" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldatum" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "Kontrollerad av" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopiera parametrar" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valfritt)" @@ -5858,7 +5862,7 @@ msgstr "Standardvärde" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Artiklar" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "Delkategori" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Resultat" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originaldel" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopiera bild" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Kopiera test" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategorinamn" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revisioner" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Hoppa över ogiltiga rader" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Ingen förändring" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Användarnamn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Förnamn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Förnamn på användaren" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Efternamn" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Efternamn på användaren" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Avsändarens E-postadress" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superanvändare" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Är den här användaren en superanvändare" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Är detta användarkonto aktivt" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Lösenord" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ditt konto har skapats." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Använd funktionen för lösenordsåterställning för att logga in" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Välkommen till InvenTree" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index f546f6c0c8..566654c435 100644 --- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -104,13 +104,13 @@ msgstr "ป้อนวันที่" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "หมายเหตุ" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "อีเมล" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,7 +687,7 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" @@ -695,24 +695,24 @@ msgstr "" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "สถานที่" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "ยกเลิกแล้ว" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "ผู้ใช้งาน" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "ชื่อไฟล์" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4213,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "สถานะ" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "ชิ้นส่วน" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "ยินดีต้อนรับเข้าสู่ Inventree" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index 34261b0039..eff0d927a4 100644 --- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -104,13 +104,13 @@ msgstr "Tarih giriniz" msgid "Invalid decimal value" msgstr "Geçersiz ondalık değer" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notlar" @@ -215,7 +215,7 @@ msgstr "Sağlanan URL geçerli bir görsel dosyası değil" msgid "Log in to the app" msgstr "Uygulamaya giriş yapın" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-posta" @@ -336,51 +336,51 @@ msgstr "Bir hafta sunucu tarafından kayıt edildi." msgid "Image" msgstr "Görsel" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Mevcut seçeneklerden para birimini seçin" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Bu alan boş olamaz." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Uzak Görsel" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Uzak görselin dosya URL'si" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Uzak URL'den görsel indirme etkin değil" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Uzak URL'den görsel indirilemedi" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Geçersiz içerik türü biçimi" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "İçerik türü bulunamadı" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "İçerik türü gerekli mixin sınıfı ile eşleşmemektedir" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "Varyantları Dahil Et" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "Varyantları Dahil Et" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "Varyantları Dahil Et" msgid "Part" msgstr "Parça" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,16 +669,16 @@ msgstr "Ağacı Hariç Tut" msgid "Build must be cancelled before it can be deleted" msgstr "Üretim silinemeden önce iptal edilmelidir" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "İsteğe Bağlı" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaj" @@ -687,7 +687,7 @@ msgstr "Montaj" msgid "Tracked" msgstr "İzlenen" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Test Edilebilir" @@ -695,24 +695,24 @@ msgstr "Test Edilebilir" msgid "Order Outstanding" msgstr "Sipariş Açık" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Tahsis Edildi" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Tüketildi" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Mevcut" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Siparişte" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Üretim Emri" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Konum" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Çıktı" @@ -783,7 +783,7 @@ msgstr "Hedef tarih başlangıç tarihinden sonra olmalıdır" msgid "Build Order Reference" msgstr "Üretim Emri Referansı" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Satış Emri Referansı" msgid "Sales Order to which this build is allocated" msgstr "Bu üretimin tahsis edildiği satış siparişi" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Kaynak Konum" @@ -861,16 +861,16 @@ msgstr "Üretim Durumu" msgid "Build status code" msgstr "Üretim durum kodu" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Bu üretim çıktısının parti kodu" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Oluşturulma tarihi" @@ -964,7 +964,7 @@ msgstr "{build} üretim emri tamamlandı" msgid "A build order has been completed" msgstr "Bir üretim emri tamamlandı" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır" @@ -980,23 +980,23 @@ msgstr "Üretim çıktısı zaten tamamlanmış" msgid "Build output does not match Build Order" msgstr "Üretim çıktısı, üretim emri ile eşleşmiyor" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Miktar sıfırdan büyük olmalıdır" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Miktar çıktı miktarından büyük olamaz" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Üretim çıktısı tüm gerekli testleri geçmedi" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "{serial} üretim çıktısı gerekli testleri geçmedi" @@ -1017,10 +1017,10 @@ msgstr "Üretim Emri Satırı" msgid "Build object" msgstr "Üretim nesnesi" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Üretim nesnesi" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Tahsis edilen miktar ({q}) mevcut stok miktarını ({a}) aşmamalıdır" msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stok Kalemi" @@ -1099,378 +1099,378 @@ msgstr "Hedef stok kalemi" msgid "Build Level" msgstr "Üretim Seviyesi" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Parça Adı" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Üretim Çıktısı" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Üretim çıktısı üst üretim ile eşleşmiyor" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Çıktı parçası üretim emri parçası ile eşleşmiyor" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Bu üretim çıktısı zaten tamamlandı" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Bu üretim çıktısı tam tahsis edilmedi" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Üretim çıktısının miktarını girin" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "İzlenebilir parçalar için tamsayı miktar gerekir" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ürün ağacı izlenebilir parçalar içerdiğinden tamsayı miktar gereklidir" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Üretim çıktıları için seri numaraları girin" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Üretim çıktısı için stok konumu" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Seri Numaralarını Otomatik Tahsis Et" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Eşleşen seri numaralı gerekli kalemleri otomatik tahsis et" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Şu seri numaraları zaten varlar veya geçersizler" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Bir üretim çıktıları listesi sağlanmalıdır" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için stok konumu" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Ayırmaları İptal Et" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için yapılan tüm stok ayırmalarını iptal et" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Üretim çıktı(larını) hurdaya ayırma nedeni" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Tamamlanan üretim çıktıları içi konum" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Tamamlanmamış Ayırmayı Onayla" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Stok henüz tamamen tahsis edilmemşse çıktıları tamamla" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Tahsis Edilen Stoku Tüket" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Bu üretim için zaten tahsis edilmiş olan tüm stokları tüket" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Tamamlanmamış Çıktıları Kaldır" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Henüz tamamlanmamış tüm üretim çıktılarını sil" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "İzin verilmedi" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Bu üretim emri tarafından tüketildi olarak kabul et" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Bu üretim emrini tamamlamadan önce tahsisi kaldır" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Aşırı Tahsis Edilmiş Stok" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Üretim emrine atanan ek stok kalemlerini nasıl işlemek istersiniz" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Bazı stok kalemleri aşırı tahsis edilmiştir" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Tahsis Edilmeyeni Kabul Et" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Stok kalemlerinin bu üretim emrine tamamen tahsis edilmediğini kabul et" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Tamamlanmamış Kabul et" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Gereken miktarda üretim çıktısının tamamlanmadığını kabul et" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Gereken üretim miktarı tamamlanmadı" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Üretim emrinin açık alt üretim emirleri var" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Üretim emri üretim durumunda olmalıdır" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Üretim emrinde eksik çıktılar var" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Üretim Satırı" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Üretim çıktısı" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Üretim çıktısı aynı üretimi göstermelidir" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Üretim Satırı" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part üretim emri ile aynı parçayı göstermelidir" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Kalem stokta olmalıdır" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Mevcut miktar ({q}) aşıldı" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "İzlenen parçaların tahsisi için üretim çıktısı belirtilmelidir" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "İzlenmeyen parçaların tahsisi için üretim çıktısı belirtilemez" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Ayrılma ögeleri sağlanmalıdır" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Parçaların alınacağı stok konumu (herhangi bir konumdan almak için boş bırakın)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Konumu Hariç Tut" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Bu seçilen konumdan stok kalemlerini hariç tut" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Birbirinin Yerine Kullanılabilir Stok" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Birden fazla konumdaki stok kalemleri birbirinin yerine kullanılabilir" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Yedek Stok" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Yedek parçaların ayrılmasına izin ver" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "İsteğe Bağlı Ögeler" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "İsteğe bağlı BOM kalemlerini üretim emrine tahsis et" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Tüm Ögeler" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Takip edilmeyen kalemler" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Takipli Kalemler" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Kalem Türü" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Otomatik tahsis edilecek ürün tipini seçin" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "ML Referansı" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM Parça ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "ML Parça Adı" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Kur" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Yap" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Tedarikçi Parçası" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tahsis Edilen Miktar" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Üretim Referansı" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Parça Kategorisi Adı" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Takip Edilebilir" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Devralınmış" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "ML Ögesi" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Üretimde" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Üretim için Planlandı" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Harici Stok" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Mevcut Stok" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Mevcut Yedek Stok" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Mevcut Varyant Stok" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Tüketilen miktar tahsis edilen miktarı aşıyor" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Stok tüketimi için isteğe bağlı notlar" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Üretim kalemi doğru üretim emrini göstermelidir" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Üretim kalemi tahsisini yinele" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Üretim satırı doğru üretim emrini göstermelidir" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Üretim satırı tahsisini yinele" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "En az bir kalem veya satır sağlanmalıdır" @@ -1494,7 +1494,7 @@ msgstr "Beklemede" msgid "Cancelled" msgstr "İptal edildi" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Geciken Üretim Emri" msgid "Build order {bo} is now overdue" msgstr "{bo} üretim emri şimdi gecikti" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Link Olanlar" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Dosya Olanlar" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Kullanıcının bu ekleri silmek için izni yok" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Kullanıcının bu eki silmek için izni yok" @@ -1550,7 +1550,7 @@ msgstr "Geçerli bir para birimi kodu sağlanmamış" msgid "No plugin" msgstr "Eklenti yok" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Proje Kodu Etiketi" @@ -1628,7 +1628,7 @@ msgstr "Kullanıcı" msgid "Price break quantity" msgstr "Fiyat kademesi miktarı" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Fiyat" @@ -1652,7 +1652,7 @@ msgstr "Bu web kancası için ad" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" @@ -2126,7 +2126,7 @@ msgstr "Parametreler" msgid "Invalid choice for parameter value" msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "Parametre için belirtilen model türü geçersiz" @@ -2140,7 +2140,7 @@ msgstr "Bu parametre için hedef modelin ID'si" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Şablon" @@ -2148,7 +2148,7 @@ msgstr "Şablon" msgid "Parameter template" msgstr "Parametre şablonu" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Veri" @@ -2156,18 +2156,18 @@ msgstr "Veri" msgid "Parameter Value" msgstr "Parametre Değeri" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Not" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "İsteğe bağlı not alanı" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Dosya adı" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Model Tipi" @@ -2465,11 +2465,11 @@ msgstr "Model Tipi" msgid "User does not have permission to create or edit attachments for this model" msgstr "Kullanıcının bu model için ek oluşturma veya düzenleme izni yok" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "Kullanıcı bu model için parametre oluşturma veya düzenleme iznine sahip değil" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "Seçim listesi kilitli" @@ -2859,8 +2859,8 @@ msgstr "Parçaları varsayılan olan şablondur" msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Bileşen" @@ -3988,33 +3988,33 @@ msgstr "Parça Aktif" msgid "Manufacturer is Active" msgstr "Üretici Aktif" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Tedarikçi Parçası Aktif" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Ana Tedarikçi Parçası" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Dahili Parça Aktif" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Tedarikçi Aktif" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Üretici" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Şirket" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Stoku Var" @@ -4195,7 +4195,7 @@ msgstr "Dahili kullanım için sevkiyat notları" msgid "Link to address information (external)" msgstr "Adres bilgisine bağlantı (harici)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Üretici Parçası" @@ -4213,12 +4213,12 @@ msgstr "Parça seçin" msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "ÜPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Üretici Parça Numarası" @@ -4242,8 +4242,8 @@ msgstr "Paket birimleri sıfırdan büyük olmalıdır" msgid "Linked manufacturer part must reference the same base part" msgstr "Bağlantılı üretici parçası aynı temel parçayı referans almalıdır" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Tedarikçi" msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Tedarikçi stok kodu" @@ -4290,8 +4290,8 @@ msgstr "temel maliyet" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum ücret (örneğin stoklama ücreti)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Paketleme" @@ -4339,14 +4339,18 @@ msgstr "Bu tedarikçi için kullanılan varsayılan para birimi" msgid "Company Name" msgstr "Şirket Adı" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Stokta" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Fiyat Kademeleri" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Veri dışa aktarma sırasında hata oluştu" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Kayıt için mevcut veritabanı tanımlayıcısı" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Sütun zaten bir veritabanı alanına eşlenmiştir" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Alan zaten bir veri sütununa eşlenmiştir" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Sütun eşlemesi geçerli bir içe aktarma oturumuna bağlanmalıdır" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Sütun veri dosyasında bulunmuyor" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Alan hedef modelde bulunmuyor" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Seçilen alan salt okunurdur" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Oturumu İçe Aktar" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Alan" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Sütun" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Satır İndeksi" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Orijinal satır verisi" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Hatalar" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Geçerli" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "Mevcut kayıtları güncellemek için ID gereklidir." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Sağlanan ID ile kayıt bulunamadı" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Sağlanan ID biçimi geçersiz" @@ -4821,7 +4825,7 @@ msgstr "Sipariş" msgid "Order Complete" msgstr "Sipariş Tamamlandı" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Dahili Parça" @@ -4918,7 +4922,7 @@ msgstr "Başlangıç ​​tarihi" msgid "Scheduled start date for this order" msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Hedeflenen tarih" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Sipariş referansı" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Durum" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Teslim Alındı" msgid "Number of items received" msgstr "Teslim alınan miktar" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Alış Fiyatı" @@ -5211,8 +5215,8 @@ msgstr "Kontrol Eden" msgid "User who checked this shipment" msgstr "Bu sevkiyatı kontrol eden kullanıcılar" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sevkiyat" @@ -5277,7 +5281,7 @@ msgstr "Tahsis miktarı stok miktarını aşamaz" msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar 1 olmalıdır" @@ -5393,7 +5397,7 @@ msgstr "Ek Kalemleri Kopyala" msgid "Copy extra line items from the original order" msgstr "Orijinal siparişten ek kalemleri kopyala" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Parametreleri Kopyala" @@ -5412,216 +5416,216 @@ msgstr "Satırlar" msgid "Completed Lines" msgstr "Tamamlanan Satırlar" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Siparişin Kopyasını Oluştur" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Bu siparişin kopyasını oluşturmak için seçenekleri belirtin" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Geçersiz sipariş ID" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tedarikçi Adı" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Sipariş iptal edilemez" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Satır eksiği olan siparişin kapatılmasına izin ver" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Siparişin eksik satırları var" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Sipariş açık değil" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Otomatik Fiyatlandırma" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Tedarikçi parça verilerine göre satın alma fiyatını otomatik olarak hesapla" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Satın alma fiyatı para birimi" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Kalemleri Birleştir" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Aynı parça, hedef ve hedef tarihe sahip kalemleri tek bir satırda birleştir" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Dahili Parça Numarası" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Dahili Parça Adı" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Tedarikçi parçası belirtilmeli" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Satın alma siparişi belirtilmeli" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Tedarikçi satın alma siparişi ile eşleşmelidir" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Satın alma siparişi tedarikçi ile eşleşmelidir" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Satır" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Teslim alınan kalemler için varış konumunu seçin" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Gelen stok kalemleri için parti numarası girin" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Son Kullanma Tarihi" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Gelen stok kalemleri için son kullanma tarihi girin" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Gelen stok kalemlerinin seri numaralarını girin" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Gelen stok kalemlerinin paketleme bilgilerini geçersiz kıl" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Gelen stok kalemleri için ek not" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barkod" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Taranan barkod" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Barkod zaten kullanımda" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Satırlar sağlanmalıdır" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Hedef konum belirtilmelidir" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Sağlanan barkod değerleri benzersiz olmalıdır" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Sevkiyatlar" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Tamamlanan Sevkiyatlar" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Satış para birimi" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Sevkiyat bilgileri sağlanmadı" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Ürün kalemi bu siparişle ilişkilendirilmemiştir" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Miktar pozitif olmalıdır" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Tahsis edilecek seri numaralarını girin" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Sevkiyat zaten sevk edildi" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Sevkiyat bu sipariş ile ilişkilendirilmemiştir" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Şu seri numaraları için bir eşleşme bulunamadı" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Şu seri numaraları mevcut değildir" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "İade siparişi kalemi" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Ürün kalemi iade siparişi ile eşleşmiyor" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Ürün kalemi zaten teslim alındı" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Ürün kalemleri yalnızca işlemdeki siparişlere istinaden teslim alınabilir" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "İade olacak miktar" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Satır para birimi" @@ -5837,7 +5841,7 @@ msgstr "Bu kategoridaki parçalar için varsayılan anahtar kelimeler" msgid "Icon" msgstr "Simge" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Simge (isteğe bağlı)" @@ -5858,7 +5862,7 @@ msgstr "Varsayılan Değer" msgid "Default Parameter Value" msgstr "Varsayılan Parametre Değeri" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Parçalar" @@ -5973,7 +5977,7 @@ msgstr "Arama sonuçlarında görünürlüğü artırmak için parça anahtar ke msgid "Part category" msgstr "Parça kategorisi" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "DPN" @@ -6006,7 +6010,7 @@ msgstr "Varsayılan Son Kullanma" msgid "Expiry time (in days) for stock items of this part" msgstr "Bu parçanın stok kalemleri için son kullanma süresi (gün olarak)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimum Stok" @@ -6487,355 +6491,355 @@ msgstr "Bir parça ile kendisi arasında parça ilişkisi oluşturulamaz" msgid "Duplicate relationship already exists" msgstr "Kopyalanan ilişki zaten mevcut" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Üst Kategori" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Üst parça kategorisi" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Sonuçlar" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Bu şablon ile ilişkilendirilmiş sonuç sayısı" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Bu stok kaleminin alış para birimi" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Dosya bir görsel değil" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Orijinal Parça" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Kopyalanacak orijinal parçayı seçin" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Görseli Kopyala" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Orijinal parçadan görseli kopyala" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "BOM'u Kopyala" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Orijinal parçadan ürün ağacını kopyala" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Orijinal parçadan parametreleri kopyala" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Notları Kopyala" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Orijinal parçadan notları kopyala" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Testleri Kopyala" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Orijinal parçadan test şablonlarını kopyala" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Başlangıç Stok Miktarı" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Bu parça için başlangıç stok miktarını belirtin. Miktar sıfır ise, stok eklenmez." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Başlangıç Stok Konumu" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Bu parça için başlangıç stok konumunu belirtin" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Tedarikçiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Üreticiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Üretici parça numarası" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Seçilen şirket geçerli bir tedarikçi değildir" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Seçilen şirket geçerli bir üretici değildir" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Bu MPN ile eşleşen üretici parçası zaten mevcut" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Bu SKU ile tedarikçi parçası zaten mevcut" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategori Adı" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Üretiliyor" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Bu parçanın şu anda üretimde olan miktarı" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Bu parçanın üretilmesi planlanan açık miktarı" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stok Kalemleri" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revizyonlar" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Toplam Stok" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Tahsis Edilmemiş Stok" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Varyant Stoku" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Parçanın Kopyasını Oluştur" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Başlangıç verisini diğer parçadan kopyala" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Başlangıç Stoku" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Başlangıç stok miktarı ile parça oluştur" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Tedarikçi Bilgileri" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Bu parça için ilk tedarikçi bilgilerini ekleyin" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kategori Parametrelerini Kopyala" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Seçilen parça kategorisinden parametre şablonlarını kopyala" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Mevcut Görsel" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Mevcut parça görselinin dosya adı" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Görsel dosyası mevcut değil" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Tüm ürün ağacını doğrula" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Üretebilir Miktar" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Üretim Emirleri için Gerekli" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Üretim Emirlerine Tahsis Edildi" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Satış Siparişleri için Gerekli" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Satış Siparişlerine Tahsis Edildi" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "Parça DPN" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Parça Açıklaması" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Stok sayımı bilgisi oluşturmak üzere bir parça (ve varsa varyantlarını) seçin" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Kategorideki (ve alt kategorilerdeki) tüm parçaları dahil etmek için bir kategori seçin" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Konumda (ve alt konumlarda) stoğu bulunan tüm parçaları dahil etmek için bir konum seçin" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "Stok Sayımı Kayıtları Oluşturun" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "Seçili parçalar için stok sayımı girdilerini kaydedin" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Rapor Oluştur" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "Seçili parçalar için stok sayımı raporu oluşturun" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimum Fiyat" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Minimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimum fiyat para birimi" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maksimum Fiyat" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Maksimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maksimum fiyat para birimi" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Güncelle" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Bu parçanın fiyatlandırmasını güncelle" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Sağlanan para birimlerinden {default_currency} para birimine dönüştürülemedi" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimum fiyat maksimum fiyattan yüksek olamaz" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maksimum fiyat minimum fiyattan düşük olamaz" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "Miktar sıfır veya daha büyük olmalıdır" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Üst montajı seçin" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Bileşeni seçin" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "BOM'u kopyalanacak parçayı seçin" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Mevcut Verileri Temizle" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Kopyalamadan önce mevcut BOM kalemlerini temizle" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Devralınanı Dahil Et" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Şablon parçalardan devralınan BOM kalemlerini dahil et" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Geçersiz Satırları Atla" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Geçersiz satırları atlamak için bu seçeneği etkinleştir" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Muadil Parçaları Kopyala" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOM kalemlerinin kopyasını oluştururken muadil parçaları kopyala" @@ -8288,7 +8292,7 @@ msgstr "Stok Kalemi Test Raporu" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Takılı Kalemler" @@ -8361,7 +8365,7 @@ msgstr "Üst seviye konumlara göre filtrele" msgid "Include sub-locations in filtered results" msgstr "Filtrelenmiş sonuçlara alt konumları dahil et" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Üst Konum" @@ -8445,7 +8449,7 @@ msgstr "Son kullanma tarihi öncesi" msgid "Expiry date after" msgstr "Son kullanma tarihi sonrası" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Bozuk" @@ -8579,7 +8583,7 @@ msgstr "Parça belirtilmelidir" msgid "Stock items cannot be located into structural stock locations!" msgstr "Stok kalemleri yapısal stok konumlarına yerleştirilemez!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Sanal parçalar için stok kalemi oluşturulamaz" @@ -8624,7 +8628,7 @@ msgstr "Bu stok kalemiyle eşleşen bir tedarikçi parçası seçin" msgid "Where is this stock item located?" msgstr "Bu stok kalemi nerede bulunur?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Bu stok kaleminin ambalajı şu şekilde saklanmaktadır" @@ -8640,7 +8644,7 @@ msgstr "Bu öge başka bir ögeye takılı mı?" msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Bu stok kalemine ait parti kodu" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Tedarikçi Parça Numarası" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Bu parçaya seri numarası atanamaz" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Takılacak stok kalemini seçin" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Miktar" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Takılacak kalemlerin miktarını girin" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Miktar en az \"1\" olmalıdır" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Stok kalemi mevcut değil" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Seçilen parça malzeme listesinde bulunamadı" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Takılacak miktar, mevcudu geçmemeli" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Sökülen ürün için hedef konum" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Stok kaleminin dönüştürüleceği parçayı seçin" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Seçilen parça dönüştürülmeye uygun değil" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Tedarikçi parçası atanmış stok kalemi dönüştürülemez" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Stok kalemi durum kodu" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Durumu değiştirilecek stok kalemlerini seçin" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Hiçbir stok kalemi seçilmedi" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Üst stok konumu" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Parça satılabilir olmalıdır" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Ürün bir satış siparişine tahsis edilmiştir" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Ürün bir üretim emrine tahsis edilmiştir" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Stok kalemlerini atamak için müşteri" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Seçilen şirket bir müşteri değil" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Stok tahsis notları" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Bir stok kalemleri listesi girilmelidir" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Stok birleştirme notları" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Farklı tedarikçilere izin ver" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Farklı tedarikçi parçalarına sahip stokları birleştirmeye izin ver" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Farklı durumlara sahip kalemlere izin ver" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Farklı durum kodlarına sahip stokları birleştirmeye izin ver" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "En az iki stok kalemi girilmelidir" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Değişiklik Yok" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Stok Kalemi birincil anahtar (PK) değeri" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Stok kalemi mevcut stokta yok" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Stok kalemi zaten stokta" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Miktar negatif olamaz" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Stok aktarım notları" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Mevcut stokla birleştir" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Mümkünse iade edilen ürünleri mevcut stoklarla birleştir" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Sıradaki Seri Numarası" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Önceki Seri Numarası" @@ -9598,99 +9602,99 @@ msgstr "Satış Siparişleri" msgid "Return Orders" msgstr "İade Emirleri" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Kullanıcı Adı" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Adı" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Kullanıcının adı" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Soyadı" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Kullanıcının soyadı" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Kullanıcının e-posta adresi" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Süper Kullanıcı" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Bu kullanıcı bir süper kullanıcı mı" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Bu kullanıcı hesabı aktif mi" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Bu alanı sadece bir yönetici değiştirebilir" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Parola" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Kullanıcının parolası" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Uyarıları yok say" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Şifre kuralları uyarılarını yok say" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Kullanıcı yaratmak için yetkiniz yok" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Kullanıcı hesabınız oluşturulmuştur." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "InvenTree'ye Hoşgeldiniz" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index 57d358071c..47ab3153f3 100644 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -104,13 +104,13 @@ msgstr "Введіть дату" msgid "Invalid decimal value" msgstr "Неправильне десяткове значення" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Нотатки" @@ -215,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "Авторизуватися в додатку" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Електронна пошта" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Зображення" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Збірка" @@ -687,7 +687,7 @@ msgstr "Збірка" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Тестуємо" @@ -695,24 +695,24 @@ msgstr "Тестуємо" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Місце" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -964,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -980,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1017,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1099,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "У виробництві" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1628,7 +1628,7 @@ msgstr "Користувач" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Ціна" @@ -1652,7 +1652,7 @@ msgstr "" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" @@ -2148,7 +2148,7 @@ msgstr "Шаблон" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Дані" @@ -2156,18 +2156,18 @@ msgstr "Дані" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Примітка" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Компонент" @@ -3988,33 +3988,33 @@ msgstr "Позиція активна" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Позиція постачальника активна" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Внутрішня позиція активна" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Виробник" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Позиція виробника" @@ -4213,12 +4213,12 @@ msgstr "Обрати позицію" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4242,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,8 +4290,8 @@ msgstr "Базова вартість" msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4339,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "В наявності" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Дійсно" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Внутрішній компонент" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5215,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5277,7 +5281,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5412,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5837,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5858,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Позиції" @@ -5973,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Мінімальний запас" @@ -6487,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Результати" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Виробничий номер позиції" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Початковий запас" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Наявне зображення" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Мінімальна ціна" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Максимальна ціна" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -8288,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8624,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8640,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8753,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Ім`я" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Прізвище" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Адреса електронної пошти користувача" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 26a4ab41d5..6cbee1047a 100644 --- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -104,13 +104,13 @@ msgstr "Nhập ngày" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Ghi chú" @@ -215,7 +215,7 @@ msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -336,51 +336,51 @@ msgstr "Lỗi đã được ghi lại bởi máy chủ." msgid "Image" msgstr "Hình ảnh" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Giá trị không hợp lệ" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Hình ảnh từ xa" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL của tệp hình ảnh bên ngoài" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 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:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Nguyên liệu" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Danh mục" @@ -669,16 +669,16 @@ msgstr "" 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" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Lắp ráp" @@ -687,7 +687,7 @@ msgstr "Lắp ráp" msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Có thể kiểm tra" @@ -695,24 +695,24 @@ msgstr "Có thể kiểm tra" msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Đã dùng" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Có sẵn" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Bật đơn hàng" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Địa điểm" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -783,7 +783,7 @@ msgstr "" msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "Tham chiếu đơn đặt bản dựng" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Địa điểm nguồn" @@ -861,16 +861,16 @@ msgstr "Trnạg thái bản dựng" msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Ngày tạo" @@ -964,7 +964,7 @@ msgstr "Đơn đặt bản dựng {build} đã được hoàn thành" msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Số sê-ri phải được cung cấp cho hàng hoá có thể theo dõi" @@ -980,23 +980,23 @@ msgstr "Đầu ra bản dựng đã được hoàn thiện" msgid "Build output does not match Build Order" msgstr "Đầu ra bản dựng không phù hợp với đơn đặt bản dựng" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Số lượng không thể lớn hơn số lượng đầu ra" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Tạo đầu ra {serial} chưa vượt qua tất cả các bài kiểm tra" @@ -1017,10 +1017,10 @@ msgstr "Tạo mục đơn hàng" msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "Dựng đối tượng" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "Số lượng được phân bổ ({q}) không thể vượt quá số l msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Kho hàng" @@ -1099,378 +1099,378 @@ msgstr "Kho hàng đích" msgid "Build Level" msgstr "Tạo cấp" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Tên sản phẩm" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Đầu ra xây dựng không hợp với bản dựng cha" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Đầu ra sản phẩm không phù hợp với bản dựng đơn đặt hàng" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Đầu ra bản dựng này đã được hoàn thành" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Đầu ra bản dựng này chưa được phân bổ đầy đủ" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Số lượng nguyên dương cần phải điền cho sản phẩm có thể theo dõi" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cần nhập số lượng nguyên dương, bởi vì hóa đơn vật liệu chứa sản phẩm có thể theo dõi" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Nhập vào số sêri cho đầu ra bản dựng" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Vị trí tồn kho cho sản phẩm" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Tự động cấp số seri phù hợp cho hàng hóa được yêu cầu" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Danh sách đầu ra bản dựng phải được cung cấp" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hủy bất kỳ phân kho nào cho đầu ra phế phẩm" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Hoàn hiện đầu ra nếu kho chưa được phân bổ hết chỗ trống" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Xử lý phân bổ kho hàng" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Tiêu thụ bất kỳ hàng tồn kho nào đã được phân bổ cho dự án này." -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Xóa bất kỳ đầu ra bản dựng nào chưa được hoàn thành" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Chấp nhận trạng thái tiêu hao bởi đơn đặt bản dựng này" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Phân bổ trước khi hoàn thiện đơn đặt bản dựng này" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Bạn muốn thế nào để xử lý hàng trong kho được gán thừa cho đơn đặt bản dựng" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Một vài hàng hóa đã được phân bổ quá thừa" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Chấp nhận hàng hóa không được phân bổ đầy đủ vào đơn đặt bản dựng này" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Kho được yêu cầu chưa được phân bổ hết không gian" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Chấp nhận số yêu cầu của đầu ra bản dựng chưa được hoàn thành" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Số lượng bản dựng được yêu cầu chưa được hoàn thành" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Tạo đơn hàng có các đơn hàng đang mở" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Tạo đơn hàng phải ở trạng thái sản xuất." -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Đơn đặt bản dựng có đầu ra chưa hoàn thiện" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Đầu ra bản dựng phải chỉ đến bản dựng tương ứng" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part phải trỏ đến phần tương tự của đơn đặt bản dựng" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Đầu ra bản dựng phải được xác định cho việc phân sản phẩm được theo dõi" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Đầu ra bản dựng không thể chỉ định cho việc phân sản phẩm chưa được theo dõi" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Vị trí kho nơi sản phẩm được lấy ra (để trống để lấy từ bất kỳ vị trí nào)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Không bao gồm hàng trong kho từ vị trí đã chọn này" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Hàng trong kho thuộc nhiều vị trí có thể dùng thay thế được cho nhau" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Phân bổ các mục hóa đơn vật liệu tùy chọn đến đơn đặt bản dựng" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM liên quan" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID hàng hoá BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Tên hàng hoá BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Sản phẩm nhà cung cấp" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Số lượng đã phân bổ" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Tạo liên quan" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Tên danh mục hàng hoá" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Có thể theo dõi" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Kho ngoài" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Kho hàng thay thế" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Hàng tồn kho có sẵn" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1494,7 +1494,7 @@ msgstr "Chờ" msgid "Cancelled" msgstr "Đã hủy" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "Đơn đặt bản dựng quá hạn" msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Đường dẫn" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "File" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Không có quyền xoá file đính kèm" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Không có quyền xoá file đính kèm" @@ -1550,7 +1550,7 @@ msgstr "Mã tiền tệ không đúng" msgid "No plugin" msgstr "Không phần mở rộng" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Nhãn mã dự án" @@ -1628,7 +1628,7 @@ msgstr "Người dùng" msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Giá" @@ -1652,7 +1652,7 @@ msgstr "Tên của webhook này" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Hoạt động" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mẫu" @@ -2148,7 +2148,7 @@ msgstr "Mẫu" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dữ liệu" @@ -2156,18 +2156,18 @@ msgstr "Dữ liệu" msgid "Parameter Value" msgstr "Giá trị tham số" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Ghi chú" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "Tên tập tin" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2465,11 +2465,11 @@ msgstr "" msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "" @@ -2859,8 +2859,8 @@ msgstr "Sản phẩm là mẫu bởi mặc định" msgid "Parts can be assembled from other components by default" msgstr "Sản phẩm có thể lắp giáp từ thành phần khác theo mặc định" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Thành phần" @@ -3988,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Nhà sản xuất" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Doanh nghiêp" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4195,7 @@ msgstr "Ghi chú nội bộ sử dụng cho chuyển phát nhanh" msgid "Link to address information (external)" msgstr "Liên kết thông tin địa chỉ (bên ngoài)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" @@ -4213,12 +4213,12 @@ msgstr "Chọn sản phẩm" msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Mã số nhà sản xuất" @@ -4242,8 +4242,8 @@ msgstr "Đơn vị đóng gói phải lớn hơn không" msgid "Linked manufacturer part must reference the same base part" msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu với sản phẩm cơ bản tương tự" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "Nhà cung cấp" msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" @@ -4290,8 +4290,8 @@ msgstr "chi phí cơ sở" msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Đóng gói" @@ -4339,14 +4339,18 @@ msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Còn hàng" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4451,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Hợp lệ" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "Đặt hàng" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Sản phẩm nội bộ" @@ -4918,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ngày mục tiêu" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "Mã đặt hàng" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Trạng thái" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "Đã nhận" msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Giá mua" @@ -5211,8 +5215,8 @@ msgstr "Kiểm tra bởi" msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Vận chuyển" @@ -5277,7 +5281,7 @@ msgstr "Số lượng phân bổ không thể vượt quá số lượng của k msgid "Allocation quantity must be greater than zero" msgstr "Số lượng phân bổ phải lớn hơn 0" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Số lượng phải là 1 cho hàng hóa sêri" @@ -5393,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Sao chép thông số" @@ -5412,216 +5416,216 @@ msgstr "Mục dòng" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Cho phép đơn đặt phải đóng lại cùng với các mục dòng hàng hóa chưa hoàn thành" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Đơn đặt có dòng hàng hóa chưa hoàn thành" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Dòng hàng hóa chưa được gắn với đơn đặt này" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Vận đơn không được gắn với đơn đặt này" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Line item không phù hợp với đơn hàng trả lại" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Hàng hóa chỉ có thể được nhận theo đơn hàng đang trong tiến trình" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" @@ -5837,7 +5841,7 @@ msgstr "Từ khóa mặc định cho sản phẩm trong danh mục này" msgid "Icon" msgstr "Biểu tượng" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" @@ -5858,7 +5862,7 @@ msgstr "Giá trị mặc định" msgid "Default Parameter Value" msgstr "Giá trị tham số mặc định" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Nguyên liệu" @@ -5973,7 +5977,7 @@ msgstr "Từ khóa sản phẩm để cải thiện sự hiện diện trong k msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -6006,7 +6010,7 @@ msgstr "Hết hạn mặc định" msgid "Expiry time (in days) for stock items of this part" msgstr "Thời gian hết hạn (theo ngày) để nhập kho hàng hóa cho sản phẩm này" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Kho tối thiểu" @@ -6487,355 +6491,355 @@ msgstr "Không thể tạo mối quan hệ giữa một sản phẩm và chính msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Loại tiền mua hàng của hàng hóa này" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Sao chép định mức nguyên vật liệu từ sản phẩm gốc" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Sao chép thông tin tham số từ sản phẩm gốc" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Chỉ ra số lượng tồn kho ban đầu cho sản phẩm. Nếu điền là không, không thêm kho nào." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Chỉ định vị trí kho ban đầu cho sản phẩm này" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Chọn nhà sản xuất (hoặc để trống để bỏ qua)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Công ty đã chọn không phải là nhà cung ứng hợp lệ" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Công ty đã chọn không phải là nhà sản xuất hợp lệ" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Mã số nhà sản xuất khớp với MPN này đã tồn tại" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Mã số nhà cung cấp khớp với SKU này đã tồn tại" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Tên danh mục" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Đang dựng" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Hàng trong kho" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Tổng số lượng" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Sao chép dữ liệu ban đầu từ sản phẩm khác" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Tạo sản phẩm với số lượng tồn kho ban đầu" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Thêm thông tin nhà cung cấp ban đầu cho sản phẩm này" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Sao chép mẫu tham số từ nhóm sản phẩm được chọn" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Tên tệp của ảnh sản phẩm hiện hữu" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Có thể dựng" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Không thể chuyển đổi từ tiền tệ đã cung cấp cho {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Giá tối thiểu không được lớn hơn giá tối đa" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Giá tối đa không được nhỏ hơn giá tối thiểu" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Chọn sản phẩm để sao chép định mức nguyên vật liệu" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Xóa mục BOM đã tồn tại trước khi sao chép" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Bao gồm mục BOM được thừa hưởng từ sản phẩm mẫu" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Bật tùy chọn này để bỏ qua dòng không hợp lệ" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM" @@ -8288,7 +8292,7 @@ msgstr "Báo cáo kiểm thử mặt hàng" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Mục đã cài đặt" @@ -8361,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8445,7 +8449,7 @@ msgstr "Ngày hết hạn trước đó" msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Ế" @@ -8579,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Không thể đặt hàng trong kho vào trong địa điểm kho có cấu trúc!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Không thể tạo hàng hóa trong kho cho sản phẩm ảo" @@ -8624,7 +8628,7 @@ msgstr "Chọn sản phẩm nhà cung cấp khớp với hàng hóa trong kho n msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Đóng gói hàng hóa này được lưu trữ lại" @@ -8640,7 +8644,7 @@ msgstr "Mục này đã được cài đặt trong mục khác?" msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" @@ -8753,7 +8757,7 @@ msgstr "Hàng trong kho hiện đang sản xuất" msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" @@ -8877,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8901,222 +8905,222 @@ msgstr "Mục cha" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Số hiệu hàng hoá nhà cung cấp" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Đã hết hạn" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Mục con" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 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:692 +#: stock/serializers.py:706 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:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Vị trí kho đích" -#: stock/serializers.py:746 +#: stock/serializers.py:760 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:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Số sêri đã tồn tại" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Chọn mặt hàng để lắp đặt" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Số lượng để cài đặt" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Nhập số lượng hàng hóa để cài đặt" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Thêm ghi chú giao dịch (tùy chọn)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 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:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Mặt hàng không khả dụng" -#: stock/serializers.py:856 +#: stock/serializers.py:870 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:869 +#: stock/serializers.py:883 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:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ" -#: stock/serializers.py:942 +#: stock/serializers.py:956 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:955 +#: stock/serializers.py:969 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:972 +#: stock/serializers.py:986 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:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Mã trạng thái mặt hàng" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Chọn mặt hàng để đổi trạng thái" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 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:1341 +#: stock/serializers.py:1374 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:1365 +#: stock/serializers.py:1398 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:1371 +#: stock/serializers.py:1404 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:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 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:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Cho phép trạng thái không khớp" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 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:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Giá trị khóa chính mặt hàng" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Ghi chú giao dịch kho" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9598,99 +9602,99 @@ msgstr "Đơn hàng bán" msgid "Return Orders" msgstr "Đơn hàng trả lại" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Tên người dùng" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Tên" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Họ người dùng" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Họ" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Tên người dùng" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Địa chỉ email của người dùng" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Người dùng này là superuser" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Tài khoản người dùng đang hoạt động" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Tài khoản của bạn đã được tạo." -#: users/serializers.py:484 +#: users/serializers.py:491 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" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Chào mừng đến với InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index 3e427cd149..f81f6a3b19 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -104,13 +104,13 @@ msgstr "输入日期" msgid "Invalid decimal value" msgstr "无效的数值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "备注" @@ -215,7 +215,7 @@ msgstr "提供的 URL 不是一个有效的图片文件" msgid "Log in to the app" msgstr "登录应用程序" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "电子邮件" @@ -336,51 +336,51 @@ msgstr "服务器记录了一个错误。" msgid "Image" msgstr "图像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "货币" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "从可用选项中选择货币" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "此字段不能为空。" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "远程图片" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "远程图片文件的 URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图片" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "从远程URL下载图像失败" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "无效的内容类型格式" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "未找到内容类型" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "内容类型不匹配所需的 mixin 类" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "包含变体" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "包含变体" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "类别" @@ -669,16 +669,16 @@ msgstr "排除树" msgid "Build must be cancelled before it can be deleted" msgstr "生产订单必须取消后才能删除" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "可选项" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "装配件" @@ -687,7 +687,7 @@ msgstr "装配件" msgid "Tracked" msgstr "可追溯" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "需检测" @@ -695,24 +695,24 @@ msgstr "需检测" msgid "Order Outstanding" msgstr "未结算订单" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "已消耗" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用数量" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "已订购" @@ -727,19 +727,19 @@ msgstr "未找到版本" msgid "Build Order" msgstr "生产订单" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "库存位置" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "产出" @@ -783,7 +783,7 @@ msgstr "目标日期必须在开始日期之后" msgid "Build Order Reference" msgstr "生产订单编号" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "销售订单编号" msgid "Sales Order to which this build is allocated" msgstr "该生产订单关联的销售订单" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "源库位" @@ -861,16 +861,16 @@ msgstr "生产状态" msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "批号" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "本批产出的批次编号" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "建立日期" @@ -964,7 +964,7 @@ msgstr "生产订单 {build} 已完成" msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "可追溯零件必须填写序列号" @@ -980,23 +980,23 @@ msgstr "产出已完成" msgid "Build output does not match Build Order" msgstr "产出与生产订单不匹配" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "数量必须大于零" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "数量不能大于产出数量" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "产出未通过所有必要测试" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "产出 {serial} 未通过所有必要测试" @@ -1017,10 +1017,10 @@ msgstr "生产订单行项目" msgid "Build object" msgstr "生产对象" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "生产对象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" msgid "Stock item is over-allocated" msgstr "库存品项超额分配" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "库存项" @@ -1099,378 +1099,378 @@ msgstr "目标库存项" msgid "Build Level" msgstr "生产等级" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "零件名称" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "产出" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "生产产出与上级订单不匹配" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "产出零件与生产订单零件不匹配" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "此产出已经完成" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "此产出尚未完全分配" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "输入产出数量" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "可追踪的零件数量必须为整数" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "输入产出的序列号" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "生产产出的库存地点" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "必须提供产出清单" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "报废品库存地点" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "放弃分配" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消对报废产品的库存分配" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "废品产出的原因" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "完工产出存放库位" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未全部分配,则完成产出" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "消耗已分配库存" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "立即扣除已分配给该生产任务的库存" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的产出" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "禁止操作" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "标记为当前生产订单消耗" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "完成此生产订单前取消分配" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "超额分配库存" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何处理分配给生产订单的超额库存" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "存在超额分配的库存项" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完全分配至生产订单" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "必需库存未完成全量分配" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "接受未完工" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "允许所需数量的产出未完成" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "生产需求数量未完成" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "生产订单有打开的子生产订单" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "生产订单必须处于生产状态" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "生产行" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "产出" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "生产行项目" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单零件相同" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的零件的分配,必须指定生产产出" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的零件,无法指定生产产出" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "必须提供分配项目" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件来源的库存地点(留空则可来源于任何库存地点)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "从该选定的库存地点排除库存项" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "可互换库存" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多个位置的库存项目可以互换使用" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "替代品库存" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的零件" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "分配可选的物料清单给生产订单" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "所有物料" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "未跟踪的物品" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "已跟踪的物品" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "物品类型" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "选择要自动分配的条目类型" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "物料清单参考" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "物料清单零件识别号码" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "物料清单零件名称" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "安裝到" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "生产" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "供应商零件" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "已分配数量" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "生产订单编号" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "零件类别名称" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "可追踪" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "物料清单项" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "生产中" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "可用库存" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "可用的替代品库存" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "可用的变体库存" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗数量超过分配数量" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "库存消耗可选备注" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "生产物料项必须关联到正确的生产订单" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "重复的生产物料项分配" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "订单行项目必须关联到正确的生产订单" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "重复的订单行项目分配" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "必须提供至少一个物料项或行项目" @@ -1494,7 +1494,7 @@ msgstr "已暂停" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "逾期的生产订单" msgid "Build order {bo} is now overdue" msgstr "生产订单 {bo} 现已逾期" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "是否链接" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "是否为文件" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "用户没有权限删除此附件" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "用户没有权限删除此附件" @@ -1550,7 +1550,7 @@ msgstr "未提供有效的货币代码" msgid "No plugin" msgstr "暂无插件" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "项目编号标签" @@ -1628,7 +1628,7 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批发价数量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "价格" @@ -1652,7 +1652,7 @@ msgstr "此网络钩子的名称" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" @@ -2126,7 +2126,7 @@ msgstr "参数" msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "为附件指定的模型类型无效" @@ -2140,7 +2140,7 @@ msgstr "此参数的目标模型的 ID" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "模板" @@ -2148,7 +2148,7 @@ msgstr "模板" msgid "Parameter template" msgstr "参数模板" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "数据" @@ -2156,18 +2156,18 @@ msgstr "数据" msgid "Parameter Value" msgstr "参数值" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "备注" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "可选注释字段" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "文件名" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "模型类型" @@ -2465,11 +2465,11 @@ msgstr "模型类型" msgid "User does not have permission to create or edit attachments for this model" msgstr "用户无权为此模式创建或编辑附件" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "用户没有权限为此模型创建或编辑参数" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "选择列表已锁定" @@ -2859,8 +2859,8 @@ msgstr "零件默认为模板" msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "组件" @@ -3990,33 +3990,33 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "制造商处于活动状态" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "供应商零件处于激活状态" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "主供应商部件" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "内部零件已激活" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "供应商已激活" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "制造商" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "有库存" @@ -4197,7 +4197,7 @@ msgstr "内部使用的装运通知单" msgid "Link to address information (external)" msgstr "链接地址信息 (外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "制造商零件" @@ -4215,12 +4215,12 @@ msgstr "选择零件" msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "制造商零件编号" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "制造商零件编号" @@ -4244,8 +4244,8 @@ msgstr "包装单位必须大于零" msgid "Linked manufacturer part must reference the same base part" msgstr "链接的制造商零件必须引用相同的基础零件" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4256,7 +4256,7 @@ msgstr "供应商" msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "供应商库存管理单位" @@ -4292,8 +4292,8 @@ msgstr "基本费用" msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "打包" @@ -4341,14 +4341,18 @@ msgstr "此供应商使用的默认货币" msgid "Company Name" msgstr "公司名称" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "有库存" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "批发价" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "数据导出过程中发生错误" @@ -4453,67 +4457,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "记录的现有数据库标识符" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "列已映射到数据库字段" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "字段已映射到数据列" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "列映射必须链接到有效的导入会话" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "数据文件中不存在列" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "目标模型中不存在字段" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "所选字段为只读" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "导入会话" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "字段" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "列" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "行索引" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "原始行数据" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "错误" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "有效" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "更新现有记录需要提供ID。" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "没有找到与提供的ID相关的记录" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "提供的ID格式无效" @@ -4823,7 +4827,7 @@ msgstr "订单" msgid "Order Complete" msgstr "订单完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "内部零件" @@ -4920,7 +4924,7 @@ msgstr "开始日期" msgid "Scheduled start date for this order" msgstr "本订单的预定开始日期" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "预计日期" @@ -4958,7 +4962,7 @@ msgid "Order reference" msgstr "订单参考" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "狀態" @@ -5015,7 +5019,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "序列号不能分配给虚拟件" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5141,7 +5145,7 @@ msgstr "已接收" msgid "Number of items received" msgstr "收到的物品数量" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "采购价格" @@ -5213,8 +5217,8 @@ msgstr "审核人" msgid "User who checked this shipment" msgstr "检查此装运的用户" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" @@ -5279,7 +5283,7 @@ msgstr "分配数量不能超过库存数量" msgid "Allocation quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化库存项目的数量必须为1" @@ -5395,7 +5399,7 @@ msgstr "复制额外行" msgid "Copy extra line items from the original order" msgstr "从原始订单复制额外的行项目" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "复制参数" @@ -5414,216 +5418,216 @@ msgstr "行项目" msgid "Completed Lines" msgstr "已完成行项目" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "复制订单" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "指定复制此订单的选项" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "订单ID不正确" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "供应商名称" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "订单不能取消" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "允许关闭行项目不完整的订单" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "订单中的行项目不完整" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "订单未打开" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自动定价" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根据供应商零件数据自动计算采购价格" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "购买价格货币" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "合并项目" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "内部零件编号" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "内部零件名称" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "必须指定供应商零件" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "必须指定采购订单" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "供应商必须匹配采购订单" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "采购订单必须与供应商匹配" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "行项目" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "为收到的物品选择目的地位置" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "输入入库项目的批号" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "输入入库库存项的有效期" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "输入入库库存项目的序列号" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "覆盖传入库存项目的包装资料" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "传入库存项目的附加说明" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "条形码已被使用" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "必须提供行项目" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "必须指定目标位置" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "提供的条形码值必须是唯一的" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "配送" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "已分配的行" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "售出价格货币" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "已分配的项目" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "未提供装运详细信息" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "行项目与此订单不关联" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "数量必须为正" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "输入要分配的序列号" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "货物已发出" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "发货与此订单无关" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "未找到以下序列号的匹配项" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下序列号不可用" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "退货订单行项目" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "行项目与退货订单不匹配" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "行项目已收到" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "只能根据正在进行的订单接收物品" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "退货数量" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "行价格货币" @@ -5839,7 +5843,7 @@ msgstr "此类别零件的默认关键字" msgid "Icon" msgstr "图标" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "图标(可选)" @@ -5860,7 +5864,7 @@ msgstr "默认值" msgid "Default Parameter Value" msgstr "默认参数值" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "零件" @@ -5975,7 +5979,7 @@ msgstr "提高搜索结果可见性的零件关键字" msgid "Part category" msgstr "零件类别" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "内部零件号 IPN" @@ -6008,7 +6012,7 @@ msgstr "默认到期" msgid "Expiry time (in days) for stock items of this part" msgstr "此零件库存项的过期时间 (天)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "最低库存" @@ -6489,355 +6493,355 @@ msgstr "零件关系不能在零件和自身之间创建" msgid "Duplicate relationship already exists" msgstr "复制关系已经存在" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "上级类别" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "上级零件类别" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "结果" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "根据该模板记录的结果数量" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "购买此库存项的货币" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "文件不是一个图片" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "选择要复制的原始零件" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "复制图片" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "从原零件复制图片" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "复制物料清单" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "从原始零件复制材料清单" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "从原始零件复制参数数据" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "复制备注" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "从原始零件复制备注" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "复制测试" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "从原始零件复制测试模板" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "初始化库存数量" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "初始化库存地点" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的库存地点" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "选择供应商(或为空以跳过)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "选择制造商(或为空)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "制造商零件号" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "所选公司不是一个有效的供应商" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "所选公司不是一个有效的制造商" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "类别名称" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "正在生产" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "目前正在生产的零件数量" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件计划待产数量" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "库存项" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "修订" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "库存总量" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "未分配的库存" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "变体库存" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "重复零件" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "从另一个零件复制初始数据" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "初始库存" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "创建具有初始库存数量的零件" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "供应商信息" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供应商信息" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "从选择的零件复制参数模版" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "现有的图片" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "现有零件图片的文件名" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "图片不存在" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "验证整个物料清单" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "可以创建" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "生产订单必填项" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "分配到生产订单" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "销售订单必填项" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "分配到销售订单" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "内部零件号" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "零件描述" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "选择一个物料,以生成该物料(及其所有变型物料)的盘点信息" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "选择一个分类,以包含该分类(及其子分类)下的所有物料" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "选择一个库位,以包含该库位(含子库位)中有库存的所有物料" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "生成盘点条目" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "保存所选物料的盘点条目" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "生成报告" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "为所选物料生成盘点报告" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "最低价格" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "覆盖已计算的最低价格值" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "最低价格货币" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "最高价格" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "覆盖已计算的最高价格值" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "最高价格货币" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "更新" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "更新这个零件的价格" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "无法将所提供的货币转换为 {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "最低价格不能高于最高价格。" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "最高价格不能低于最低价格" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "数量必须大于或等于零" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "选择父装配" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "选择零部件" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "选择要复制物料清单的零件" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "移除现有数据" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "复制前删除现有的物料清单项目" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "包含继承的" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "包含从模板零件继承的物料清单项目" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "跳过无效行" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "启用此选项以跳过无效行" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "复制替代品零件" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "复制物料清单项目时复制替代品零件" @@ -8290,7 +8294,7 @@ msgstr "库存项测试报告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "已安装的项目" @@ -8363,7 +8367,7 @@ msgstr "按顶级位置筛选" msgid "Include sub-locations in filtered results" msgstr "在筛选结果中包含子地点" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "上级地点" @@ -8447,7 +8451,7 @@ msgstr "过期日期前" msgid "Expiry date after" msgstr "过期日期后" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "过期" @@ -8581,7 +8585,7 @@ msgstr "必须指定零件" msgid "Stock items cannot be located into structural stock locations!" msgstr "库存项不能存放在结构性库存地点!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "无法为虚拟零件创建库存项" @@ -8626,7 +8630,7 @@ msgstr "为此库存项目选择匹配的供应商零件" msgid "Where is this stock item located?" msgstr "这个库存物品在哪里?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "包装此库存物品存储在" @@ -8642,7 +8646,7 @@ msgstr "此项目是否安装在另一个项目中?" msgid "Serial number for this item" msgstr "此项目的序列号" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "此库存项的批号" @@ -8755,7 +8759,7 @@ msgstr "库存项目前正在生产" msgid "Serialized stock cannot be merged" msgstr "序列化的库存不能合并" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "复制库存项" @@ -8879,7 +8883,7 @@ msgstr "选择要生成序列号的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列号的数量" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "此结果的测试模板" @@ -8903,222 +8907,222 @@ msgstr "父项" msgid "Parent stock item" msgstr "父库存项" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加时使用包装尺寸:定义的数量是包装的数量" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "包装规格" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "供应商零件编号" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "已过期" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "子项目" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "跟踪项目" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "此库存商品的购买价格,单位或包装" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "输入要序列化的库存项目数量" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "未提供库存项" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量不得超过现有库存量 ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列号" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "选择要安装的库存项目" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "安装数量" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "输入要安装的项目数量" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "添加交易记录 (可选)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "安装数量必须至少为1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "库存项不可用" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "所选零件不在物料清单中" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "安装数量不得超过可用数量" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "已卸载项目的目标位置" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "选择要将库存项目转换为的零件" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "所选零件不是有效的转换选项" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "无法转换已分配供应商零件的库存项" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "库存项状态代码" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "选择要更改状态的库存项目" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "未选择库存商品" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "子位置" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "上级库存地点" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "零件必须可销售" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "物料已分配到销售订单" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "项目被分配到生产订单中" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "客户分配库存项目" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "所选公司不是客户" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "库存分配说明" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "必须提供库存物品清单" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "库存合并说明" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "允许不匹配的供应商" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "允许合并具有不同供应商零件的库存项目" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "允许不匹配的状态" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "允许合并具有不同状态代码的库存项目" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "必须提供至少两件库存物品" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "无更改" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "库存项主键值" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "库存项无现货" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "库存项已有现货" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "数量不得为负" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "库存交易记录" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "合并至现有库存" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "若可行,将退回项目合并至现有库存项" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "下一个序列号" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "上一个序列号" @@ -9600,99 +9604,99 @@ msgstr "销售订单" msgid "Return Orders" msgstr "退货订单" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "用户名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "用户的名字(不包括姓氏)" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "姓" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "用户的姓氏" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "用户的电子邮件地址" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "用户必须经过身份验证" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "只有超级用户可以为另一个用户创建令牌" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "管理员" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "该用户是否拥有管理员权限" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "超级用户" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "此用户是否为超级用户" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "此用户帐户是否已激活" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "只有超级用户可以调整此字段" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "密码" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "用户密码" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "覆盖警告" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "覆盖有关密码规则的警告" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "管理员" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "该用户是否拥有管理员权限" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "你没有权限创建用户" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "您的账户已创建。" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "请使用密码重置功能登录" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "欢迎使用 InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po index cc556a25be..e922a94d44 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-13 00:32+0000\n" +"PO-Revision-Date: 2026-04-13 00:35\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -104,13 +104,13 @@ msgstr "輸入日期" msgid "Invalid decimal value" msgstr "無效的十進位數值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 #: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "備註" @@ -215,7 +215,7 @@ msgstr "提供的 URL 不是一個有效的圖片文件" msgid "Log in to the app" msgstr "登入此應用程式" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "電子郵件" @@ -336,51 +336,51 @@ msgstr "伺服器紀錄了一個錯誤。" msgid "Image" msgstr "圖像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "必須是有效的數字" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "貨幣" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "從可用選項中選擇貨幣" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "此欄位不可為空白。" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "無效值" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "遠程圖片" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "遠程圖片文件的 URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "未啓用從遠程 URL下載圖片" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "從遠程URL下載圖像失敗" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "不合規的內容類型格式" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "內容類型未發現" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "內容類型與所需的 mixin 類別不符" @@ -567,15 +567,15 @@ msgid "Include Variants" msgstr "包含變體" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,8 +585,8 @@ msgstr "包含變體" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -595,9 +595,9 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "類別" @@ -669,16 +669,16 @@ msgstr "排除樹" msgid "Build must be cancelled before it can be deleted" msgstr "工單必須被取消才能被刪除" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "非必須項目" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "裝配" @@ -687,7 +687,7 @@ msgstr "裝配" msgid "Tracked" msgstr "追蹤中" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "可測試" @@ -695,24 +695,24 @@ msgstr "可測試" msgid "Order Outstanding" msgstr "訂單未完成" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "已消耗" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用數量" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "已訂購" @@ -727,19 +727,19 @@ msgstr "" msgid "Build Order" msgstr "生產工單" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "地點" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "產出" @@ -783,7 +783,7 @@ msgstr "目標日期必須晚於開始日期" msgid "Build Order Reference" msgstr "生產工單代號" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 @@ -813,7 +813,7 @@ msgstr "銷售訂單代號" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "來源倉儲地點" @@ -861,16 +861,16 @@ msgstr "生產狀態" msgid "Build status code" msgstr "生產狀態代碼" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "批號" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "此產出的批號" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "建立日期" @@ -964,7 +964,7 @@ msgstr "生產工單 {build} 已經完成" msgid "A build order has been completed" msgstr "一張生產工單已經完成" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "對於可跟蹤的零件,必須提供序列號" @@ -980,23 +980,23 @@ msgstr "產出已完成" msgid "Build output does not match Build Order" msgstr "產出與生產訂單不匹配" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:744 order/serializers.py:615 order/serializers.py:815 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於輸出數量" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "此產出尚未通過所有必要測試" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "產出 {serial} 未通過所有必要測試" @@ -1017,10 +1017,10 @@ msgstr "生產訂單行項目" msgid "Build object" msgstr "生產對象" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1032,7 +1032,7 @@ msgstr "生產對象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1071,11 +1071,11 @@ msgstr "分配的數量({q})不能超過可用的庫存數量({a})" msgid "Stock item is over-allocated" msgstr "庫存品項超額分配" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1520 order/serializers.py:1541 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "庫存品項" @@ -1099,378 +1099,378 @@ msgstr "目的庫存品項" msgid "Build Level" msgstr "構建等級" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "零件名稱" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "產出" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "產出與之前的生產不匹配" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "產出零件與生產訂單零件不匹配" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "此產出已經完成" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "此產出尚未完全分配" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "輸入產出數量" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "可追蹤的零件數量必須為整數" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序號" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "輸出產出的序列號" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "生產輸出的庫存地點" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "自動分配序號" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "序號已存在或無效" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "必須提供產出清單" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "廢品產出的庫存位置" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "放棄分配" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消對廢品產出的任何庫存分配" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "廢品產出的原因" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "已完成刪除的庫存地點" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果庫存尚未全部分配,則完成產出" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "消費已分配的庫存" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "消耗已分配給此生產的任何庫存" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "移除未完成的產出" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "刪除所有未完成的產出" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "不允許" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "接受作為此生產訂單的消費" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "完成此生產訂單前取消分配" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "超出分配的庫存" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何處理分配給生產訂單的額外庫存項" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "有庫存項目已被過度分配" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受庫存項未被完全分配至生產訂單" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "所需庫存尚未完全分配" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "接受不完整" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "允許所需數量的產出未完成" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "未完成所需生產數量" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "生產訂單有打開的子生產訂單" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "生產訂單必須處於生產狀態" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "生產訂單有未完成的產出" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "生產行" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "產出" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "生產產出必須指向相同的生產" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "生產行項目" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必須與生產訂單零件相同" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "商品必須有庫存" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "對於被追蹤的零件的分配,必須指定生產產出" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "對於未被追蹤的零件,無法指定生產產出" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "必須提供分配項目" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件來源的庫存地點(留空則可來源於任何庫存地點)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "從該選定的庫存地點排除庫存項" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "可互換庫存" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多個位置的庫存項目可以互換使用" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "替代品庫存" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "允許分配可替換的零件" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "可選項目" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "分配可選的物料清單給生產訂單" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "全部品項" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "品項類型" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "物料清單參考" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "物料清單零件識別號碼" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "物料清單零件名稱" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "安裝至" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "生產" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "供應商零件" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "已分配數量" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "構建參考" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "零件類別名稱" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "可追蹤" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "物料清單項" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "生產中" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "可用庫存" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "可用的替代品庫存" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "可用的變體庫存" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗數量超過已分配數量" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "庫存耗用的可選備註" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "生產項必須指向正確的生產工單" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "重複的生產項分配" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "生產行必須指向正確的生產工單" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "重複的生產行分配" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "至少必須提供一個項目或一行" @@ -1494,7 +1494,7 @@ msgstr "被掛起" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1518,19 +1518,19 @@ msgstr "逾期的生產訂單" msgid "Build order {bo} is now overdue" msgstr "生產訂單 {bo} 現已逾期" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "是否鏈接" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "是否為文件" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "用户沒有權限刪除此附件" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "用户沒有權限刪除此附件" @@ -1550,7 +1550,7 @@ msgstr "未提供有效的貨幣代碼" msgid "No plugin" msgstr "暫無插件" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "項目編碼標籤" @@ -1628,7 +1628,7 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批發價數量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "價格" @@ -1652,7 +1652,7 @@ msgstr "此網絡鈎子的名稱" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" @@ -2126,7 +2126,7 @@ msgstr "參數集" msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:883 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 -#: stock/serializers.py:244 +#: stock/serializers.py:245 msgid "Template" msgstr "模板" @@ -2148,7 +2148,7 @@ msgstr "模板" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "數據" @@ -2156,18 +2156,18 @@ msgstr "數據" msgid "Parameter Value" msgstr "參數值" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "備註" -#: common/models.py:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "可選註釋字段" @@ -2456,7 +2456,7 @@ msgid "Filename" msgstr "檔案名稱" #: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 +#: common/serializers.py:905 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "模型類型" @@ -2465,11 +2465,11 @@ msgstr "模型類型" msgid "User does not have permission to create or edit attachments for this model" msgstr "用户無權為此模式創建或編輯附件" -#: common/serializers.py:885 +#: common/serializers.py:886 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:961 common/serializers.py:1064 msgid "Selection list is locked" msgstr "選擇列表已鎖定" @@ -2859,8 +2859,8 @@ msgstr "零件默認為模板" msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "組件" @@ -3988,33 +3988,33 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "製造商處於活動狀態" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "供應商零件處於激活狀態" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "內部零件已激活" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "供應商已激活" -#: company/api.py:274 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "製造商" -#: company/api.py:281 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:291 +#: company/api.py:292 msgid "Has Stock" msgstr "有庫存" @@ -4195,7 +4195,7 @@ msgstr "內部使用的裝運通知單" msgid "Link to address information (external)" msgstr "鏈接地址信息 (外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "製造商零件" @@ -4213,12 +4213,12 @@ msgstr "選擇零件" msgid "Select manufacturer" msgstr "選擇製造商" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "製造商零件編號" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "製造商零件編號" @@ -4242,8 +4242,8 @@ msgstr "包裝單位必須大於零" msgid "Linked manufacturer part must reference the same base part" msgstr "鏈接的製造商零件必須引用相同的基礎零件" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:666 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4254,7 +4254,7 @@ msgstr "供應商" msgid "Select supplier" msgstr "選擇供應商" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "供應商庫存管理單位" @@ -4290,8 +4290,8 @@ msgstr "基本費用" msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" -#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "打包" @@ -4339,14 +4339,18 @@ msgstr "此供應商使用的默認貨幣" msgid "Company Name" msgstr "公司名稱" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "有庫存" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "資料匯出過程發生錯誤" @@ -4451,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "資料庫中既有紀錄的識別碼" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "列已映射到數據庫字段" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "字段已映射到數據列" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "列映射必須鏈接到有效的導入會話" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "數據文件中不存在列" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "目標模型中不存在字段" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "所選字段為只讀" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "導入會話" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "字段" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "列" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "行索引" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "原始行數據" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "錯誤" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "有效" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "更新既有紀錄需要提供 ID。" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4821,7 +4825,7 @@ msgstr "訂單" msgid "Order Complete" msgstr "訂單完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "內部零件" @@ -4918,7 +4922,7 @@ msgstr "開始日期" msgid "Scheduled start date for this order" msgstr "此訂單的預定開始日期" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "預計日期" @@ -4956,7 +4960,7 @@ msgid "Order reference" msgstr "訂單參考" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "狀態" @@ -5013,7 +5017,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5143,7 @@ msgstr "已接收" msgid "Number of items received" msgstr "收到的物品數量" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "採購價格" @@ -5211,8 +5215,8 @@ msgstr "審核人" msgid "User who checked this shipment" msgstr "檢查此裝運的用户" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" @@ -5277,7 +5281,7 @@ msgstr "分配數量不能超過庫存數量" msgid "Allocation quantity must be greater than zero" msgstr "分配的數量必須大於零" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化庫存項目的數量必須為1" @@ -5393,7 +5397,7 @@ msgstr "複製額外行" msgid "Copy extra line items from the original order" msgstr "從原始訂單複製額外的行項目" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "複製參數" @@ -5412,216 +5416,216 @@ msgstr "行項目" msgid "Completed Lines" msgstr "已完成行項目" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "複製訂單" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "指定複製此訂單的選項" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "訂單ID不正確" -#: order/serializers.py:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "供應商名稱" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "訂單不能取消" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "允許關閉行項目不完整的訂單" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "訂單中的行項目不完整" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "訂單未打開" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自動定價" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根據供應商零件數據自動計算採購價格" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "購買價格貨幣" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "合併項目" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "內部零件編號" -#: order/serializers.py:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "內部零件名稱" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "必須指定供應商零件" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "必須指定採購訂單" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "供應商必須匹配採購訂單" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "採購訂單必須與供應商匹配" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "行項目" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "為收到的物品選擇目的地位置" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "輸入入庫項目的批號" -#: order/serializers.py:828 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "輸入入庫庫存項目的到期日" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "輸入入庫庫存項目的序列號" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "覆蓋傳入庫存項目的包裝資料" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "傳入庫存項目的附加説明" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "條形碼" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "掃描條形碼" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "條形碼已被使用" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "必須提供行項目" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "必須指定目標位置" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "提供的條形碼值必須是唯一的" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "配送紀錄" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "售出價格貨幣" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "已分配項目" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "未提供裝運詳細信息" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "行項目與此訂單不關聯" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "數量必須為正" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "輸入要分配的序列號" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "貨物已發出" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "發貨與此訂單無關" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "未找到以下序列號的匹配項" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下序列號不可用" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "退貨訂單行項目" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "行項目與退貨訂單不匹配" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "行項目已收到" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "只能根據正在進行的訂單接收物品" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "退回數量" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "行價格貨幣" @@ -5837,7 +5841,7 @@ msgstr "此類別零件的默認關鍵字" msgid "Icon" msgstr "圖標" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "圖標(可選)" @@ -5858,7 +5862,7 @@ msgstr "默認值" msgid "Default Parameter Value" msgstr "默認參數值" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "零件" @@ -5973,7 +5977,7 @@ msgstr "提高搜索結果可見性的零件關鍵字" msgid "Part category" msgstr "零件類別" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "內部零件號 IPN" @@ -6006,7 +6010,7 @@ msgstr "默認到期" msgid "Expiry time (in days) for stock items of this part" msgstr "此零件庫存項的過期時間 (天)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "最低庫存" @@ -6487,355 +6491,355 @@ msgstr "零件關係不能在零件和自身之間創建" msgid "Duplicate relationship already exists" msgstr "複製關係已經存在" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "上級類別" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "上級零件類別" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "子類別" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "結果" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "根據該模板記錄的結果數量" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "購買此庫存項的貨幣" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "檔案不是圖片" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "選擇要複製的原始零件" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "複製圖片" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "從原零件複製圖片" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "複製物料清單" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "從原始零件複製材料清單" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "從原始零件複製參數數據" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "複製備註" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "從原始零件複製備註" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "複製測試模板" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "從原始零件複製測試模板" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "初始化庫存數量" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "初始化庫存地點" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的庫存地點" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "選擇供應商(或為空以跳過)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "選擇製造商(或為空)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "製造商零件號" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "所選公司不是一個有效的供應商" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "所選公司不是一個有效的製造商" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "類別名稱" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "正在生產" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "此零件目前生產中數量" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件排程待製造未完成數量" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "庫存項" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "修訂" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "庫存總量" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "未分配的庫存" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "變體庫存" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "重複零件" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "從另一個零件複製初始數據" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "初始庫存" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "創建具有初始庫存數量的零件" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "供應商信息" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供應商信息" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "複製類別參數" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "從選擇的零件複製參數模版" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "現有的圖片" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "現有零件圖片的文件名" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "圖片不存在" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "驗證整個物料清單" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "可以創建" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "生產工單需求數" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "已分配至生產工單" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "銷售訂單需求數" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "已分配至銷售訂單" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "產製報表" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "產製選定零件的庫存報表" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "最低價格" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "覆蓋已計算的最低價格值" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "最低價格貨幣" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "最高價格" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "覆蓋已計算的最高價格值" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "最高價格貨幣" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "更新" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "更新這個零件的價格" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "無法將所提供的貨幣轉換為 {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "最低價格不能高於最高價格。" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "最高價格不能低於最低價格" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "選擇父裝配" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "選擇零部件" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "選擇要複製物料清單的零件" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "移除現有數據" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "複製前刪除現有的物料清單項目" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "包含繼承的" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "包含從模板零件繼承的物料清單項目" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "跳過無效行" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "啓用此選項以跳過無效行" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "複製替代品零件" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "複製物料清單項目時複製替代品零件" @@ -8288,7 +8292,7 @@ msgstr "庫存項測試報告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "已安裝的項目" @@ -8361,7 +8365,7 @@ msgstr "按頂級位置篩選" msgid "Include sub-locations in filtered results" msgstr "在篩選結果中包含子地點" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "上級地點" @@ -8445,7 +8449,7 @@ msgstr "過期日期前" msgid "Expiry date after" msgstr "過期日期後" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "過期" @@ -8579,7 +8583,7 @@ msgstr "必須指定零件" msgid "Stock items cannot be located into structural stock locations!" msgstr "庫存項不能存放在結構性庫存地點!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "無法為虛擬零件創建庫存項" @@ -8624,7 +8628,7 @@ msgstr "為此庫存項目選擇匹配的供應商零件" msgid "Where is this stock item located?" msgstr "這個庫存物品在哪裏?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "包裝此庫存物品存儲在" @@ -8640,7 +8644,7 @@ msgstr "此項目是否安裝在另一個項目中?" msgid "Serial number for this item" msgstr "此項目的序列號" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "此庫存項的批號" @@ -8753,7 +8757,7 @@ msgstr "庫存項目前正在生產" msgid "Serialized stock cannot be merged" msgstr "序列化的庫存不能合併" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "複製庫存項" @@ -8877,7 +8881,7 @@ msgstr "選擇要生成序列號的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列號的數量" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "此結果的測試模板" @@ -8901,222 +8905,222 @@ msgstr "父項" msgid "Parent stock item" msgstr "父庫存項" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加時使用包裝尺寸:定義的數量是包裝的數量" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "使用包裝數" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "輸入新項目的序列號" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "供應商零件編號" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "已過期" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "子項目" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "跟蹤項目" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "此庫存商品的購買價格,單位或包裝" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "輸入要序列化的庫存項目數量" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "未提供庫存項" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "數量不得超過現有庫存量 ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "目標庫存位置" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列號" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "序列號已存在" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "選擇要安裝的庫存項目" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "安裝數量" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "輸入要安裝的項目數量" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "添加交易記錄 (可選)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "安裝數量必須至少為1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "庫存項不可用" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "所選零件不在物料清單中" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "安裝數量不得超過可用數量" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "已卸載項目的目標位置" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "選擇要將庫存項目轉換為的零件" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "所選零件不是有效的轉換選項" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "無法轉換已分配供應商零件的庫存項" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "庫存項狀態代碼" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "選擇要更改狀態的庫存項目" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "未選擇庫存商品" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "轉租" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "上級庫存地點" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "零件必須可銷售" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "物料已分配到銷售訂單" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "項目被分配到生產訂單中" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "客户分配庫存項目" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "所選公司不是客户" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "庫存分配説明" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "必須提供庫存物品清單" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "庫存合併説明" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "允許不匹配的供應商" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "允許合併具有不同供應商零件的庫存項目" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "允許不匹配的狀態" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "允許合併具有不同狀態代碼的庫存項目" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "必須提供至少兩件庫存物品" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "無更改" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "庫存項主鍵值" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "庫存項無庫存" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "庫存項已在庫" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "數量不可為負" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "庫存交易記錄" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "合併至現有庫存" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "可行時將退回項目併入現有庫存" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "下一個序列號" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "上一個序列號" @@ -9598,99 +9602,99 @@ msgstr "銷售訂單" msgid "Return Orders" msgstr "退貨訂單" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "用户名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "用户的名字(不包括姓氏)" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "姓" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "用户的姓氏" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "用户的電子郵件地址" -#: users/serializers.py:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "超級用户" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "此用户是否為超級用户" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "此用户帳户是否已激活" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "僅超級使用者可調整此欄位" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "密碼" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "使用者密碼" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "忽略警告" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "忽略密碼規則警告" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "您沒有建立使用者的權限" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "您的帳號已經建立完成。" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "請使用重設密碼功能來登入" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "歡迎使用 InvenTree" diff --git a/src/frontend/src/locales/ar/messages.po b/src/frontend/src/locales/ar/messages.po index e4312b0435..4cb7c02317 100644 --- a/src/frontend/src/locales/ar/messages.po +++ b/src/frontend/src/locales/ar/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ar\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "نسخه مطابقة" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "تعديل" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "الإجراءات" msgid "Search" msgstr "بحث" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "الخيارات" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/bg/messages.po b/src/frontend/src/locales/bg/messages.po index 280baef831..9bd1db7bc8 100644 --- a/src/frontend/src/locales/bg/messages.po +++ b/src/frontend/src/locales/bg/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: bg\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/cs/messages.po b/src/frontend/src/locales/cs/messages.po index e6bc8f35dd..3d333f4a0d 100644 --- a/src/frontend/src/locales/cs/messages.po +++ b/src/frontend/src/locales/cs/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: cs\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Czech\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Chyba při vykreslování komponenty" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Došlo k chybě při vykreslování této komponenty. Více informací najdete v konzoli." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Zkopírováno" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopírovat" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplikovat" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Upravit" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Akce" msgid "Search" msgstr "Hledat" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Vybrat sloupce" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "V pořádku" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Administrace" msgid "Build Orders" msgstr "Vytvořené objednávky" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Není implementováno" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Tato funkce ještě není implementována" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Přístup odepřen" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "K provedení této akce nemáte oprávnění" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Neplatný kód odpovědi" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Server vrátil stav {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Vypršel časový limit" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "Vypršel časový limit žádosti." + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Proces se nezdařil" msgid "Process completed successfully" msgstr "Proces byl úspěšně dokončen" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Chyba při vykreslování komponenty" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Došlo k chybě při vykreslování této komponenty. Více informací najdete v konzoli." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Čárkový kód neodpovídá očekávanému typu modelu" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Skenování čárového kódu se nezdařilo" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Skenování čárového kódu se nezdařilo" @@ -786,14 +832,6 @@ msgstr "Otevřít v administrátorském rozhraní" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Zkopírováno" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopírovat" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Tisk štítků" @@ -930,7 +968,7 @@ msgstr "Příští měsíc" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Exportovat data" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Vymazat" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Stránka nebyla nalezena" msgid "This page does not exist" msgstr "Tato stránka neexistuje" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Přístup odepřen" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Nemáte oprávnění k prohlížení této stránky." @@ -1604,8 +1637,8 @@ msgstr "Chyba serveru" msgid "A server error occurred" msgstr "Došlo k chybě serveru" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Chyba formuláře" @@ -1613,11 +1646,11 @@ msgstr "Chyba formuláře" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Existují chyby pro jedno nebo více polí formuláře" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Možnosti" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Akce čárového kódu" @@ -2617,11 +2650,11 @@ msgstr "Notifikace" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Vrátit" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Počet" @@ -5351,38 +5384,10 @@ msgstr "Heslo bylo změněno" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Není implementováno" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Tato funkce ještě není implementována" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "K provedení této akce nemáte oprávnění" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Neplatný kód odpovědi" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Server vrátil stav {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Vypršel časový limit" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "Vypršel časový limit žádosti." - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Exportování dat" @@ -5811,73 +5816,73 @@ msgstr "Došlo k neočekávané chybě" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Skladová položka již byla naskenována" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "Chyba API" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Nepodařilo se načíst data instance" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Chyba skenování" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Vybrané prvky nejsou známé" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Vybráno více typů objektů" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Akce ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Akce ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Skenování čárového kódu" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Vstup čárového kódu" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Akce" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Nejsou vybrány žádné položky" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Skenovat a vybrat položky k provedení akcí" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Skenovat a vybrat položky k provedení akcí" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "Vybráno {0} položek" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Naskenované položky" @@ -9132,11 +9137,6 @@ msgstr "Přidělené řádky" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Vybrat sloupce" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filtr" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filtry tabulek" @@ -9435,12 +9435,12 @@ msgstr "Přidat filtr" msgid "Clear Filters" msgstr "Vymazat filtry" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Nebyl nalezen žádný záznam" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Chyba při načítání možností tabulky" @@ -9468,7 +9468,7 @@ msgstr "Chyba při načítání možností tabulky" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Server vrátil nesprávný datový typ" @@ -9477,7 +9477,7 @@ msgstr "Server vrátil nesprávný datový typ" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Chyba při načítání údajů tabulky" @@ -9494,49 +9494,49 @@ msgstr "Chyba při načítání údajů tabulky" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Zobrazit podrobnosti" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "Zobrazit {model}" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Odstranit vybrané položky" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Jste si jisti, že chcete odstranit vybrané položky?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Tuto akci nelze vrátit zpět" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Položky smazány" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Odstranění položek se nezdařilo" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Vlastní tabulkové filtry jsou aktivní" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Odstranit vybrané záznamy" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Aktualizovat data" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Aktivní filtry" diff --git a/src/frontend/src/locales/da/messages.po b/src/frontend/src/locales/da/messages.po index 09fd938be1..5536e49a7f 100644 --- a/src/frontend/src/locales/da/messages.po +++ b/src/frontend/src/locales/da/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: da\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Danish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Render fejl af komponent" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Der opstod en fejl under render af denne komponent. Se konsollen for mere information." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Kopieret" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopier" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Dupliker" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Rediger" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Handlinger" msgid "Search" msgstr "Søg" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Ok" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Produktionsordrer" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Ikke implementeret" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Denne funktion er endnu ikke implementeret" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Adgang nægtet" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Du har ikke tilladelse til at udføre denne handling" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Ugyldig Svar Kode" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Server returnerede status {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Timeout" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "Anmodningen udløb" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Proces fejlede" msgid "Process completed successfully" msgstr "Processen er gennemført" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Render fejl af komponent" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Der opstod en fejl under render af denne komponent. Se konsollen for mere information." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Stregkode matcher ikke den forventede modeltype" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Kunne ikke håndtere stregkode" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Kunne ikke scanne stregkode" @@ -786,14 +832,6 @@ msgstr "Åbn i admin interface" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Kopieret" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopier" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Udskriver Etiketter" @@ -930,7 +968,7 @@ msgstr "Næste måned" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Eksporter Data" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Ryd" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Side ikke fundet" msgid "This page does not exist" msgstr "Siden eksisterer ikke" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Adgang nægtet" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Du har ikke tilladelse til at se denne side." @@ -1604,8 +1637,8 @@ msgstr "Serverfejl" msgid "A server error occurred" msgstr "Der opstod en serverfejl" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Formular Fejl" @@ -1613,11 +1646,11 @@ msgstr "Formular Fejl" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Fejl findes i et eller flere formularfelter" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Indstillinger" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Stregkode Handlinger" @@ -2617,11 +2650,11 @@ msgstr "Notifikationer" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Retur" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Antal" @@ -5351,38 +5384,10 @@ msgstr "Adgangskode ændret" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Ikke implementeret" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Denne funktion er endnu ikke implementeret" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Du har ikke tilladelse til at udføre denne handling" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Ugyldig Svar Kode" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Server returnerede status {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Timeout" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "Anmodningen udløb" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Eksporterer data" @@ -5811,73 +5816,73 @@ msgstr "En uventet fejl opstod" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Elementet er allerede scannet" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API fejl" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Scanningsfejl" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Valgte elementer er ikke kendte" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Flere objekter typer valgt" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Stregkode Scanninger" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Stregkode input" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Handling" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Ingen Elementer Valgt" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Skan og vælg elementer til at udføre handlinger" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Skan og vælg elementer til at udføre handlinger" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} elementer valgt" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Scannede Elementer" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "Tilføj Filter" msgid "Clear Filters" msgstr "Nulstil filtre" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Server returnerede forkert datatype" @@ -9477,7 +9477,7 @@ msgstr "Server returnerede forkert datatype" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Fejl ved indlæsning af tabeldata" @@ -9494,49 +9494,49 @@ msgstr "Fejl ved indlæsning af tabeldata" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Vis detaljer" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "Vis {model}" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Slet valgte del" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Er du sikker på at du ønsker at slette de valgte varer?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Denne handling kan ikke fortrydes" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Elementer slettet" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Kunne ikke slette elementer" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Aktive Filtre" diff --git a/src/frontend/src/locales/de/messages.po b/src/frontend/src/locales/de/messages.po index f3820e5091..859dc00755 100644 --- a/src/frontend/src/locales/de/messages.po +++ b/src/frontend/src/locales/de/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: de\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: German\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Fehler beim darstellen der Komponente" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Beim Rendern dieser Komponente ist ein Fehler aufgetreten. Weitere Informationen stehen in der Konsole." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Kopiert" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopieren" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplizieren" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Bearbeiten" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Aktionen" msgid "Search" msgstr "Suche" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Spalten auswählen" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Bestanden" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Bauaufträge" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Nicht implementiert" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Diese Funktion wurde noch nicht implementiert" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Zugriff verweigert" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Du hast keine Berechtigung, diese Aktion durchzuführen" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Ungültiger Rückgabecode" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Server hat den Status {returnCode} zurückgegeben" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Zeitüberschreitung" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "Bei der Anfrage ist eine Zeitüberschreitung aufgetreten" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Prozess fehlgeschlagen" msgid "Process completed successfully" msgstr "Prozess erfolgreich abgeschlossen" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Fehler beim darstellen der Komponente" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Beim Rendern dieser Komponente ist ein Fehler aufgetreten. Weitere Informationen stehen in der Konsole." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Der Barcode stimmt nicht mit dem erwarteten Modelltyp überein" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Fehler beim Verarbeiten des Barcodes" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Fehler beim Scannen des Barcodes" @@ -786,14 +832,6 @@ msgstr "Im Admin-Interface öffnen" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Kopiert" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopieren" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Drucke Etiketten" @@ -930,7 +968,7 @@ msgstr "Nächsten Monat" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Daten exportieren" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Leeren" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Seite nicht gefunden" msgid "This page does not exist" msgstr "Diese Seite existiert nicht" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Zugriff verweigert" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Ihnen fehlt die Berechtigung diese Seite anzuzeigen." @@ -1604,8 +1637,8 @@ msgstr "Serverfehler" msgid "A server error occurred" msgstr "Ein Serverfehler ist aufgetreten" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Formularfehler" @@ -1613,11 +1646,11 @@ msgstr "Formularfehler" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Fehler für ein oder mehrere Formularfelder vorhanden" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Optionen" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Barcode-Aktionen" @@ -2616,14 +2649,14 @@ msgstr "Benachrichtigungen" #~ msgid "Administrator Mode" #~ msgstr "Administrator Mode" -#: src/components/nav/Header.tsx:231 -msgid "Admin Mode" -msgstr "" - #: src/components/nav/Header.tsx:231 msgid "Superuser Mode" msgstr "Superuser-Modus" +#: src/components/nav/Header.tsx:231 +msgid "Admin Mode" +msgstr "" + #: src/components/nav/Header.tsx:237 msgid "The current user has elevated privileges and should not be used for regular usage." msgstr "Der aktuelle Benutzer hat erweiterte Berechtigungen und sollte nicht für die reguläre Nutzung verwendet werden." @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Zurück" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Anzahl" @@ -5351,38 +5384,10 @@ msgstr "Passwort geändert" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Nicht implementiert" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Diese Funktion wurde noch nicht implementiert" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Du hast keine Berechtigung, diese Aktion durchzuführen" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Ungültiger Rückgabecode" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Server hat den Status {returnCode} zurückgegeben" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Zeitüberschreitung" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "Bei der Anfrage ist eine Zeitüberschreitung aufgetreten" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Daten werden exportiert" @@ -5811,73 +5816,73 @@ msgstr "Ein unerwarteter Fehler ist aufgetreten" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Element wurde bereits gescannt" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API-Fehler" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Abrufen der Instanzdaten fehlgeschlagen" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Scanfehler" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Ausgewählte Elemente sind nicht bekannt" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Mehrere Objekttypen ausgewählt" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Aktionen ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Aktionen ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Barcode scannen" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Barcode Input" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Aktion" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Keine Elemente ausgewählt" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Elemente scannen und auswählen um Aktionen auszuführen" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Elemente scannen und auswählen um Aktionen auszuführen" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} Element(e) ausgewählt" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Gescannte Elemente" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Spalten auswählen" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Tabellenfilter" @@ -9435,12 +9435,12 @@ msgstr "Filter hinzufügen" msgid "Clear Filters" msgstr "Filter zurücksetzen" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Keine Einträge gefunden" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Fehler beim Laden der Tabellenoptionen" @@ -9468,7 +9468,7 @@ msgstr "Fehler beim Laden der Tabellenoptionen" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Der Server hat einen falschen Datentyp zurückgegeben" @@ -9477,7 +9477,7 @@ msgstr "Der Server hat einen falschen Datentyp zurückgegeben" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Fehler beim Laden der Tabellendaten" @@ -9494,49 +9494,49 @@ msgstr "Fehler beim Laden der Tabellendaten" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr " Details anzeigen" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Ausgewählte Elemente löschen" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Möchten Sie die ausgewählten Elemente wirklich löschen?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Diese Aktion kann nicht rückgängig gemacht werden" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Elemente gelöscht" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Fehler beim Löschen der Elemente" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Benutzerdefinierte Tabellenfilter sind aktiv" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Ausgewählte Datensätze löschen" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Daten aktualisieren" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Aktive Filter" diff --git a/src/frontend/src/locales/el/messages.po b/src/frontend/src/locales/el/messages.po index 1844749c2e..194fcfdbbd 100644 --- a/src/frontend/src/locales/el/messages.po +++ b/src/frontend/src/locales/el/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: el\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Greek\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Σφάλμα κατά την απόδοση του component" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Αντιγράφηκε" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Αντιγραφή" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Δημιουργία αντιγράφου" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Επεξεργασία" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Ενέργειες" msgid "Search" msgstr "Αναζήτηση" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Επιλογή Στηλών" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Επιτυχία" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Διαχειριστής" msgid "Build Orders" msgstr "Εντολές Κατασκευής" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Δεν έχει υλοποιηθεί" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Αυτή η λειτουργία δεν έχει υλοποιηθεί ακόμη" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Άρνηση πρόσβασης" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Δεν έχετε δικαιώματα για να πραγματοποιήσετε αυτή την ενέργεια" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Μη έγκυρος κωδικός επιστροφής" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Ο διακομιστής επέστρεψε κατάσταση {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Λήξη χρόνου" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "Το αίτημα έληξε χρονικά" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Η διαδικασία απέτυχε" msgid "Process completed successfully" msgstr "Η διαδικασία ολοκληρώθηκε επιτυχώς" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Σφάλμα κατά την απόδοση του component" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Ο γραμμοκώδικας δεν ταιριάζει με τον αν #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Αποτυχία επεξεργασίας γραμμοκώδικα" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Αποτυχία σάρωσης γραμμοκώδικα" @@ -786,14 +832,6 @@ msgstr "Άνοιγμα στο περιβάλλον διαχειριστή" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Αντιγράφηκε" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Αντιγραφή" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Εκτύπωση Ετικετών" @@ -930,7 +968,7 @@ msgstr "Επόμενος μήνας" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Εκκαθάριση" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Η σελίδα δεν βρέθηκε" msgid "This page does not exist" msgstr "Αυτή η σελίδα δεν υπάρχει" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Άρνηση πρόσβασης" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Δεν έχετε δικαίωμα πρόσβασης σε αυτήν τη σελίδα." @@ -1604,8 +1637,8 @@ msgstr "Σφάλμα διακομιστή" msgid "A server error occurred" msgstr "Προέκυψε σφάλμα διακομιστή" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Σφάλμα Φόρμας" @@ -1613,11 +1646,11 @@ msgstr "Σφάλμα Φόρμας" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Υπάρχουν σφάλματα σε ένα ή περισσότερα πεδία της φόρμας" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Επιλογές" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Ενέργειες Barcode" @@ -2617,11 +2650,11 @@ msgstr "Ειδοποιήσεις" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Επιστροφή" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Καταμέτρηση" @@ -5351,38 +5384,10 @@ msgstr "Ο κωδικός άλλαξε" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Δεν έχει υλοποιηθεί" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Αυτή η λειτουργία δεν έχει υλοποιηθεί ακόμη" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Δεν έχετε δικαιώματα για να πραγματοποιήσετε αυτή την ενέργεια" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Μη έγκυρος κωδικός επιστροφής" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Ο διακομιστής επέστρεψε κατάσταση {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Λήξη χρόνου" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "Το αίτημα έληξε χρονικά" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Εξαγωγή δεδομένων" @@ -5811,73 +5816,73 @@ msgstr "Προέκυψε ένα απρόσμενο σφάλμα" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Το Προϊόν έχει ήδη σαρωθεί" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "Σφάλμα API" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Αποτυχία λήψης δεδομένων της εγκατάστασης" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Σφάλμα σάρωσης" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Τα επιλεγμένα στοιχεία δεν είναι γνωστά" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Επιλέχθηκαν πολλοί τύποι Προϊόντων" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Ενέργειες ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Ενέργειες ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Σάρωση barcode" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Εισαγωγή barcode" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Ενέργεια" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Δεν έχουν επιλεγεί Προϊόντα" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Σαρώστε και επιλέξτε Προϊόντα για να εκτελέσετε ενέργειες" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Σαρώστε και επιλέξτε Προϊόντα για να εκτελέσετε ενέργειες" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "Έχουν επιλεγεί {0} Προϊόντα" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Σαρωμένα Προϊόντα" @@ -9132,11 +9137,6 @@ msgstr "Κατανεμημένες γραμμές" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Επιλογή Στηλών" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Φίλτρο" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Φίλτρα Πίνακα" @@ -9435,12 +9435,12 @@ msgstr "Προσθήκη Φίλτρου" msgid "Clear Filters" msgstr "Καθαρισμός Φίλτρων" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Δεν βρέθηκαν εγγραφές" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Σφάλμα φόρτωσης επιλογών πίνακα" @@ -9468,7 +9468,7 @@ msgstr "Σφάλμα φόρτωσης επιλογών πίνακα" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Ο διακομιστής επέστρεψε λανθασμένο τύπο δεδομένων" @@ -9477,7 +9477,7 @@ msgstr "Ο διακομιστής επέστρεψε λανθασμένο τύπ #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Σφάλμα φόρτωσης δεδομένων πίνακα" @@ -9494,49 +9494,49 @@ msgstr "Σφάλμα φόρτωσης δεδομένων πίνακα" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Προβολή λεπτομερειών" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "Προβολή {model}" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Διαγραφή Επιλεγμένων Ειδών" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Είστε βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα είδη;" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Τα είδη διαγράφηκαν" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Αποτυχία διαγραφής ειδών" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Τα προσαρμοσμένα φίλτρα πίνακα είναι ενεργά" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Διαγραφή επιλεγμένων εγγραφών" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Ανανέωση δεδομένων" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Ενεργά Φίλτρα" diff --git a/src/frontend/src/locales/en/messages.po b/src/frontend/src/locales/en/messages.po index 32a2d8f0ef..cca4a2ad4d 100644 --- a/src/frontend/src/locales/en/messages.po +++ b/src/frontend/src/locales/en/messages.po @@ -13,9 +13,25 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Error rendering component" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "An error occurred while rendering this component. Refer to the console for more information." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copied" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copy" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicate" @@ -25,7 +41,7 @@ msgid "Edit" msgstr "Edit" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -72,6 +88,11 @@ msgstr "Actions" msgid "Search" msgstr "Search" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Select Columns" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Pass" @@ -577,7 +598,7 @@ msgstr "Selection Entries" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -603,6 +624,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Build Orders" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Not implemented" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "This feature is not yet implemented" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Permission Denied" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "You do not have permission to perform this action" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Invalid Return Code" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Server returned status {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Timeout" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "The request timed out" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -612,14 +666,6 @@ msgstr "Process failed" msgid "Process completed successfully" msgstr "Process completed successfully" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Error rendering component" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "An error occurred while rendering this component. Refer to the console for more information." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -699,7 +745,7 @@ msgstr "Barcode does not match the expected model type" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -713,7 +759,7 @@ msgid "Failed to handle barcode" msgstr "Failed to handle barcode" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Failed to scan barcode" @@ -781,14 +827,6 @@ msgstr "Open in admin interface" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copied" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copy" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Printing Labels" @@ -925,7 +963,7 @@ msgstr "Next month" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Export data" @@ -1346,7 +1384,7 @@ msgid "Clear" msgstr "Clear" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1582,11 +1620,6 @@ msgstr "Page Not Found" msgid "This page does not exist" msgstr "This page does not exist" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Permission Denied" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "You do not have permission to view this page." @@ -1599,8 +1632,8 @@ msgstr "Server Error" msgid "A server error occurred" msgstr "A server error occurred" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Form Error" @@ -1608,11 +1641,11 @@ msgstr "Form Error" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Errors exist for one or more form fields" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2177,8 +2210,8 @@ msgstr "Options" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Barcode Actions" @@ -2611,14 +2644,14 @@ msgstr "Notifications" #~ msgid "Administrator Mode" #~ msgstr "Administrator Mode" -#: src/components/nav/Header.tsx:231 -msgid "Admin Mode" -msgstr "Admin Mode" - #: src/components/nav/Header.tsx:231 msgid "Superuser Mode" msgstr "Superuser Mode" +#: src/components/nav/Header.tsx:231 +msgid "Admin Mode" +msgstr "Admin Mode" + #: src/components/nav/Header.tsx:237 msgid "The current user has elevated privileges and should not be used for regular usage." msgstr "The current user has elevated privileges and should not be used for regular usage." @@ -5002,7 +5035,7 @@ msgid "Return" msgstr "Return" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Count" @@ -5346,38 +5379,10 @@ msgstr "Password Changed" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Not implemented" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "This feature is not yet implemented" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "You do not have permission to perform this action" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Invalid Return Code" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Server returned status {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Timeout" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "The request timed out" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Exporting Data" @@ -5806,73 +5811,73 @@ msgstr "An unexpected error has occurred" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Item already scanned" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API Error" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Failed to fetch instance data" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Scan Error" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Selected elements are not known" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Multiple object types selected" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Actions ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Actions ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Barcode Scanning" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Barcode Input" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Action" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "No Items Selected" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Scan and select items to perform actions" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Scan and select items to perform actions" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} items selected" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Scanned Items" @@ -9127,11 +9132,6 @@ msgstr "Allocated Lines" msgid "Line Item" msgstr "Line Item" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Select Columns" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9418,7 +9418,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Table Filters" @@ -9430,12 +9430,12 @@ msgstr "Add Filter" msgid "Clear Filters" msgstr "Clear Filters" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "No records found" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Error loading table options" @@ -9463,7 +9463,7 @@ msgstr "Error loading table options" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Server returned incorrect data type" @@ -9472,7 +9472,7 @@ msgstr "Server returned incorrect data type" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Error loading table data" @@ -9489,49 +9489,49 @@ msgstr "Error loading table data" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "View details" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "View {model}" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Delete Selected Items" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Are you sure you want to delete the selected items?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "This action cannot be undone" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Items deleted" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Failed to delete items" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Custom table filters are active" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Delete selected records" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Refresh data" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Active Filters" diff --git a/src/frontend/src/locales/es/messages.po b/src/frontend/src/locales/es/messages.po index a862afc9a3..d54c1f8b96 100644 --- a/src/frontend/src/locales/es/messages.po +++ b/src/frontend/src/locales/es/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Error al procesar el componente" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Ocurrió un error mientras se renderizaba este componente. Consulte la consola para más información." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copiado" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copiar" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicar" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Editar" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Acciones" msgid "Search" msgstr "Buscar" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Seleccionar columnas" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Aceptar" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Órdenes de construcción" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "No implementado" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Esta función aún no está implementada" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Permiso denegado" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "No tienes permisos para realizar esta acción" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Tiempo de espera superado" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "La solicitud ha expirado" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Error al procesar el componente" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Ocurrió un error mientras se renderizaba este componente. Consulte la consola para más información." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Error al escanear código de barras" @@ -786,14 +832,6 @@ msgstr "Abrir en interfaz de administración" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copiado" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copiar" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Imprimir Etiquetas" @@ -930,7 +968,7 @@ msgstr "Siguiente mes" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Borrar" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Página no encontrada" msgid "This page does not exist" msgstr "Esta página no existe" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Permiso denegado" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "No tiene permisos para ver esta página." @@ -1604,8 +1637,8 @@ msgstr "Error del servidor" msgid "A server error occurred" msgstr "Ha ocurrido un error con el servidor" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Error de formulario" @@ -1613,11 +1646,11 @@ msgstr "Error de formulario" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Existen errores para uno o más campos del formulario" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opciones" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Acciones de código de barras" @@ -2617,11 +2650,11 @@ msgstr "Notificaciones" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Devolver" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Contar" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "No implementado" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Esta función aún no está implementada" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "No tienes permisos para realizar esta acción" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Tiempo de espera superado" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "La solicitud ha expirado" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "Se ha producido un error inesperado" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Artículo ya escaneado" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "Error de API" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Error al recuperar datos de instancia" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Error de Escaneo" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Se desconocen los elementos seleccionados" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Varios tipos de objetos seleccionados" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Acciones ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Acciones ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Escaneo de código de barras" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Entrada de Código de barras" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Acción" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "No Hay Artículos Seleccionados" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Escanear y seleccionar artículos para realizar acciones" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Escanear y seleccionar artículos para realizar acciones" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} elementos seleccionados" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Seleccionar columnas" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filtro" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filtros de tabla" @@ -9435,12 +9435,12 @@ msgstr "Añadir filtro" msgid "Clear Filters" msgstr "Borrar filtros" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Ningún registro encontrado" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "El servidor devolvió un tipo de datos incorrecto" @@ -9477,7 +9477,7 @@ msgstr "El servidor devolvió un tipo de datos incorrecto" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Borrar los elementos seleccionados" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "¿Confirma que desea eliminar los elementos seleccionados?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Esta acción no se puede deshacer" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Los filtros personalizados de tabla están activos" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Eliminar los registros seleccionados" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Refrescar datos" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/es_MX/messages.po b/src/frontend/src/locales/es_MX/messages.po index 2af3f7c505..3e21efc843 100644 --- a/src/frontend/src/locales/es_MX/messages.po +++ b/src/frontend/src/locales/es_MX/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: es_MX\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Error al renderizar componente" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Ocurrió un error mientras se renderizaba este componente. Consulte la consola para más información." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copiado" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copiar" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicar" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Editar" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Acciones" msgid "Search" msgstr "Buscar" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Aprobado" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Ordenes de Producción" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "No implementado" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Esta función aún no está implementada" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Permiso denegado" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "No tienes permisos para realizar esta acción" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Código de devolución inválido" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "El servidor devolvió el estado {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Tiempo de espera superado" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "La solicitud ha expirado" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Proceso fallido" msgid "Process completed successfully" msgstr "Proceso completó correctamente" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Error al renderizar componente" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Ocurrió un error mientras se renderizaba este componente. Consulte la consola para más información." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Código de barras no coincide con el modelo esperado" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "No se pudo manejar el código de barras" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "No se pudo escanear el código de barras" @@ -786,14 +832,6 @@ msgstr "Abrir en interfaz de administrador" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copiado" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copiar" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Imprimir etiquetas" @@ -930,7 +968,7 @@ msgstr "Siguiente mes" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Exportar datos" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Borrar" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Página no encontrada" msgid "This page does not exist" msgstr "Esta página no existe" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Permiso denegado" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "No tiene permisos para ver esta página." @@ -1604,8 +1637,8 @@ msgstr "Error del servidor" msgid "A server error occurred" msgstr "Ha ocurrido un error con el servidor" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Error de formulario" @@ -1613,11 +1646,11 @@ msgstr "Error de formulario" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Existen errores para uno o más campos del formulario" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opciones" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Acciones de código de barras" @@ -2617,11 +2650,11 @@ msgstr "Notificaciones" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Devolver" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Contar" @@ -5351,38 +5384,10 @@ msgstr "Contraseña Cambiada" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "No implementado" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Esta función aún no está implementada" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "No tienes permisos para realizar esta acción" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Código de devolución inválido" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "El servidor devolvió el estado {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Tiempo de espera superado" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "La solicitud ha expirado" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "Se ha producido un error inesperado" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "Error de API" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Se desconocen los elementos seleccionados" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Varios tipos de objetos seleccionados" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Escaneo de código de barras" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Acción" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} artículos seleccionados" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filtro" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filtros de tabla" @@ -9435,12 +9435,12 @@ msgstr "Añadir filtro" msgid "Clear Filters" msgstr "Borrar Filtros" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Ningún registro encontrado" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "El servidor devolvió un tipo de datos incorrecto" @@ -9477,7 +9477,7 @@ msgstr "El servidor devolvió un tipo de datos incorrecto" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Eliminar Elementos Seleccionados" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Esta acción no se puede deshacer" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Los filtros personalizados de tabla están activos" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/et/messages.po b/src/frontend/src/locales/et/messages.po index bbb3468cf8..ce880f8da5 100644 --- a/src/frontend/src/locales/et/messages.po +++ b/src/frontend/src/locales/et/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: et\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Komponendi renderdamise tõrge" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Komponendi renderimisel tekkis viga. Lisateabe saamiseks vaadake konsooli." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Kopeeritud" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopeeri" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Korduma" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Muuda" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Toimingud" msgid "Search" msgstr "Otsing" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Vali veerud" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Läbi" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "See funktsioon pole veel rakendatud" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Juurdepääs keelatud" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Vabandame, teil pole luba sellele toimingule" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Vigane tagastamise kuud" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Server tagastas oleku {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Aegumine" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "Viimane päring aegus" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Töötlemine ebaõnnestus" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Komponendi renderdamise tõrge" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Komponendi renderimisel tekkis viga. Lisateabe saamiseks vaadake konsooli." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "Ava admini liideses" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Kopeeritud" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopeeri" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Siltide printimine" @@ -930,7 +968,7 @@ msgstr "Järgmine kuu" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Ekspordi andmed" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Puhasta" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Lehte ei leitud" msgid "This page does not exist" msgstr "Seda lehte ei eksisteeri" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Juurdepääs keelatud" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Teil ei ole selle lehe vaatamiseks luba." @@ -1604,8 +1637,8 @@ msgstr "Serveri viga" msgid "A server error occurred" msgstr "Tekkis serveri viga" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Vormiviga" @@ -1613,11 +1646,11 @@ msgstr "Vormiviga" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Ühes või mitmes vormiväljas on vigu" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Valikud" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Vöötkoodi Toimingud" @@ -2617,11 +2650,11 @@ msgstr "Teavitused" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Kogus" @@ -5351,38 +5384,10 @@ msgstr "Parool on muudetud" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "See funktsioon pole veel rakendatud" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Vabandame, teil pole luba sellele toimingule" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Vigane tagastamise kuud" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Server tagastas oleku {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Aegumine" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "Viimane päring aegus" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Andmete eksportimine" @@ -5811,73 +5816,73 @@ msgstr "Tekkis ootamatu viga" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Ühik on juba skännitud" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API viga" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Valitud elemendid pole teada" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Valitud on mitut tüüpi objektid" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Tegevus" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Vali veerud" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Tabeli filtrid" @@ -9435,12 +9435,12 @@ msgstr "Lisa filter" msgid "Clear Filters" msgstr "Tühjenda filtrid" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Kirjeid ei leitud" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Server tagastas ebatäpse andmeühiku" @@ -9477,7 +9477,7 @@ msgstr "Server tagastas ebatäpse andmeühiku" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Vaata üksikasju" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "Vaata {model}" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Kustutage valitud kirjed" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Kas olete kindel, et soovite kustutada valitud elemendid?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Kustutage valitud kirjed" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/fa/messages.po b/src/frontend/src/locales/fa/messages.po index e355be893c..90f3d82abe 100644 --- a/src/frontend/src/locales/fa/messages.po +++ b/src/frontend/src/locales/fa/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fa\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Persian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/fi/messages.po b/src/frontend/src/locales/fi/messages.po index 2ef20bf408..cdea790b2b 100644 --- a/src/frontend/src/locales/fi/messages.po +++ b/src/frontend/src/locales/fi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/fr/messages.po b/src/frontend/src/locales/fr/messages.po index 9e4bee039e..d1fb1e4ee5 100644 --- a/src/frontend/src/locales/fr/messages.po +++ b/src/frontend/src/locales/fr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Erreur lors de l'affichage de l'application" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Une erreur s'est produite lors du rendu de ce composant. Reportez-vous à la console pour plus d'informations." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copié" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copier" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Dupliquer" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Éditer" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Actions" msgid "Search" msgstr "Rechercher" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Sélectionner les colonnes" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Réussi" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Administrateur" msgid "Build Orders" msgstr "Ordres de fabrication" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Non implémenté" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Cette fonctionnalité n’a pas encore été mise en œuvre." + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Permission refusée" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Vous n'êtes pas autorisé à effectuer cette action" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Code de retour invalide" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Statut du serveur renvoie {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Temps d'attente dépassé" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "La requête a expiré" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Processus échoué" msgid "Process completed successfully" msgstr "Processus terminé avec succès" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Erreur lors de l'affichage de l'application" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Une erreur s'est produite lors du rendu de ce composant. Reportez-vous à la console pour plus d'informations." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Le Code-barre ne correspond pas au type de modèle attendu" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Erreur de traitement du Code-barre" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Échec de la numérisation du code-barres" @@ -786,14 +832,6 @@ msgstr "Ouvrir dans l'interface d'administration" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copié" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copier" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Impression d'étiquettes" @@ -930,7 +968,7 @@ msgstr "Prochain mois" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Export des données" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Effacer" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Page introuvable" msgid "This page does not exist" msgstr "Cette page n'existe pas" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Permission refusée" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Vous n’avez pas la permission de voir cette page." @@ -1604,8 +1637,8 @@ msgstr "Erreur serveur" msgid "A server error occurred" msgstr "Une erreur serveur s'est produite" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Erreur de formulaire" @@ -1613,11 +1646,11 @@ msgstr "Erreur de formulaire" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Il existe des erreurs pour un ou plusieurs champs du formulaire" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Options" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Actions de code-barres" @@ -2617,11 +2650,11 @@ msgstr "Notifications" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Retour" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Compter" @@ -5351,38 +5384,10 @@ msgstr "Mot de passe changé" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Non implémenté" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Cette fonctionnalité n’a pas encore été mise en œuvre." - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Vous n'êtes pas autorisé à effectuer cette action" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Code de retour invalide" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Statut du serveur renvoie {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Temps d'attente dépassé" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "La requête a expiré" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Export de données" @@ -5811,73 +5816,73 @@ msgstr "Une erreur inattendue est survenue" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Article déjà scanné" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "Erreur API" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "La requête sur l'instance de la data a échoué" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Erreur de scan" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Les éléments sélectionnés ne sont pas connus" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Plusieurs types d'objets sélectionnés" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Actions … " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Actions … " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Scan du code bar" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Saisie des codes-barres" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Action" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Pas d'articles sélectionnés" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Scan et sélection des articles sur lesquels faire des actions" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Scan et sélection des articles sur lesquels faire des actions" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} articles sélectionnés" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Articles scannés" @@ -9132,11 +9137,6 @@ msgstr "Lignes allouées" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Sélectionner les colonnes" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filtrer" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filtres des tables" @@ -9435,12 +9435,12 @@ msgstr "Ajouter un filtre" msgid "Clear Filters" msgstr "Effacer filtres" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Pas d'enregistrement trouvé" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Impossible de charger la table des options" @@ -9468,7 +9468,7 @@ msgstr "Impossible de charger la table des options" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Le serveur à retourner un type de donnée incorrect" @@ -9477,7 +9477,7 @@ msgstr "Le serveur à retourner un type de donnée incorrect" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Impossible de charger le tableau de données" @@ -9494,49 +9494,49 @@ msgstr "Impossible de charger le tableau de données" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Vue des détails" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Supprimer les éléments sélectionnés" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Êtes-vous sûr de vouloir supprimer les éléments sélectionnés ?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Cette action ne peut pas être annulée" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Articles supprimés" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Echecs pour supprimer les articles" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Filtre de tableau personnalisés sont activés" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Supprimer les enregistrements sélectionnés" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Actualiser les données" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Filtres actifs" diff --git a/src/frontend/src/locales/he/messages.po b/src/frontend/src/locales/he/messages.po index f4889b6ac0..95a4298a7e 100644 --- a/src/frontend/src/locales/he/messages.po +++ b/src/frontend/src/locales/he/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: he\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "שגיאה בעיבוד הרכיב" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "אירעה שגיאה בעת עיבוד רכיב זה. עיין במסוף למידע נוסף." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "מועתק" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "העתק" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicate" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "ערוך" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "חפש" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "עבר" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "הרשאה נדחתה" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "שגיאה בעיבוד הרכיב" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "אירעה שגיאה בעת עיבוד רכיב זה. עיין במסוף למידע נוסף." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "פתח בממשק הניהול" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "מועתק" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "העתק" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "נקה" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "הדף לא נמצא" msgid "This page does not exist" msgstr "הדף הזה לא קיים" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "הרשאה נדחתה" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "אין לך הרשאה לצפות בדף זה." @@ -1604,8 +1637,8 @@ msgstr "שגיאת שרת" msgid "A server error occurred" msgstr "אירעה שגיאת שרת" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "שגיאת טופס" @@ -1613,11 +1646,11 @@ msgstr "שגיאת טופס" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "קיימות שגיאות עבור שדה טופס אחד או יותר" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "פעולות ברקוד" @@ -2617,11 +2650,11 @@ msgstr "התראות" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/hi/messages.po b/src/frontend/src/locales/hi/messages.po index 6e53feae9e..55210c2236 100644 --- a/src/frontend/src/locales/hi/messages.po +++ b/src/frontend/src/locales/hi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: hi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/hu/messages.po b/src/frontend/src/locales/hu/messages.po index ef22363675..f08924fb1c 100644 --- a/src/frontend/src/locales/hu/messages.po +++ b/src/frontend/src/locales/hu/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: hu\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Hiba a komponens renderelése közben" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Hiba történt ennek a komponensnek a renderelése közben. Nézze a konzolt további információkért." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Másolva" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Másolás" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Másolás" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Szerkesztés" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Műveletek" msgid "Search" msgstr "Keresés" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Oszlopok kiválasztása" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Sikeres" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Adminisztrátor" msgid "Build Orders" msgstr "Gyártási utasítások" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Nincs implementálva" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Ez a funkció még nem készült el" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Nem jogosult" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Nincs jogosultságod ehhez a művelethez" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Érvénytelen visszatérési kód" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Szerver válaszkódja {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Időtúllépés" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "A kérés túllépte az időkorlátot" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "A folyamat sikertelen" msgid "Process completed successfully" msgstr "Folyamat sikeresen befejezve" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Hiba a komponens renderelése közben" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Hiba történt ennek a komponensnek a renderelése közben. Nézze a konzolt további információkért." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "A vonalkód nem egyezik a várt model típussal" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Sikertelen a vonalkód kezelése" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Vonalkód beolvasás sikertelen" @@ -786,14 +832,6 @@ msgstr "Megnyitás adminisztrátori felületen" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Másolva" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Másolás" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Címkék nyomtatása" @@ -930,7 +968,7 @@ msgstr "Következő hónap" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Adatok exportálása" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Törlés" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Oldal nem található" msgid "This page does not exist" msgstr "Ez az oldal nem létezik" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Nem jogosult" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Önnek nincs jogosultsága megnézni ezt az oldalt." @@ -1604,8 +1637,8 @@ msgstr "Szerver hiba" msgid "A server error occurred" msgstr "Szerver hiba történt" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Form hiba" @@ -1613,11 +1646,11 @@ msgstr "Form hiba" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Egy vagy több mező hibát jelez" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opciók" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Vonalkód műveletek" @@ -2617,11 +2650,11 @@ msgstr "Értesítések" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Visszavétel" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Mennyiség" @@ -5351,38 +5384,10 @@ msgstr "Jelszó megváltozott" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Nincs implementálva" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Ez a funkció még nem készült el" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Nincs jogosultságod ehhez a művelethez" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Érvénytelen visszatérési kód" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Szerver válaszkódja {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Időtúllépés" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "A kérés túllépte az időkorlátot" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Adatok exportálása" @@ -5811,73 +5816,73 @@ msgstr "Váratlan hiba történt" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Tétel már beolvasva" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API Hiba" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Példány adatok lekérése sikertelen" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Beolvasási hiba" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Kiválasztott elemek ismeretlenek" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Többféle objektum típus lett kiválasztva" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Műveletek ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Műveletek ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Vonalkód beolvasás" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Vonalkód bevitel" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Művelet" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Nincs kiválasztott tétel" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Olvassa be és válassza ki a tételeket a műveletek végrehajtásához" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Olvassa be és válassza ki a tételeket a műveletek végrehajtásához" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} kiválasztott tétel" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Beolvasott cikkek" @@ -9132,11 +9137,6 @@ msgstr "Lefoglalt sorok" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Oszlopok kiválasztása" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Szűrő" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Táblázat szűrők" @@ -9435,12 +9435,12 @@ msgstr "Szűrő hozzáadása" msgid "Clear Filters" msgstr "Szűrők törlése" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Nincs találat" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Hiba a táblázat beállítások betöltésekor" @@ -9468,7 +9468,7 @@ msgstr "Hiba a táblázat beállítások betöltésekor" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "A szerver hibás adattípust küldött vissza" @@ -9477,7 +9477,7 @@ msgstr "A szerver hibás adattípust küldött vissza" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Hiba a táblázat adatok betöltésekor" @@ -9494,49 +9494,49 @@ msgstr "Hiba a táblázat adatok betöltésekor" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Részletek megtekintése" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "{model} megtekintése" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Kiválasztott elemek törlése" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Biztosan törölni kívánja a kiválasztott tételeket?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Ez a művelet nem vonható vissza" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Elemek törölve" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Nem sikerült törölni a tételeket" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Egyéni táblázat szűrők aktívak" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Kiválasztott rekordok törlése" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Adatok frissítése" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Aktív Szűrők" diff --git a/src/frontend/src/locales/id/messages.po b/src/frontend/src/locales/id/messages.po index 4d6b7a2c25..fd2e96f181 100644 --- a/src/frontend/src/locales/id/messages.po +++ b/src/frontend/src/locales/id/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: id\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Komponen Rendering Galat" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Tersalin" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Salin" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Sunting" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "Cari" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Izin Ditolak" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Komponen Rendering Galat" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Tersalin" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Salin" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Halaman tidak ditemukan" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Izin Ditolak" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Anda tidak memiliki izin untuk melihat halaman ini." @@ -1604,8 +1637,8 @@ msgstr "Galat Server" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Pilihan" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "Notifikasi" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Aksi" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/it/messages.po b/src/frontend/src/locales/it/messages.po index 400da07060..00ff8cc343 100644 --- a/src/frontend/src/locales/it/messages.po +++ b/src/frontend/src/locales/it/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: it\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Italian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Errore nel renderizzare il componente" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Si è verificato un errore durante il rendering di questo componente. Fare riferimento alla console per maggiori informazioni." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copiato" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copia" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplica" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Modifica" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Azioni" msgid "Search" msgstr "Ricerca" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Seleziona Colonne" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Salta / Ignora" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Ordini di Produzione" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Non implementato" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Questa funzione non è ancora stata implementata" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Permesso negato" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Non disponi dell'autorizzazione per eseguire quest'azione" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Codice di Ritorno Non Valido" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Il server ha restituito lo stato {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Timeout" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "La richiesta è scaduta" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Processo fallito" msgid "Process completed successfully" msgstr "Operazione completata con successo" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Errore nel renderizzare il componente" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Si è verificato un errore durante il rendering di questo componente. Fare riferimento alla console per maggiori informazioni." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Il codice a barre non corrisponde al tipo di modello previsto" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Gestione del codice a barre non riuscita" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Scansione del codice a barre non riuscita" @@ -786,14 +832,6 @@ msgstr "Apri nell'interfaccia di amministrazione" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copiato" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copia" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Stampa Etichette" @@ -930,7 +968,7 @@ msgstr "Mese successivo" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Elimina" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Pagina Non Trovata" msgid "This page does not exist" msgstr "Questa pagina non esiste" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Permesso negato" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Non ha i permessi per visualizzare questa pagina." @@ -1604,8 +1637,8 @@ msgstr "Errore del server" msgid "A server error occurred" msgstr "Si è verificato un errore del server" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Errore Modulo" @@ -1613,11 +1646,11 @@ msgstr "Errore Modulo" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Esistono errori per uno o più campi del modulo" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opzioni" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Azioni Codice A Barre" @@ -2617,11 +2650,11 @@ msgstr "Notifiche" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Reso" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Conta" @@ -5351,38 +5384,10 @@ msgstr "Password cambiata" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Non implementato" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Questa funzione non è ancora stata implementata" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Non disponi dell'autorizzazione per eseguire quest'azione" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Codice di Ritorno Non Valido" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Il server ha restituito lo stato {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Timeout" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "La richiesta è scaduta" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Esportazione dati" @@ -5811,73 +5816,73 @@ msgstr "Si è verificato un errore imprevisto" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Articolo già scansionato" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "Errore API" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Recupero dati istanza non riuscito" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Errore Di Scansione" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Gli elementi selezionati non sono noti" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Più tipi di oggetti selezionati" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Azioni ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Azioni ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Scansione Codice A Barre" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Inserimento codice a barre" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Azione" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Nessun articolo selezionato" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Scansiona e seleziona gli articoli per eseguire azioni" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Scansiona e seleziona gli articoli per eseguire azioni" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} elementi selezionati" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Articoli Scansionati" @@ -9132,11 +9137,6 @@ msgstr "Elementi Assegnati" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Seleziona Colonne" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filtro" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filtri tabella" @@ -9435,12 +9435,12 @@ msgstr "Aggiungi filtro" msgid "Clear Filters" msgstr "Rimuovi filtri" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Nessun record trovato" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Errore nel caricare le opzioni della tabella" @@ -9468,7 +9468,7 @@ msgstr "Errore nel caricare le opzioni della tabella" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Il server ha restituito un tipo di dati errato" @@ -9477,7 +9477,7 @@ msgstr "Il server ha restituito un tipo di dati errato" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Errore nel caricare i dati della tabella" @@ -9494,49 +9494,49 @@ msgstr "Errore nel caricare i dati della tabella" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Mostra dettagli" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "Visualizza {model}" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Elimina elementi selezionati" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Sei sicuro di voler eliminare gli elementi selezionati?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Questa azione non può essere annullata" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Elementi eliminati" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Eliminazione degli elementi non riuscita" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "I filtri tabella personalizzati sono attivi" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Cancella record selezionati" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Ricarica dati" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Filtri attivi" diff --git a/src/frontend/src/locales/ja/messages.po b/src/frontend/src/locales/ja/messages.po index 40b2376664..ce9d0eadd0 100644 --- a/src/frontend/src/locales/ja/messages.po +++ b/src/frontend/src/locales/ja/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ja\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "エラー:コンポーネント描画" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "このコンポーネントの描画中にエラーが発生しました。詳細はコンソールを参照してください。" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "コピーしました" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "コピー" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "複製" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "編集" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "アクション" msgid "Search" msgstr "検索" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "列の選択" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "パス" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "管理者" msgid "Build Orders" msgstr "組立注文" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "未実施" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "この機能はまだ実装されていません" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "権限がありません" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "この操作を実行する権限がありません" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "無効なリターンコード" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "サーバーが返したステータス [0]" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "タイムアウト" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "リクエストがタイムアウトしました" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "プロセス失敗" msgid "Process completed successfully" msgstr "プロセスは正常に完了しました。" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "エラー:コンポーネント描画" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "このコンポーネントの描画中にエラーが発生しました。詳細はコンソールを参照してください。" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "バーコードが想定されるモデルタイプと一致しません #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "バーコードの処理に失敗しました" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "バーコードのスキャンに失敗しました" @@ -786,14 +832,6 @@ msgstr "管理画面で開く" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "コピーしました" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "コピー" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "ラベル印刷中" @@ -930,7 +968,7 @@ msgstr "来月" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "クリア" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "お探しのページが見つかりません。" msgid "This page does not exist" msgstr "このページは存在しません" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "権限がありません" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "このページを表示する権限がありません。" @@ -1604,8 +1637,8 @@ msgstr "サーバーエラー" msgid "A server error occurred" msgstr "サーバーエラーが発生しました" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "フォームエラー" @@ -1613,11 +1646,11 @@ msgstr "フォームエラー" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "1つ以上のフォームフィールドにエラーがあります" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "オプション" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "バーコードアクション" @@ -2617,11 +2650,11 @@ msgstr "通知" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "戻る" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "カウント" @@ -5351,38 +5384,10 @@ msgstr "パスワードが変更されました" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "未実施" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "この機能はまだ実装されていません" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "この操作を実行する権限がありません" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "無効なリターンコード" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "サーバーが返したステータス [0]" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "タイムアウト" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "リクエストがタイムアウトしました" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "データエクスポート中" @@ -5811,73 +5816,73 @@ msgstr "予期しないエラーが発生しました" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "スキャン済みアイテム" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "APIエラー" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "インスタンスデータの取得に失敗" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "スキャンエラー" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "選択された要素は不明" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "複数のオブジェクトタイプを選択" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "アクション..." + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "アクション..." - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "バーコードスキャン" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "バーコード入力" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "アクション" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "選択されたアイテムなし" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "アイテムをスキャンして選択し、アクションを実行する" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "アイテムをスキャンして選択し、アクションを実行する" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} 選択された項目" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "スキャンされたアイテム" @@ -9132,11 +9137,6 @@ msgstr "割り当てライン" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "列の選択" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "フィルタ" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "テーブルフィルター" @@ -9435,12 +9435,12 @@ msgstr "フィルタを追加" msgid "Clear Filters" msgstr "絞り込み条件を解除する" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "記録が見つかりません" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "テーブルオプションの読み込み中にエラーが発生しました" @@ -9468,7 +9468,7 @@ msgstr "テーブルオプションの読み込み中にエラーが発生しま #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "サーバーが不正なデータ型を返しました。" @@ -9477,7 +9477,7 @@ msgstr "サーバーが不正なデータ型を返しました。" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "テーブルデータの読み込み中にエラーが発生しました" @@ -9494,49 +9494,49 @@ msgstr "テーブルデータの読み込み中にエラーが発生しました #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "詳細を見る" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "{model}を表示" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "選択したアイテムを削除" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "選択したアイテムを削除しますか?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "この操作は元に戻せません。" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "削除されたアイテム" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "アイテムの削除に失敗しました" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "カスタムテーブルフィルターが有効" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "選択したレコードの削除" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "データを更新する" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "適用中のフィルター" diff --git a/src/frontend/src/locales/ko/messages.po b/src/frontend/src/locales/ko/messages.po index e34518ecf7..94a2d2c580 100644 --- a/src/frontend/src/locales/ko/messages.po +++ b/src/frontend/src/locales/ko/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ko\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Korean\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/lt/messages.po b/src/frontend/src/locales/lt/messages.po index f02c0815bf..46922dbeb8 100644 --- a/src/frontend/src/locales/lt/messages.po +++ b/src/frontend/src/locales/lt/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: lt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Klaida atvaizduojant komponentą" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Įvyko klaida atvaizduojant šį komponentą. Daugiau informacijos rasite konsoleje." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Nukopijuota" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopijuoti" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Atlikta" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Klaida atvaizduojant komponentą" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Įvyko klaida atvaizduojant šį komponentą. Daugiau informacijos rasite konsoleje." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Nepavyko nuskaityti brūkšninio kodo" @@ -786,14 +832,6 @@ msgstr "Atidaryti administravimo sąsajoje" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Nukopijuota" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopijuoti" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Spausdinamos etiketės" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/lv/messages.po b/src/frontend/src/locales/lv/messages.po index 25a5adee30..7be98d95db 100644 --- a/src/frontend/src/locales/lv/messages.po +++ b/src/frontend/src/locales/lv/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: lv\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/nl/messages.po b/src/frontend/src/locales/nl/messages.po index 0ec1045c0c..c621108304 100644 --- a/src/frontend/src/locales/nl/messages.po +++ b/src/frontend/src/locales/nl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: nl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Fout bij renderen component" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Er is een fout opgetreden tijdens het weergeven van deze component. Raadpleeg de console voor meer informatie." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Gekopieerd" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopieer" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Dupliceren" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Bewerken" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Acties" msgid "Search" msgstr "Zoeken" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Kolommen selecteren" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Geslaagd" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Administrator" msgid "Build Orders" msgstr "Productieorders" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Niet geïmplementeerd" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Deze functionaliteit is nog niet geïmplementeerd" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Toestemming geweigerd" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "U heeft geen rechten om deze actie uit te voeren" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Ongeldige retourcode" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Server geeft status terug {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Tijdslimiet" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "De aanvraag duurde te lang" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Proces is mislukt" msgid "Process completed successfully" msgstr "Proces succesvol voltooid" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Fout bij renderen component" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Er is een fout opgetreden tijdens het weergeven van deze component. Raadpleeg de console voor meer informatie." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Barcode komt niet overeen met het verwachte type model" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Streepjescode verwerken mislukt" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Streepjescode scannen mislukt" @@ -786,14 +832,6 @@ msgstr "Open in admin interface" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Gekopieerd" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopieer" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Labels afdrukken" @@ -930,7 +968,7 @@ msgstr "Volgende maand" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Gegevens exporteren" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Wis" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Pagina niet gevonden" msgid "This page does not exist" msgstr "Deze pagina bestaat niet" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Toestemming geweigerd" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "U heeft geen toestemming om deze pagina te bekijken." @@ -1604,8 +1637,8 @@ msgstr "Server fout" msgid "A server error occurred" msgstr "Er is een serverfout opgetreden" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Formulier fout" @@ -1613,11 +1646,11 @@ msgstr "Formulier fout" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Er staan fouten in één of meer formuliervelden" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opties" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Barcode acties" @@ -2617,11 +2650,11 @@ msgstr "Meldingen" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Terug" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Aantal" @@ -5351,38 +5384,10 @@ msgstr "Wachtwoord gewijzigd" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Niet geïmplementeerd" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Deze functionaliteit is nog niet geïmplementeerd" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "U heeft geen rechten om deze actie uit te voeren" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Ongeldige retourcode" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Server geeft status terug {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Tijdslimiet" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "De aanvraag duurde te lang" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Gegevens exporteren" @@ -5811,73 +5816,73 @@ msgstr "Er is een onverwachte fout opgetreden" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Item is al gescand" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API fout" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Kan instance gegevens niet ophalen" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Scan fout" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Geselecteerde elementen zijn niet bekend" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Meerdere objecttypes geselecteerd" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Acties ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Acties ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Barcode scannen" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Barcode Input" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Actie" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Geen items geselecteerd" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Scan en selecteer items om acties uit te voeren" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Scan en selecteer items om acties uit te voeren" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} items geselecteerd" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Gescande items" @@ -9132,11 +9137,6 @@ msgstr "Toegewezen lijnen" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Kolommen selecteren" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Tabel filters" @@ -9435,12 +9435,12 @@ msgstr "Filter toevoegen" msgid "Clear Filters" msgstr "Filters wissen" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Geen gegevens gevonden" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Fout bij laden tabel opties" @@ -9468,7 +9468,7 @@ msgstr "Fout bij laden tabel opties" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Server heeft onjuist gegevenstype teruggestuurd" @@ -9477,7 +9477,7 @@ msgstr "Server heeft onjuist gegevenstype teruggestuurd" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Fout bij laden van tabelgegevens" @@ -9494,49 +9494,49 @@ msgstr "Fout bij laden van tabelgegevens" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Details weergeven" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "{model} Bekijken" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Geselecteerde items verwijderen" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Weet u zeker dat u de geselecteerde items wilt verwijderen?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Deze actie kan niet ongedaan worden gemaakt" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Items verwijderd" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Verwijderen van item is mislukt." -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Aangepaste tabelfilters zijn actief" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Verwijder de geselecteerde records" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Gegevens vernieuwen" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Actieve filters" diff --git a/src/frontend/src/locales/no/messages.po b/src/frontend/src/locales/no/messages.po index 3c8f7d863c..8ec767757a 100644 --- a/src/frontend/src/locales/no/messages.po +++ b/src/frontend/src/locales/no/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: no\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Kopiert" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopi" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Dupliser" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Rediger" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Handlinger" msgid "Search" msgstr "Søk" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Velg Kolonner" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "Produksjonsordrer" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Ikke implementert" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Denne funksjonen er ikke implementert ennå" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Du har ikke rettigheter til å utføre denne handlingen" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Ugyldig returkode" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Serveren returnerte status {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Kopiert" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopi" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Skriver etikett" @@ -930,7 +968,7 @@ msgstr "Neste måned" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Skjemafeil" @@ -1613,11 +1646,11 @@ msgstr "Skjemafeil" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Strekkodehandlinger" @@ -2617,11 +2650,11 @@ msgstr "Varlser" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Tell" @@ -5351,38 +5384,10 @@ msgstr "Passord endret" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Ikke implementert" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Denne funksjonen er ikke implementert ennå" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Du har ikke rettigheter til å utføre denne handlingen" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Ugyldig returkode" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Serveren returnerte status {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Valgte elementer er ikke kjent" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Flere objekttyper er valgt" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Handling" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} elementer valgt" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Velg Kolonner" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Tabellfiltre" @@ -9435,12 +9435,12 @@ msgstr "Legg til filter" msgid "Clear Filters" msgstr "Fjern filtre" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Ingen poster funnet" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Serveren returnerte feil datatype" @@ -9477,7 +9477,7 @@ msgstr "Serveren returnerte feil datatype" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Slett valgte oppføringer" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Oppdater data" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/pl/messages.po b/src/frontend/src/locales/pl/messages.po index 2e771f7149..33e9e30084 100644 --- a/src/frontend/src/locales/pl/messages.po +++ b/src/frontend/src/locales/pl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Polish\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Błąd renderowania komponentu" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Wystąpił błąd podczas renderowania tego komponentu. Więcej informacji znajdziesz na konsoli." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Skopiowano" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopiuj" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Zduplikuj" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Edytuj" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Akcje" msgid "Search" msgstr "Szukaj" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Zaliczone" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Administracja" msgid "Build Orders" msgstr "Zlecenia wykonania" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Nie zaimplementowano" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Odmowa dostępu" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Nie masz uprawnień do wykonania tej czynności" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Nieprawidłowy kod odpowiedzi" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Serwer zwrócił status {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Błąd renderowania komponentu" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Wystąpił błąd podczas renderowania tego komponentu. Więcej informacji znajdziesz na konsoli." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Kod kreskowy nie pasuje do oczekiwanego typu modelu" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Nie udało się przetworzyć kodu kreskowego" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Nie udało się zeskanować kodu kreskowego" @@ -786,14 +832,6 @@ msgstr "Otwórz w interfejsie administratora" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Skopiowano" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopiuj" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Drukowanie etykiet" @@ -930,7 +968,7 @@ msgstr "Następny miesiąc" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Wyczyść" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Nie znaleziono strony" msgid "This page does not exist" msgstr "Strona nieistnieje" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Odmowa dostępu" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Nie masz uprawnień do przeglądania tej strony." @@ -1604,8 +1637,8 @@ msgstr "Błąd serwera" msgid "A server error occurred" msgstr "Wystąpił błąd serwera" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Błąd formularza" @@ -1613,11 +1646,11 @@ msgstr "Błąd formularza" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Istnieją błędy dla jednego lub więcej pól formularzy" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opcje" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Akcje kodów kreskowych" @@ -2617,11 +2650,11 @@ msgstr "Powiadomienia" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Ilość" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Nie zaimplementowano" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Nie masz uprawnień do wykonania tej czynności" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Nieprawidłowy kod odpowiedzi" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Serwer zwrócił status {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/pt/messages.po b/src/frontend/src/locales/pt/messages.po index 5c099aca5f..deac8a37e7 100644 --- a/src/frontend/src/locales/pt/messages.po +++ b/src/frontend/src/locales/pt/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Erro ao renderizar componente" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Ocorreu um erro ao renderizar este componente. Consulte o console para obter mais informações." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copiado" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copiar" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicar" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Editar" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Ações" msgid "Search" msgstr "Buscar" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Selecionar Colunas" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Aprovar" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "Ordens de Produções" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Não implementado" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Este recurso ainda não foi implementado" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Não tem permissões para efetuar esta ação" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Código de retorno inválido" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "O servidor retornou o status {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Erro ao renderizar componente" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Ocorreu um erro ao renderizar este componente. Consulte o console para obter mais informações." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "Abrir na interface de administrador" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copiado" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copiar" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Apagar" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1588,11 +1626,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1605,8 +1638,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Erro de formulário" @@ -1614,11 +1647,11 @@ msgstr "Erro de formulário" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2183,8 +2216,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Ações de código de barras" @@ -2618,11 +2651,11 @@ msgstr "Notificações" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5008,7 +5041,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Contar" @@ -5352,38 +5385,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Não implementado" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Este recurso ainda não foi implementado" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Não tem permissões para efetuar esta ação" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Código de retorno inválido" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "O servidor retornou o status {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5812,73 +5817,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Elementos selecionados não são conhecidos" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Vários tipos de objeto selecionados" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Ação" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} itens selecionados" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9133,11 +9138,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Selecionar Colunas" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9424,7 +9424,7 @@ msgid "Filter" msgstr "Filtro" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filtros de tabela" @@ -9436,12 +9436,12 @@ msgstr "Adicionar Filtro" msgid "Clear Filters" msgstr "Limpar Filtros" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Nenhum registo encontrado" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9469,7 +9469,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "O servidor retornou dados incorretos" @@ -9478,7 +9478,7 @@ msgstr "O servidor retornou dados incorretos" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9495,49 +9495,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Remover registos selecionados" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Atualizar dados" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/pt_BR/messages.po b/src/frontend/src/locales/pt_BR/messages.po index 875aaab70b..e758b6318a 100644 --- a/src/frontend/src/locales/pt_BR/messages.po +++ b/src/frontend/src/locales/pt_BR/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Erro ao renderizar componente" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Um erro ocorreu ao renderizar este componente. Verifique o console para mais informações." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copiada" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copiar" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicar" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Editar" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Ações" msgid "Search" msgstr "Buscar" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Selecionar Colunas" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Aprovado" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Ordens de Produções" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Não implementado" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Esta função ainda não foi implementada" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Permissão negada" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Você não tem permissão para realizar esta ação" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Código de retorno inválido" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "O servidor retornou o estado {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Tempo esgotado" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "A solicitação excedeu o tempo" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Falha no processamento" msgid "Process completed successfully" msgstr "Processo finalizado com sucesso" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Erro ao renderizar componente" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Um erro ocorreu ao renderizar este componente. Verifique o console para mais informações." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Código de barras não corresponde ao tipo de modelo esperado" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Falha ao escanear código de barras" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Falha ao escanear código de barras" @@ -786,14 +832,6 @@ msgstr "Abrir na página de administrador" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copiada" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copiar" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Imprimir Etiquetas" @@ -930,7 +968,7 @@ msgstr "Mês seguinte" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Limpar" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Página Não Encontrada" msgid "This page does not exist" msgstr "Esta página não existe" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Permissão negada" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Você não tem permissão para visualizar esta página." @@ -1604,8 +1637,8 @@ msgstr "Erro de servidor" msgid "A server error occurred" msgstr "Ocorreu um erro no servidor" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Erro no formulário" @@ -1613,11 +1646,11 @@ msgstr "Erro no formulário" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Existem erros para um ou mais campos de formulário" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opções" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Ações de código de barras" @@ -2617,11 +2650,11 @@ msgstr "Notificações" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Voltar" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Contar" @@ -5351,38 +5384,10 @@ msgstr "Senha alterada" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Não implementado" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Esta função ainda não foi implementada" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Você não tem permissão para realizar esta ação" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Código de retorno inválido" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "O servidor retornou o estado {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Tempo esgotado" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "A solicitação excedeu o tempo" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Exportando Dados" @@ -5811,73 +5816,73 @@ msgstr "Ocorreu um erro inesperado" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Erro no escaneamento" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Selecionar elementos não conhecidos" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Múltiplos tipos de objetos selecionados" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Ações ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Ações ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Escaneamento de Código de Barras" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Entrada de código de barras" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Ação" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Nenhum item selecionado" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} itens selecionados" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Itens Escaneados" @@ -9132,11 +9137,6 @@ msgstr "Linhas Alocadas" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Selecionar Colunas" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filtro" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filtros da Tabela" @@ -9435,12 +9435,12 @@ msgstr "Adicionar Filtro" msgid "Clear Filters" msgstr "Limpar Filtros" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Nenhum registro encontrado" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "O servidor retornou um tipo de dado incorreto" @@ -9477,7 +9477,7 @@ msgstr "O servidor retornou um tipo de dado incorreto" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Apagar itens selecionados" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Você tem certeza que quer apagar os itens selecionados?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Remover registros selecionados" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Atualizar dados" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/ro/messages.po b/src/frontend/src/locales/ro/messages.po index f69cc7a89f..ed44781adf 100644 --- a/src/frontend/src/locales/ro/messages.po +++ b/src/frontend/src/locales/ro/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ro\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Eroare la redarea componentei" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "A apărut o eroare în timpul redării acestei componente. Consultați consola pentru mai multe informații." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Copiat" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Copiază" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicare" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Editare" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Acțiuni" msgid "Search" msgstr "Caută" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Treceți" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Comenzi de Producție" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Eroare la redarea componentei" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "A apărut o eroare în timpul redării acestei componente. Consultați consola pentru mai multe informații." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Codul de bare nu se potrivește cu tipul de model așteptat" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Nu s-a reușit asocierea codului de bare" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Scanarea codului de bare a eșuat" @@ -786,14 +832,6 @@ msgstr "Deschide în Interfața Administrativă" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Copiat" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Copiază" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Tipărire Etichete" @@ -930,7 +968,7 @@ msgstr "Luna viitoare" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Exportare date" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Sterge" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "Parolă schimbată" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/ru/messages.po b/src/frontend/src/locales/ru/messages.po index 78109deb26..724f50e8e1 100644 --- a/src/frontend/src/locales/ru/messages.po +++ b/src/frontend/src/locales/ru/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ru\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Russian\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Ошибка при отображении компонента" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Произошла ошибка при отрисовки этого компонента. Обратитесь к консоли для получения дополнительной информации." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Скопировано" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Копировать" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Дублировать" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Редактировать" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Действия" msgid "Search" msgstr "Поиск" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Выбрать столбцы" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Пропустить" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Администрирование пользователей" msgid "Build Orders" msgstr "Заказы на сборку" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Не реализовано" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Эта функция еще не реализована" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Доступ запрещён" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "У вас нет прав на выполнение данного действия" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Неверный код возврата" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Сервер вернул статус {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Таймаут" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "Превышено время выполнения запроса" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "Не удалось выполнить процесс" msgid "Process completed successfully" msgstr "Процесс успешно завершён" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Ошибка при отображении компонента" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Произошла ошибка при отрисовки этого компонента. Обратитесь к консоли для получения дополнительной информации." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Штрихкод не соответствует ожидаемому т #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Не удалось обработать штрихкод" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Ошибка сканирования штрихкода" @@ -786,14 +832,6 @@ msgstr "Открыть в панели администратора" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Скопировано" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Копировать" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Печать этикеток" @@ -930,7 +968,7 @@ msgstr "Следующий месяц" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "Экспорт данных" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Очистить" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Страница не найдена" msgid "This page does not exist" msgstr "Данной страницы не существует" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Доступ запрещён" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "У вас нет прав для просмотра этой страницы." @@ -1604,8 +1637,8 @@ msgstr "Ошибка сервера" msgid "A server error occurred" msgstr "Произошла ошибка сервера" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Ошибка формы" @@ -1613,11 +1646,11 @@ msgstr "Ошибка формы" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Существуют ошибки для одного или нескольких полей формы" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Опции" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Действия со штрихкодом" @@ -2617,11 +2650,11 @@ msgstr "Уведомления" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Возврат" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Количество" @@ -5351,38 +5384,10 @@ msgstr "Пароль изменен" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Не реализовано" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Эта функция еще не реализована" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "У вас нет прав на выполнение данного действия" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Неверный код возврата" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Сервер вернул статус {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Таймаут" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "Превышено время выполнения запроса" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Экспортирование данных" @@ -5811,73 +5816,73 @@ msgstr "Произошла неожиданная ошибка" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Элемент уже отсканирован" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "Ошибка API" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Не удалось получить данные" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Ошибка сканирования" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Выбранные элементы не известны" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Выбрано несколько типов объектов" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Действия ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Действия ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Сканирование штрихкодов" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Ввод штрихкода" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Действие" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Объекты не выбраны" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Отсканируйте и выберите объекты для выполнения действий" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Отсканируйте и выберите объекты для выполнения действий" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "Выбрано объектов: {0}" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Отсканированные объекты" @@ -9132,11 +9137,6 @@ msgstr "Зарезервированные позиции" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Выбрать столбцы" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Отфильтровать" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Фильтр таблицы" @@ -9435,12 +9435,12 @@ msgstr "Добавить фильтр" msgid "Clear Filters" msgstr "Очистить фильтр" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Записи не найдены" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "Ошибка загрузки параметров таблицы" @@ -9468,7 +9468,7 @@ msgstr "Ошибка загрузки параметров таблицы" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Сервер вернул неверный тип данных" @@ -9477,7 +9477,7 @@ msgstr "Сервер вернул неверный тип данных" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "Ошибка загрузки данных таблицы" @@ -9494,49 +9494,49 @@ msgstr "Ошибка загрузки данных таблицы" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Показать сведения" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "Просмотреть {model}" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Удалить выбранные элементы" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Вы уверены, что хотите удалить выбранные элементы?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Это действие нельзя будет отменить" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Элементы удалены" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Не удалось удалить элементы" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Используется пользовательский фильтр таблицы" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Удалить выбранные записи" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Обновить данные" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Активные фильтры" diff --git a/src/frontend/src/locales/sk/messages.po b/src/frontend/src/locales/sk/messages.po index f7cef7a7b0..0ebafc665d 100644 --- a/src/frontend/src/locales/sk/messages.po +++ b/src/frontend/src/locales/sk/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sk\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/sl/messages.po b/src/frontend/src/locales/sl/messages.po index c13fdcb7e3..6a0be01254 100644 --- a/src/frontend/src/locales/sl/messages.po +++ b/src/frontend/src/locales/sl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Kopirano" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopiraj" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Podvojeni" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Uredi" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Dejanja" msgid "Search" msgstr "Išči" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Uspešno" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "Odpri v nadzorni plošči" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Kopirano" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopiraj" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/sr/messages.po b/src/frontend/src/locales/sr/messages.po index fa67b7288d..c1c1869f9e 100644 --- a/src/frontend/src/locales/sr/messages.po +++ b/src/frontend/src/locales/sr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Greška u renderovanju komponente" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Desila se greška prilikom renderovanja ovde komponente. Pogledajte konzolu za više informacija" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Iskopirano" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopiraj" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Dupliciraj" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Izmeni" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Akcije" msgid "Search" msgstr "Pretraga" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Izaberi kolone" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Prosledi" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "Nalozi za izradu" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Nije implementirano" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Ovo svojstvo još nije implementirano" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Dozvola odbijena" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Nemate ovlašćenje za ovu aktivnost" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Neispravan povratni kod" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Server je vratio status {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Isteklo je vreme" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "Isteklo je vreme zahteva" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Greška u renderovanju komponente" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Desila se greška prilikom renderovanja ovde komponente. Pogledajte konzolu za više informacija" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Greška pri skeniranju bar koda" @@ -786,14 +832,6 @@ msgstr "Otvori u administratorskom interfejsu" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Iskopirano" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopiraj" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Obriši" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Stranica nije nađena" msgid "This page does not exist" msgstr "Tražena stranica ne postoji" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Dozvola odbijena" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Nemate dozvolu da pristupite traženoj stranici" @@ -1604,8 +1637,8 @@ msgstr "Greška na serveru" msgid "A server error occurred" msgstr "Desila se greška na serverskoj strani" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Greška Obrasca" @@ -1613,11 +1646,11 @@ msgstr "Greška Obrasca" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Postoje greške na jednom ili više polja na obrascu" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Opcije" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Akcije Barkoda" @@ -2617,11 +2650,11 @@ msgstr "Obaveštenja" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Vrati" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Računaj" @@ -5351,38 +5384,10 @@ msgstr "Lozinka promenjena" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Nije implementirano" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Ovo svojstvo još nije implementirano" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Nemate ovlašćenje za ovu aktivnost" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Neispravan povratni kod" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Server je vratio status {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Isteklo je vreme" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "Isteklo je vreme zahteva" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "Desila se greška" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "Stavka već skenirana" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API greška" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "Greška pri prikupljanju podataka instance" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "Greška skeniranja" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Izabrani elementi nisu poznati" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Višestruki tipovi selektovani" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "Skeniranje barkoda" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "Unos bar kodom" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Akcija" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "Nema izabranih stavki" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "Skeniraj i izaberi stavke za akcije" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "Skeniraj i izaberi stavke za akcije" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} stavki selektovano" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "Skenirane stavke" @@ -9132,11 +9137,6 @@ msgstr "Alocirane linije" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Izaberi kolone" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Filteri tabele" @@ -9435,12 +9435,12 @@ msgstr "Dodaj filter" msgid "Clear Filters" msgstr "Očisti filtere" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Nema pronađenih zapisa" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Server je vratio neispravan tip podataka" @@ -9477,7 +9477,7 @@ msgstr "Server je vratio neispravan tip podataka" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Obriši izabrane stavke" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Da li ste sigurni da želite da obrišete ove izabrane stavke?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Ova akcija se ne može poništiti" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "Prilagođeni filteri tabele su aktivni" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Obriši izabrane zapise" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Osveži podatke" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/sv/messages.po b/src/frontend/src/locales/sv/messages.po index 4b91167df5..341e69e7ba 100644 --- a/src/frontend/src/locales/sv/messages.po +++ b/src/frontend/src/locales/sv/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sv\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Fel vid rendering av komponent" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Ett fel inträffade vid rendering av denna komponent. Se konsolen för mer information." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Kopierad" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopiera" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Duplicera" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Redigera" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Åtgärder" msgid "Search" msgstr "Sök" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Välj kolumner" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Lyckades" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Admin" msgid "Build Orders" msgstr "Byggordrar" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Inte implementerad" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Denna funktionen har inte implementerats" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Åtkomst nekad" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Du har inte behörighet att utföra denna åtgärd" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Ogiltig svarskod" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Servern returnerade status {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Fel vid rendering av komponent" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Ett fel inträffade vid rendering av denna komponent. Se konsolen för mer information." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "Öppna i administratörsgränssnittet" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Kopierad" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopiera" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "Nästa månad" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Rensa" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Sidan hittades inte" msgid "This page does not exist" msgstr "Sidan finns inte" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Åtkomst nekad" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Du saknar behörighet att visa denna sida." @@ -1604,8 +1637,8 @@ msgstr "Serverfel" msgid "A server error occurred" msgstr "Ett serverfel inträffade" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Formulär fel" @@ -1613,11 +1646,11 @@ msgstr "Formulär fel" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Fel finns för ett eller flera formulärfält" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Alternativ" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Streckkods åtgärder" @@ -2617,11 +2650,11 @@ msgstr "Notifikationer" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "Lösenord ändrat" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Inte implementerad" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Denna funktionen har inte implementerats" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Du har inte behörighet att utföra denna åtgärd" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Ogiltig svarskod" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Servern returnerade status {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "Ett oväntat fel har inträffat" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API-fel" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Valda element är inte kända" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Flera objekttyper valda" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "Åtgärder ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "Åtgärder ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Åtgärd" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} artiklar valda" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Välj kolumner" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filter" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "Lägg till filter" msgid "Clear Filters" msgstr "Rensa filter" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Inga resultat hittades" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "Visa detaljer" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Uppdatera data" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Aktiva filter" diff --git a/src/frontend/src/locales/th/messages.po b/src/frontend/src/locales/th/messages.po index 9a23579d83..e979ab6818 100644 --- a/src/frontend/src/locales/th/messages.po +++ b/src/frontend/src/locales/th/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: th\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Thai\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "" msgid "Search" msgstr "" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "" msgid "Build Orders" msgstr "" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "" msgid "This page does not exist" msgstr "" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "" @@ -1604,8 +1637,8 @@ msgstr "" msgid "A server error occurred" msgstr "" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "" @@ -1613,11 +1646,11 @@ msgstr "" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/tr/messages.po b/src/frontend/src/locales/tr/messages.po index 15a7df2542..42679f5a14 100644 --- a/src/frontend/src/locales/tr/messages.po +++ b/src/frontend/src/locales/tr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: tr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Bileşen görüntüleme hatası" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Bu bileşeni görüntülerken bir hata oluştu. Daha fazla bilgi için konsola bakın." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Kopyalandı" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Kopyala" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "İkizini Oluştur" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Düzenle" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Eylemler" msgid "Search" msgstr "Ara" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Sütunları Seç" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Geç" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Yönetici" msgid "Build Orders" msgstr "Üretim Emirleri" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Gerçeklenmemiş" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Bu özellik henüz gerçeklenmemiş" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "İzin Reddedildi" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Bu eylemi gerçekleştirme izniniz yok" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Geçersiz Dönüş Kodu" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Sunucu {returnCode} durumunu döndürdü" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "Zaman Aşımı" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "İstek zaman aşımı" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "İşlem başarısız" msgid "Process completed successfully" msgstr "İşlem başarı ile tamamlandı" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Bileşen görüntüleme hatası" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Bu bileşeni görüntülerken bir hata oluştu. Daha fazla bilgi için konsola bakın." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "Barkod beklenen model ile uyuşmuyor" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "Barkod işlenemedi" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Barkod taranamadı" @@ -786,14 +832,6 @@ msgstr "Yönetici arayüzünde aç" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Kopyalandı" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Kopyala" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Etiket Yazdırma" @@ -930,7 +968,7 @@ msgstr "Sonraki ay" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Temizle" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Sayfa Bulunamadı" msgid "This page does not exist" msgstr "Bu sayfa mevcut değil" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "İzin Reddedildi" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Bu sayfayı görme izniniz yok." @@ -1604,8 +1637,8 @@ msgstr "Hatayı Kaydet" msgid "A server error occurred" msgstr "Bir sunucu hatası oluştu" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Form Hatası" @@ -1613,11 +1646,11 @@ msgstr "Form Hatası" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Bir veya daha fazla form alanında hatalar var" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Ayarlar" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Barkod Eylemleri" @@ -2617,11 +2650,11 @@ msgstr "Bildirimler" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "Geri Dön" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Say" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Gerçeklenmemiş" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Bu özellik henüz gerçeklenmemiş" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Bu eylemi gerçekleştirme izniniz yok" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Geçersiz Dönüş Kodu" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Sunucu {returnCode} durumunu döndürdü" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "Zaman Aşımı" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "İstek zaman aşımı" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "Veriler Dışa Aktarılıyor" @@ -5811,73 +5816,73 @@ msgstr "Beklenmeyen bir hata oluştu" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Seçilen elemanlar bilinmiyor" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Birden çok nesne türü seçildi" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Eylem" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "{0} öge seçildi" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "Tahsis Edilen Kalemler" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Sütunları Seç" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Filtre" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Tablo Süzgeçleri" @@ -9435,12 +9435,12 @@ msgstr "Filtre Ekle" msgid "Clear Filters" msgstr "Süzgeçleri Temizle" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Hiç kayıt bulunamadı" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Sunucu yanlış veri türü döndürdü" @@ -9477,7 +9477,7 @@ msgstr "Sunucu yanlış veri türü döndürdü" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Seçilen Ögeleri Sil" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Seçilen ögeleri silmek istediğinize emin misiniz?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "Bu işlem geri alınamaz" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "Ürünler silindi" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "Ürünlerin silinmesi başarısız" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Seçili kayıtları sil" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Veriyi yenile" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "Aktif Filtreler" diff --git a/src/frontend/src/locales/uk/messages.po b/src/frontend/src/locales/uk/messages.po index f9f30f3c61..ff44c7fb76 100644 --- a/src/frontend/src/locales/uk/messages.po +++ b/src/frontend/src/locales/uk/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: uk\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Помилка рендерингу компонента" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Сталася помилка під час рендерингу цього компонента. Передивитись в консоль для отримання додаткової інформації." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Скопійовано" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Копіювати" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Дублювати" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Редагувати" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Дії" msgid "Search" msgstr "Пошук" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Пропустити" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Адмін" msgid "Build Orders" msgstr "Замовлення на збірку" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Дозвіл відхилено" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Помилка рендерингу компонента" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Сталася помилка під час рендерингу цього компонента. Передивитись в консоль для отримання додаткової інформації." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Не вдалося сканувати штрих-код" @@ -786,14 +832,6 @@ msgstr "Відкрити в інтерфейсі адміністратора" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Скопійовано" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Копіювати" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "Друк етикеток" @@ -930,7 +968,7 @@ msgstr "Наступний місяць" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Очистити" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Сторінку не знайдено" msgid "This page does not exist" msgstr "Цієї сторінки не існує" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Дозвіл відхилено" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "У вас немає дозволу на перегляд цієї сторінки." @@ -1604,8 +1637,8 @@ msgstr "Помилка сервера" msgid "A server error occurred" msgstr "Сталася помилка сервера" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Помилка форми" @@ -1613,11 +1646,11 @@ msgstr "Помилка форми" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Існують деякі помилки для одного або декількох полів" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "Параметри" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "" @@ -2617,11 +2650,11 @@ msgstr "Сповіщення" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Кількість" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "" @@ -9435,12 +9435,12 @@ msgstr "" msgid "Clear Filters" msgstr "" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "" @@ -9477,7 +9477,7 @@ msgstr "" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/vi/messages.po b/src/frontend/src/locales/vi/messages.po index d8d29f142c..ddcc4af076 100644 --- a/src/frontend/src/locales/vi/messages.po +++ b/src/frontend/src/locales/vi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: vi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "Lỗi khi hiển thị thành phần" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "Một lỗi đã xảy ra trong quá trình hiển thị thành phần này. Vui lòng tham khảo bảng điều khiển để biết thêm thông tin." + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "Đã sao chép" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "Sao chép" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "Nhân bản" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "Sửa" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "Chức năng" msgid "Search" msgstr "Tìm kiếm" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "Chọn cột" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "Hoàn tất" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "Quản trị" msgid "Build Orders" msgstr "Đơn đặt bản dựng" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "Chưa triển khai" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "Tính năng này vẫn chưa được triển khai" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "Từ chối phân quyền" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "Bạn không có quyền thực hiện hành động này" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "Mã trả hàng không hợp lệ" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "Mã phản hồi của máy chủ {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "Lỗi khi hiển thị thành phần" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "Một lỗi đã xảy ra trong quá trình hiển thị thành phần này. Vui lòng tham khảo bảng điều khiển để biết thêm thông tin." - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "Quét mã vạch thất bại" @@ -786,14 +832,6 @@ msgstr "Mở trong giao diện quản trị" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "Đã sao chép" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "Sao chép" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "In nhãn" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "Clear" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "Không tìm thấy trang" msgid "This page does not exist" msgstr "Trang không tồn tại" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "Từ chối phân quyền" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "Bạn không có quyền xem trang này" @@ -1604,8 +1637,8 @@ msgstr "Lỗi máy chủ" msgid "A server error occurred" msgstr "Xảy ra lỗi máy chủ" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "Lỗi form" @@ -1613,11 +1646,11 @@ msgstr "Lỗi form" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "Lỗi nhập liệu" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "Chức năng mã vạch" @@ -2617,11 +2650,11 @@ msgstr "Thông báo" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "Đếm" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "Chưa triển khai" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "Tính năng này vẫn chưa được triển khai" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "Bạn không có quyền thực hiện hành động này" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "Mã trả hàng không hợp lệ" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "Mã phản hồi của máy chủ {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "Đã xảy ra lỗi không mong muốn." #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "Chọn phần tử chưa được biết đến" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "Đã chọn nhiều loại đối tượng" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "Thao tác" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "đã chọn {0} mục" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "Chọn cột" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "Bộ lọc" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "Bộ lọc bảng" @@ -9435,12 +9435,12 @@ msgstr "Thêm bộ lọc" msgid "Clear Filters" msgstr "Xóa bộ lọc" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "Không tìm thấy biểu ghi" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "Máy chủ trả chưa đúng dữ liệu" @@ -9477,7 +9477,7 @@ msgstr "Máy chủ trả chưa đúng dữ liệu" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "Xóa mục đã chọn" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "Bạn muốn xóa các mục đã chọn?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "Xóa bản ghi được chọn" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "Làm mới dữ liệu" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" diff --git a/src/frontend/src/locales/zh_Hans/messages.po b/src/frontend/src/locales/zh_Hans/messages.po index 095c57dcc0..16801c3b10 100644 --- a/src/frontend/src/locales/zh_Hans/messages.po +++ b/src/frontend/src/locales/zh_Hans/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: zh\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "渲染组件出错" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "渲染此组件时发生错误。请参阅控制台获取更多信息。" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "已复制" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "复制" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "复制" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "编辑" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "操作" msgid "Search" msgstr "搜索" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "选择列" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "通过" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "管理员" msgid "Build Orders" msgstr "生产订单" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "尚未实现" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "此功能尚未实现" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "权限受限" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "您无权执行此操作。" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "无效返回码" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "服务器返回状态 {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "超时" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "请求已超时" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "处理失败" msgid "Process completed successfully" msgstr "处理成功" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "渲染组件出错" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "渲染此组件时发生错误。请参阅控制台获取更多信息。" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "条形码与预期型号不匹配" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "条形码处理失败" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "扫描条形码失败" @@ -786,14 +832,6 @@ msgstr "在管理员界面打开" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "已复制" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "复制" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "打印标签" @@ -930,7 +968,7 @@ msgstr "下个月" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "出口数据" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "清除" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "无法找到页面" msgid "This page does not exist" msgstr "此页面不存在" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "权限受限" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "您没有权限查看此网页。" @@ -1604,8 +1637,8 @@ msgstr "服务器错误" msgid "A server error occurred" msgstr "服务器出错。" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "表单错误" @@ -1613,11 +1646,11 @@ msgstr "表单错误" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "一个或多个表单字段存在错误" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "选项" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "条形码操作" @@ -2616,14 +2649,14 @@ msgstr "通知" #~ msgid "Administrator Mode" #~ msgstr "Administrator Mode" -#: src/components/nav/Header.tsx:231 -msgid "Admin Mode" -msgstr "" - #: src/components/nav/Header.tsx:231 msgid "Superuser Mode" msgstr "超级用户模式" +#: src/components/nav/Header.tsx:231 +msgid "Admin Mode" +msgstr "" + #: src/components/nav/Header.tsx:237 msgid "The current user has elevated privileges and should not be used for regular usage." msgstr "当前用户拥有提升权限,不应用于日常常规操作。" @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "退货" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "总计" @@ -5351,38 +5384,10 @@ msgstr "密码已更改" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "尚未实现" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "此功能尚未实现" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "您无权执行此操作。" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "无效返回码" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "服务器返回状态 {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "超时" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "请求已超时" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "正在导出数据" @@ -5811,73 +5816,73 @@ msgstr "发生意外错误。" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "项目已扫描" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "API 错误" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "获取实例数据失败" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "扫描错误" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "所选元素未知" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "选择多个对象类型" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "操作 ... " + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "操作 ... " - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "条形码扫描" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "条形码输入" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "操作" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "未选中项目" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "扫描并选择项目以执行操作" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "扫描并选择项目以执行操作" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "已选择 {0} 项" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "已扫描项目" @@ -9132,11 +9137,6 @@ msgstr "已分配的项目" msgid "Line Item" msgstr "行项目" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "选择列" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "过滤器" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "表格筛选" @@ -9435,12 +9435,12 @@ msgstr "添加过滤条件" msgid "Clear Filters" msgstr "清除筛选" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "没有找到记录" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "表格选项加载错误" @@ -9468,7 +9468,7 @@ msgstr "表格选项加载错误" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "服务器返回了错误的数据类型" @@ -9477,7 +9477,7 @@ msgstr "服务器返回了错误的数据类型" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "表格数据加载错误" @@ -9494,49 +9494,49 @@ msgstr "表格数据加载错误" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "查看详情" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "{model} 视图" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "删除所选项目" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "确定要删除所选的项目吗?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "该操作无法撤销" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "物料已删除" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "删除物料失败" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "当前启用了自定义表格筛选器" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "删除选中的记录" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "刷新数据" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "当前生效的筛选条件" diff --git a/src/frontend/src/locales/zh_Hant/messages.po b/src/frontend/src/locales/zh_Hant/messages.po index d0c8abfba7..fcd416555b 100644 --- a/src/frontend/src/locales/zh_Hant/messages.po +++ b/src/frontend/src/locales/zh_Hant/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: zh\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-11 03:27\n" +"PO-Revision-Date: 2026-04-13 10:40\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -18,9 +18,25 @@ msgstr "" "X-Crowdin-File: /src/frontend/src/locales/en/messages.po\n" "X-Crowdin-File-ID: 252\n" +#: lib/components/Boundary.tsx:14 +msgid "Error rendering component" +msgstr "渲染組件出錯" + +#: lib/components/Boundary.tsx:16 +msgid "An error occurred while rendering this component. Refer to the console for more information." +msgstr "渲染此組件時發生錯誤。請參閲控制枱獲取更多信息。" + +#: lib/components/CopyButton.tsx:49 +msgid "Copied" +msgstr "已複製" + +#: lib/components/CopyButton.tsx:49 +msgid "Copy" +msgstr "複製" + #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 -#: src/pages/Index/Scan.tsx:64 +#: src/pages/Index/Scan.tsx:62 msgid "Duplicate" msgstr "複製" @@ -30,7 +46,7 @@ msgid "Edit" msgstr "編輯" #: lib/components/RowActions.tsx:56 -#: src/components/forms/ApiForm.tsx:770 +#: src/components/forms/ApiForm.tsx:769 #: src/components/items/ActionDropdown.tsx:257 #: src/components/items/RoleTable.tsx:155 #: src/hooks/UseForm.tsx:170 @@ -77,6 +93,11 @@ msgstr "操作" msgid "Search" msgstr "搜尋" +#: lib/components/TableColumnSelect.tsx:16 +#: lib/components/TableColumnSelect.tsx:23 +msgid "Select Columns" +msgstr "選擇列" + #: lib/components/YesNoButton.tsx:20 msgid "Pass" msgstr "通過" @@ -582,7 +603,7 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:71 #: src/states/IconState.tsx:46 #: src/states/IconState.tsx:76 -#: src/tables/InvenTreeTableHeader.tsx:124 +#: src/tables/InvenTreeTableHeader.tsx:128 #: src/tables/bom/BomTable.tsx:557 #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 @@ -608,6 +629,39 @@ msgstr "管理" msgid "Build Orders" msgstr "生產訂單" +#: lib/functions/Notification.tsx:11 +msgid "Not implemented" +msgstr "尚未實現" + +#: lib/functions/Notification.tsx:12 +msgid "This feature is not yet implemented" +msgstr "此功能尚未實現" + +#: lib/functions/Notification.tsx:23 +#: src/components/errors/PermissionDenied.tsx:8 +msgid "Permission Denied" +msgstr "權限受限" + +#: lib/functions/Notification.tsx:24 +msgid "You do not have permission to perform this action" +msgstr "您無權執行此操作。" + +#: lib/functions/Notification.tsx:35 +msgid "Invalid Return Code" +msgstr "無效返回碼" + +#: lib/functions/Notification.tsx:36 +msgid "Server returned status {returnCode}" +msgstr "服務器返回狀態 {returnCode}" + +#: lib/functions/Notification.tsx:46 +msgid "Timeout" +msgstr "超時" + +#: lib/functions/Notification.tsx:47 +msgid "The request timed out" +msgstr "請求已超時" + #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" @@ -617,14 +671,6 @@ msgstr "" msgid "Process completed successfully" msgstr "" -#: src/components/Boundary.tsx:14 -msgid "Error rendering component" -msgstr "渲染組件出錯" - -#: src/components/Boundary.tsx:16 -msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "渲染此組件時發生錯誤。請參閲控制枱獲取更多信息。" - #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" #~ msgstr "Title" @@ -704,7 +750,7 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 #: src/components/editors/NotesEditor.tsx:118 -#: src/components/forms/ApiForm.tsx:496 +#: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:45 @@ -718,7 +764,7 @@ msgid "Failed to handle barcode" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:183 -#: src/pages/Index/Scan.tsx:129 +#: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" msgstr "" @@ -786,14 +832,6 @@ msgstr "在管理員界面打開" #~ msgid "Copy to clipboard" #~ msgstr "Copy to clipboard" -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copied" -msgstr "已複製" - -#: src/components/buttons/CopyButton.tsx:50 -msgid "Copy" -msgstr "複製" - #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" msgstr "" @@ -930,7 +968,7 @@ msgstr "" #~ msgstr "Download data" #: src/components/calendar/Calendar.tsx:194 -#: src/tables/InvenTreeTableHeader.tsx:288 +#: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" msgstr "" @@ -1351,7 +1389,7 @@ msgid "Clear" msgstr "清除" #: src/components/details/DetailsImage.tsx:306 -#: src/components/forms/ApiForm.tsx:712 +#: src/components/forms/ApiForm.tsx:711 #: src/contexts/ThemeContext.tsx:56 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 @@ -1587,11 +1625,6 @@ msgstr "無法找到頁面" msgid "This page does not exist" msgstr "此頁面不存在" -#: src/components/errors/PermissionDenied.tsx:8 -#: src/functions/notifications.tsx:25 -msgid "Permission Denied" -msgstr "權限受限" - #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." msgstr "您沒有權限查看此網頁。" @@ -1604,8 +1637,8 @@ msgstr "服務器錯誤" msgid "A server error occurred" msgstr "服務器出錯。" -#: src/components/forms/ApiForm.tsx:108 -#: src/components/forms/ApiForm.tsx:624 +#: src/components/forms/ApiForm.tsx:107 +#: src/components/forms/ApiForm.tsx:623 msgid "Form Error" msgstr "表單錯誤" @@ -1613,11 +1646,11 @@ msgstr "表單錯誤" #~ msgid "Form Errors Exist" #~ msgstr "Form Errors Exist" -#: src/components/forms/ApiForm.tsx:634 +#: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" msgstr "一個或多個表單字段存在錯誤" -#: src/components/forms/ApiForm.tsx:750 +#: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" @@ -2182,8 +2215,8 @@ msgstr "選項" #~ msgstr "Link custom barcode" #: src/components/items/ActionDropdown.tsx:171 -#: src/tables/InvenTreeTableHeader.tsx:192 -#: src/tables/InvenTreeTableHeader.tsx:193 +#: src/tables/InvenTreeTableHeader.tsx:196 +#: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" msgstr "條碼操作" @@ -2617,11 +2650,11 @@ msgstr "通知" #~ msgstr "Administrator Mode" #: src/components/nav/Header.tsx:231 -msgid "Admin Mode" +msgid "Superuser Mode" msgstr "" #: src/components/nav/Header.tsx:231 -msgid "Superuser Mode" +msgid "Admin Mode" msgstr "" #: src/components/nav/Header.tsx:237 @@ -5007,7 +5040,7 @@ msgid "Return" msgstr "退貨" #: src/forms/StockForms.tsx:988 -#: src/pages/Index/Scan.tsx:182 +#: src/pages/Index/Scan.tsx:180 msgid "Count" msgstr "總計" @@ -5351,38 +5384,10 @@ msgstr "" #~ msgid "method parameter not supplied" #~ msgstr "method parameter not supplied" -#: src/functions/notifications.tsx:13 -msgid "Not implemented" -msgstr "尚未實現" - -#: src/functions/notifications.tsx:14 -msgid "This feature is not yet implemented" -msgstr "此功能尚未實現" - #: src/functions/notifications.tsx:24 #~ msgid "Permission denied" #~ msgstr "Permission denied" -#: src/functions/notifications.tsx:26 -msgid "You do not have permission to perform this action" -msgstr "您無權執行此操作。" - -#: src/functions/notifications.tsx:37 -msgid "Invalid Return Code" -msgstr "無效返回碼" - -#: src/functions/notifications.tsx:38 -msgid "Server returned status {returnCode}" -msgstr "服務器返回狀態 {returnCode}" - -#: src/functions/notifications.tsx:48 -msgid "Timeout" -msgstr "超時" - -#: src/functions/notifications.tsx:49 -msgid "The request timed out" -msgstr "請求已超時" - #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" msgstr "" @@ -5811,73 +5816,73 @@ msgstr "發生意外錯誤。" #~ msgid "Design <0/>" #~ msgstr "Design <0/>" -#: src/pages/Index/Scan.tsx:65 +#: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" msgstr "" -#: src/pages/Index/Scan.tsx:82 +#: src/pages/Index/Scan.tsx:80 msgid "API Error" msgstr "" -#: src/pages/Index/Scan.tsx:83 +#: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" msgstr "" -#: src/pages/Index/Scan.tsx:130 +#: src/pages/Index/Scan.tsx:128 msgid "Scan Error" msgstr "" -#: src/pages/Index/Scan.tsx:162 +#: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" msgstr "所選元素未知" -#: src/pages/Index/Scan.tsx:169 +#: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" msgstr "選擇多個對象類型" +#: src/pages/Index/Scan.tsx:175 +msgid "Actions ... " +msgstr "" + #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." #~ msgstr "Actions ..." -#: src/pages/Index/Scan.tsx:177 -msgid "Actions ... " -msgstr "" - -#: src/pages/Index/Scan.tsx:194 -#: src/pages/Index/Scan.tsx:198 +#: src/pages/Index/Scan.tsx:192 +#: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" msgstr "" -#: src/pages/Index/Scan.tsx:207 +#: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" msgstr "" -#: src/pages/Index/Scan.tsx:214 +#: src/pages/Index/Scan.tsx:212 msgid "Action" msgstr "操作" -#: src/pages/Index/Scan.tsx:217 +#: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" msgstr "" +#: src/pages/Index/Scan.tsx:216 +msgid "Scan and select items to perform actions" +msgstr "" + #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" #~ msgstr "Manual input" -#: src/pages/Index/Scan.tsx:218 -msgid "Scan and select items to perform actions" -msgstr "" - #: src/pages/Index/Scan.tsx:218 #~ msgid "Image Barcode" #~ msgstr "Image Barcode" #. placeholder {0}: selection.length -#: src/pages/Index/Scan.tsx:223 +#: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" msgstr "已選擇 {0} 項" -#: src/pages/Index/Scan.tsx:235 +#: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" msgstr "" @@ -9132,11 +9137,6 @@ msgstr "已分配的項目" msgid "Line Item" msgstr "" -#: src/tables/ColumnSelect.tsx:16 -#: src/tables/ColumnSelect.tsx:23 -msgid "Select Columns" -msgstr "選擇列" - #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" #~ msgstr "Excel" @@ -9423,7 +9423,7 @@ msgid "Filter" msgstr "過濾器" #: src/tables/FilterSelectDrawer.tsx:354 -#: src/tables/InvenTreeTableHeader.tsx:259 +#: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" msgstr "表格篩選" @@ -9435,12 +9435,12 @@ msgstr "添加過濾條件" msgid "Clear Filters" msgstr "清除篩選" -#: src/tables/InvenTreeTable.tsx:47 -#: src/tables/InvenTreeTable.tsx:522 +#: src/tables/InvenTreeTable.tsx:52 +#: src/tables/InvenTreeTable.tsx:526 msgid "No records found" msgstr "沒有找到記錄" -#: src/tables/InvenTreeTable.tsx:154 +#: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" msgstr "" @@ -9468,7 +9468,7 @@ msgstr "" #~ msgid "This action cannot be undone!" #~ msgstr "This action cannot be undone!" -#: src/tables/InvenTreeTable.tsx:567 +#: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" msgstr "服務器返回了錯誤的數據類型" @@ -9477,7 +9477,7 @@ msgstr "服務器返回了錯誤的數據類型" #~ msgid "Print actions" #~ msgstr "Print actions" -#: src/tables/InvenTreeTable.tsx:600 +#: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" msgstr "" @@ -9494,49 +9494,49 @@ msgstr "" #~ msgid "Clear custom query filters" #~ msgstr "Clear custom query filters" -#: src/tables/InvenTreeTable.tsx:729 +#: src/tables/InvenTreeTable.tsx:733 msgid "View details" msgstr "" -#: src/tables/InvenTreeTable.tsx:732 +#: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:103 +#: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" msgstr "刪除所選項目" -#: src/tables/InvenTreeTableHeader.tsx:107 +#: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" msgstr "確定要刪除所選的項目嗎?" -#: src/tables/InvenTreeTableHeader.tsx:109 +#: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:120 +#: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:125 +#: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:176 +#: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" msgstr "" -#: src/tables/InvenTreeTableHeader.tsx:202 +#: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" msgstr "刪除選中的記錄" -#: src/tables/InvenTreeTableHeader.tsx:222 +#: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" msgstr "刷新數據" -#: src/tables/InvenTreeTableHeader.tsx:271 +#: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" msgstr "" From cead09bcd8e65cde5db1ec744365c5bed704a5f1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 Apr 2026 12:48:15 +1000 Subject: [PATCH 07/71] Fix for SVG sanitizing (#11742) - Clear our non-breaking-space characters - These can break SVG rendering in the browser - Ref: https://github.com/inventree/InvenTree/pull/11655 --- src/backend/InvenTree/InvenTree/sanitizer.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/backend/InvenTree/InvenTree/sanitizer.py b/src/backend/InvenTree/InvenTree/sanitizer.py index 55dbd24770..ea5936c65a 100644 --- a/src/backend/InvenTree/InvenTree/sanitizer.py +++ b/src/backend/InvenTree/InvenTree/sanitizer.py @@ -345,4 +345,8 @@ def sanitize_svg( link_rel=None, ) + # Replace non-breaking spaces with regular spaces to prevent SVG rendering issues + for nbsp in [' ', ' ']: + cleaned = cleaned.replace(nbsp, ' ') + return cleaned From 068f05e58afd68f077bf25ab55e2eb1346794176 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 09:11:30 +1000 Subject: [PATCH 08/71] chore(deps-dev): bump pytest from 9.0.2 to 9.0.3 in /src/backend (#11743) * chore(deps-dev): bump pytest from 9.0.2 to 9.0.3 in /src/backend Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.2 to 9.0.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3) --- updated-dependencies: - dependency-name: pytest dependency-version: 9.0.3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] * fix style --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Matthias Mair --- src/backend/requirements-dev-3.14.txt | 6 +++--- src/backend/requirements-dev.txt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backend/requirements-dev-3.14.txt b/src/backend/requirements-dev-3.14.txt index b2de8b148b..2623076777 100644 --- a/src/backend/requirements-dev-3.14.txt +++ b/src/backend/requirements-dev-3.14.txt @@ -550,9 +550,9 @@ pyproject-hooks==1.2.0 \ # via # build # pip-tools -pytest==9.0.2 \ - --hash=sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b \ - --hash=sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11 +pytest==9.0.3 \ + --hash=sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9 \ + --hash=sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c # via # pytest-codspeed # pytest-django diff --git a/src/backend/requirements-dev.txt b/src/backend/requirements-dev.txt index 34203e179f..23d05f86ab 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -540,9 +540,9 @@ pyproject-hooks==1.2.0 \ # via # build # pip-tools -pytest==9.0.2 \ - --hash=sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b \ - --hash=sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11 +pytest==9.0.3 \ + --hash=sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9 \ + --hash=sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c # via # pytest-codspeed # pytest-django From 1ab0182e9244c80670015df471aaf42f56673e4c Mon Sep 17 00:00:00 2001 From: ZhangzrJerry Date: Wed, 15 Apr 2026 07:11:52 +0800 Subject: [PATCH 09/71] Update docker_install.md (#11746) --- docs/docs/start/docker_install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/start/docker_install.md b/docs/docs/start/docker_install.md index cb4f29da35..125d2e924f 100644 --- a/docs/docs/start/docker_install.md +++ b/docs/docs/start/docker_install.md @@ -241,7 +241,7 @@ By default, the Dockerized InvenTree web server binds to all available network i This can be adjusted using the following environment variables: | Environment Variable | Default | -| --- | --- | --- | --- | +| --- | --- | | INVENTREE_WEB_ADDR | 0.0.0.0 | | INVENTREE_WEB_PORT | 8000 | From 1fa8edbef6a16c573ec064bacb17a6545084ecff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 09:12:03 +1000 Subject: [PATCH 10/71] chore(deps): bump the dependencies group with 3 updates (#11740) Bumps the dependencies group with 3 updates: [docker/login-action](https://github.com/docker/login-action), [CodSpeedHQ/action](https://github.com/codspeedhq/action) and [ad-m/github-push-action](https://github.com/ad-m/github-push-action). Updates `docker/login-action` from 4.0.0 to 4.1.0 - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/b45d80f862d83dbcd57f89517bcf500b2ab88fb2...4907a6ddec9925e35a0a9e82d7399ccc52663121) Updates `CodSpeedHQ/action` from 4.12.1 to 4.13.0 - [Release notes](https://github.com/codspeedhq/action/releases) - [Changelog](https://github.com/CodSpeedHQ/action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codspeedhq/action/compare/1c8ae4843586d3ba879736b7f6b7b0c990757fab...db35df748deb45fdef0960669f57d627c1956c30) Updates `ad-m/github-push-action` from 1.0.0 to 1.1.0 - [Release notes](https://github.com/ad-m/github-push-action/releases) - [Commits](https://github.com/ad-m/github-push-action/compare/77c5b412c50b723d2a4fbc6d71fb5723bcd439aa...4cc74773234f74829a8c21bc4d69dd4be9cfa599) --- updated-dependencies: - dependency-name: docker/login-action dependency-version: 4.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: CodSpeedHQ/action dependency-version: 4.13.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: ad-m/github-push-action dependency-version: 1.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Matthias Mair --- .github/workflows/docker.yaml | 4 ++-- .github/workflows/qc_checks.yaml | 4 ++-- .github/workflows/release.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 3a986873f1..eb11fe008e 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -185,14 +185,14 @@ jobs: fi - name: Login to Dockerhub if: github.event_name != 'pull_request' && steps.docker_login.outputs.skip_dockerhub_login != 'true' - uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # pin@v4.1.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log into registry ghcr.io if: github.event_name != 'pull_request' - uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # pin@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 26186948d0..1dd9e318a0 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -363,7 +363,7 @@ jobs: pip install . if: needs.paths-filter.outputs.submit-performance == 'true' - name: Performance Reporting - uses: CodSpeedHQ/action@1c8ae4843586d3ba879736b7f6b7b0c990757fab # pin@v4 + uses: CodSpeedHQ/action@db35df748deb45fdef0960669f57d627c1956c30 # pin@v4 # check if we are in inventree/inventree - reporting only works in that OIDC context if: github.repository == 'inventree/InvenTree' && needs.paths-filter.outputs.submit-performance == 'true' with: @@ -454,7 +454,7 @@ jobs: env: node_version: '>=20.19.0' - name: Performance Reporting - uses: CodSpeedHQ/action@1c8ae4843586d3ba879736b7f6b7b0c990757fab # pin@v4 + uses: CodSpeedHQ/action@db35df748deb45fdef0960669f57d627c1956c30 # pin@v4 with: mode: walltime run: inv dev.test --pytest diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index aa77d5282c..ff8afc0604 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -28,7 +28,7 @@ jobs: pip install --require-hashes -r contrib/dev_reqs/requirements.txt python3 .github/scripts/version_check.py - name: Push to Stable Branch - uses: ad-m/github-push-action@77c5b412c50b723d2a4fbc6d71fb5723bcd439aa # pin@v1.0.0 + uses: ad-m/github-push-action@4cc74773234f74829a8c21bc4d69dd4be9cfa599 # pin@v1.1.0 if: env.stable_release == 'true' with: github_token: ${{ secrets.GITHUB_TOKEN }} From 9324f7c9bb0ca219dc2cb4143f090c884c488c97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 10:57:46 +1000 Subject: [PATCH 11/71] chore(deps): bump dompurify from 3.3.3 to 3.4.0 in /src/frontend (#11756) Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.3.3 to 3.4.0. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](https://github.com/cure53/DOMPurify/compare/3.3.3...3.4.0) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.4.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/frontend/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock index 608b72c475..546d1c2067 100644 --- a/src/frontend/yarn.lock +++ b/src/frontend/yarn.lock @@ -3029,9 +3029,9 @@ dom-helpers@^5.0.1: csstype "^3.0.2" dompurify@^3.2.4: - version "3.3.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.3.tgz#680cae8af3e61320ddf3666a3bc843f7b291b2b6" - integrity sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA== + version "3.4.0" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.0.tgz#b1fc33ebdadb373241621e0a30e4ad81573dfd0b" + integrity sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg== optionalDependencies: "@types/trusted-types" "^2.0.7" From e6802beb07f43f84287168f354dd9af9be2da14f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:16:30 +1000 Subject: [PATCH 12/71] chore(deps): bump pypdf from 6.10.0 to 6.10.2 in /src/backend (#11759) * chore(deps): bump pypdf from 6.10.0 to 6.10.2 in /src/backend Bumps [pypdf](https://github.com/py-pdf/pypdf) from 6.10.0 to 6.10.2. - [Release notes](https://github.com/py-pdf/pypdf/releases) - [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md) - [Commits](https://github.com/py-pdf/pypdf/compare/6.10.0...6.10.2) --- updated-dependencies: - dependency-name: pypdf dependency-version: 6.10.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] * fix style --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Matthias Mair --- src/backend/requirements-3.14.txt | 6 +++--- src/backend/requirements.txt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backend/requirements-3.14.txt b/src/backend/requirements-3.14.txt index d02c74e54e..59ef355ff0 100644 --- a/src/backend/requirements-3.14.txt +++ b/src/backend/requirements-3.14.txt @@ -1717,9 +1717,9 @@ pynacl==1.6.2 \ # via # -c src/backend/requirements.txt # paramiko -pypdf==6.10.0 \ - --hash=sha256:4c5a48ba258c37024ec2505f7e8fd858525f5502784a2e1c8d415604af29f6ef \ - --hash=sha256:90005e959e1596c6e6c84c8b0ad383285b3e17011751cedd17f2ce8fcdfc86de +pypdf==6.10.2 \ + --hash=sha256:7d09ce108eff6bf67465d461b6ef352dcb8d84f7a91befc02f904455c6eea11d \ + --hash=sha256:aa53be9826655b51c96741e5d7983ca224d898ac0a77896e64636810517624aa # via # -c src/backend/requirements.txt # -r src/backend/requirements.in diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index 640ab46e5a..c28d63529c 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -1523,9 +1523,9 @@ pynacl==1.6.2 \ --hash=sha256:d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2 \ --hash=sha256:fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9 # via paramiko -pypdf==6.10.0 \ - --hash=sha256:4c5a48ba258c37024ec2505f7e8fd858525f5502784a2e1c8d415604af29f6ef \ - --hash=sha256:90005e959e1596c6e6c84c8b0ad383285b3e17011751cedd17f2ce8fcdfc86de +pypdf==6.10.2 \ + --hash=sha256:7d09ce108eff6bf67465d461b6ef352dcb8d84f7a91befc02f904455c6eea11d \ + --hash=sha256:aa53be9826655b51c96741e5d7983ca224d898ac0a77896e64636810517624aa # via -r src/backend/requirements.in pyphen==0.17.2 \ --hash=sha256:3a07fb017cb2341e1d9ff31b8634efb1ae4dc4b130468c7c39dd3d32e7c3affd \ From 87326ebb523616fdae210a801d32bcebc2c374da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:17:00 +1000 Subject: [PATCH 13/71] chore(deps): bump the dependencies group across 1 directory with 25 updates (#11763) * chore(deps): bump the dependencies group across 1 directory with 25 updates Bumps the dependencies group with 25 updates in the /src/backend directory: | Package | From | To | | --- | --- | --- | | [invoke](https://github.com/pyinvoke/invoke) | `2.2.1` | `3.0.3` | | [bleach](https://github.com/mozilla/bleach) | `4.1.0` | `6.3.0` | | [boto3](https://github.com/boto/boto3) | `1.42.82` | `1.42.87` | | [botocore](https://github.com/boto/botocore) | `1.42.82` | `1.42.87` | | [django-dbbackup](https://github.com/Archmonger/django-dbbackup) | `5.2.0` | `5.3.0` | | [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` | | [lxml](https://github.com/lxml/lxml) | `6.0.2` | `6.0.3` | | [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.0` | | [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.0` | | [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.0` | | [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b0` | | [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b0` | | [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.41.0` | | [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.62b0` | | [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.62b0` | | [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.9.6` | | [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.34.1` | | [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.0` | `0.16.1` | | [rapidfuzz](https://github.com/rapidfuzz/RapidFuzz) | `3.14.3` | `3.14.5` | | [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.1.2` | | [click](https://github.com/pallets/click) | `8.3.1` | `8.3.2` | | [python-discovery](https://github.com/tox-dev/python-discovery) | `1.2.1` | `1.2.2` | | [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260223` | `2.9.21.20260408` | | [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20250915` | `6.0.12.20260408` | | [virtualenv](https://github.com/pypa/virtualenv) | `21.2.0` | `21.2.1` | Updates `invoke` from 2.2.1 to 3.0.3 - [Commits](https://github.com/pyinvoke/invoke/compare/2.2.1...3.0.3) Updates `bleach` from 4.1.0 to 6.3.0 - [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES) - [Commits](https://github.com/mozilla/bleach/compare/v4.1.0...v6.3.0) Updates `boto3` from 1.42.82 to 1.42.87 - [Release notes](https://github.com/boto/boto3/releases) - [Commits](https://github.com/boto/boto3/compare/1.42.82...1.42.87) Updates `botocore` from 1.42.82 to 1.42.87 - [Commits](https://github.com/boto/botocore/compare/1.42.82...1.42.87) Updates `django-dbbackup` from 5.2.0 to 5.3.0 - [Release notes](https://github.com/Archmonger/django-dbbackup/releases) - [Changelog](https://github.com/Archmonger/django-dbbackup/blob/master/CHANGELOG.md) - [Commits](https://github.com/Archmonger/django-dbbackup/compare/5.2.0...5.3.0) Updates `importlib-metadata` from 8.7.1 to 9.0.0 - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v8.7.1...v9.0.0) Updates `lxml` from 6.0.2 to 6.0.3 - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-6.0.2...lxml-6.0.3) Updates `opentelemetry-exporter-otlp-proto-common` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.0) Updates `opentelemetry-exporter-otlp-proto-grpc` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.0) Updates `opentelemetry-exporter-otlp-proto-http` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.0) Updates `opentelemetry-instrumentation` from 0.61b0 to 0.62b0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python-contrib/commits) Updates `opentelemetry-instrumentation-dbapi` from 0.61b0 to 0.62b0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python-contrib/commits) Updates `opentelemetry-proto` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python/compare/v1.40.0...v1.41.0) Updates `opentelemetry-semantic-conventions` from 0.61b0 to 0.62b0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python/commits) Updates `opentelemetry-util-http` from 0.61b0 to 0.62b0 - [Release notes](https://github.com/open-telemetry/opentelemetry-python-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-python-contrib/commits) Updates `platformdirs` from 4.9.4 to 4.9.6 - [Release notes](https://github.com/tox-dev/platformdirs/releases) - [Changelog](https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst) - [Commits](https://github.com/tox-dev/platformdirs/compare/4.9.4...4.9.6) Updates `protobuf` from 6.33.6 to 7.34.1 - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) Updates `python-fsutil` from 0.16.0 to 0.16.1 - [Release notes](https://github.com/fabiocaccamo/python-fsutil/releases) - [Changelog](https://github.com/fabiocaccamo/python-fsutil/blob/main/CHANGELOG.md) - [Commits](https://github.com/fabiocaccamo/python-fsutil/compare/0.16.0...0.16.1) Updates `rapidfuzz` from 3.14.3 to 3.14.5 - [Release notes](https://github.com/rapidfuzz/RapidFuzz/releases) - [Changelog](https://github.com/rapidfuzz/RapidFuzz/blob/main/CHANGELOG.rst) - [Commits](https://github.com/rapidfuzz/RapidFuzz/compare/v3.14.3...v3.14.5) Updates `wrapt` from 1.17.3 to 2.1.2 - [Release notes](https://github.com/GrahamDumpleton/wrapt/releases) - [Changelog](https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst) - [Commits](https://github.com/GrahamDumpleton/wrapt/compare/1.17.3...2.1.2) Updates `click` from 8.3.1 to 8.3.2 - [Release notes](https://github.com/pallets/click/releases) - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/click/compare/8.3.1...8.3.2) Updates `python-discovery` from 1.2.1 to 1.2.2 - [Release notes](https://github.com/tox-dev/python-discovery/releases) - [Commits](https://github.com/tox-dev/python-discovery/compare/1.2.1...1.2.2) Updates `types-psycopg2` from 2.9.21.20260223 to 2.9.21.20260408 - [Commits](https://github.com/python/typeshed/commits) Updates `types-pyyaml` from 6.0.12.20250915 to 6.0.12.20260408 - [Commits](https://github.com/python/typeshed/commits) Updates `virtualenv` from 21.2.0 to 21.2.1 - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/21.2.0...21.2.1) --- updated-dependencies: - dependency-name: invoke dependency-version: 3.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: bleach dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: boto3 dependency-version: 1.42.87 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: botocore dependency-version: 1.42.87 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: django-dbbackup dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: importlib-metadata dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: lxml dependency-version: 6.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: opentelemetry-exporter-otlp-proto-common dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: opentelemetry-exporter-otlp-proto-grpc dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: opentelemetry-exporter-otlp-proto-http dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: opentelemetry-instrumentation dependency-version: 0.62b0 dependency-type: direct:production dependency-group: dependencies - dependency-name: opentelemetry-instrumentation-dbapi dependency-version: 0.62b0 dependency-type: direct:production dependency-group: dependencies - dependency-name: opentelemetry-proto dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: opentelemetry-semantic-conventions dependency-version: 0.62b0 dependency-type: direct:production dependency-group: dependencies - dependency-name: opentelemetry-util-http dependency-version: 0.62b0 dependency-type: direct:production dependency-group: dependencies - dependency-name: platformdirs dependency-version: 4.9.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: protobuf dependency-version: 7.34.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: python-fsutil dependency-version: 0.16.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: rapidfuzz dependency-version: 3.14.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: wrapt dependency-version: 2.1.2 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: click dependency-version: 8.3.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: python-discovery dependency-version: 1.2.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: types-psycopg2 dependency-version: 2.9.21.20260408 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: types-pyyaml dependency-version: 6.0.12.20260408 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: virtualenv dependency-version: 21.2.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] * fix style * reduce diff --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Matthias Mair --- contrib/container/requirements.txt | 6 +- docs/requirements.txt | 12 +- src/backend/requirements-3.14.txt | 480 +++++++++++++------------- src/backend/requirements-dev-3.14.txt | 36 +- src/backend/requirements-dev.txt | 48 +-- src/backend/requirements.txt | 480 +++++++++++++------------- 6 files changed, 525 insertions(+), 537 deletions(-) diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index 2cdb3b187f..389d393530 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -23,9 +23,9 @@ gunicorn==25.3.0 \ # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in -invoke==2.2.1 \ - --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ - --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 +invoke==3.0.3 \ + --hash=sha256:437b6a622223824380bfb4e64f612711a6b648c795f565efc8625af66fb57f0c \ + --hash=sha256:f11327165e5cbb89b2ad1d88d3292b5113332c43b8553b494da435d6ec6f5053 # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in diff --git a/docs/requirements.txt b/docs/requirements.txt index a8a1ba1f96..47d6d7fbfa 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -169,9 +169,9 @@ charset-normalizer==3.4.7 \ # via # -c src/backend/requirements.txt # requests -click==8.3.1 \ - --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ - --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 +click==8.3.2 \ + --hash=sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5 \ + --hash=sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d # via # mkdocs # neoteroi-mkdocs @@ -463,9 +463,9 @@ pathspec==1.0.4 \ # mkdocs # mkdocs-macros-plugin # properdocs -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements.txt # mkdocs-get-deps diff --git a/src/backend/requirements-3.14.txt b/src/backend/requirements-3.14.txt index 59ef355ff0..90821b3542 100644 --- a/src/backend/requirements-3.14.txt +++ b/src/backend/requirements-3.14.txt @@ -101,16 +101,16 @@ blessed==1.38.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -boto3==1.42.82 \ - --hash=sha256:6df9ca0f5047c6afe6bd42244d8e059cde69e2cdb719ebd68d52c7d7beb529b2 \ - --hash=sha256:804341c8197c556e8e7ceb82388ee120f319a4efbb9dc368f6059760a11cfc7d +boto3==1.42.87 \ + --hash=sha256:15cc1404b3ccbcfe17bd5834d467b1b28d53d9aca44e3798dc44876ac57362e6 \ + --hash=sha256:b5b86a826f8f12c7d38679f35bd0135807a6867a21eb8be6dea7c27aeb14ec14 # via # -c src/backend/requirements.txt # django-anymail # django-storages -botocore==1.42.82 \ - --hash=sha256:824dbb58c99d894f193ed1dd75cf59650e25c1b5adb9d3a66b39fdede46f259b \ - --hash=sha256:a2bfe8537e95462ec06a46cc29c327f84746722bb4ce106491bfd3af8075ceed +botocore==1.42.87 \ + --hash=sha256:1c6cc9555c1feec50b290a42de70ba6f04826c009562c2c12bb9990d0258482d \ + --hash=sha256:32832df27c039cc1a518289afe0f6006296d3df26603b5f66e911457e67f0146 # via # -c src/backend/requirements.txt # boto3 @@ -578,9 +578,9 @@ django-cors-headers==4.9.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -django-dbbackup==5.2.0 \ - --hash=sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370 \ - --hash=sha256:72b11dd31758abcf8f2d405fd2efbc49c9624bc17196f8c68542d3dc8d8d53c3 +django-dbbackup==5.3.0 \ + --hash=sha256:2c880dba7650539e8a724174fedb5213062c4fcda3aa09e1c5f3f573192106cb \ + --hash=sha256:ff80b5facd524e3f6479235aeb330b094a1c982f8b0b9503c24ba0dc613162ed # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -990,9 +990,9 @@ inflection==0.5.1 \ # via # -c src/backend/requirements.txt # drf-spectacular -invoke==2.2.1 \ - --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ - --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 +invoke==3.0.3 \ + --hash=sha256:437b6a622223824380bfb4e64f612711a6b648c795f565efc8625af66fb57f0c \ + --hash=sha256:f11327165e5cbb89b2ad1d88d3292b5113332c43b8553b494da435d6ec6f5053 # via # -c src/backend/requirements.txt # paramiko @@ -1033,147 +1033,141 @@ jwcrypto==1.5.7 \ # via # -c src/backend/requirements.txt # django-oauth-toolkit -lxml==6.0.2 \ - --hash=sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba \ - --hash=sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8 \ - --hash=sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0 \ - --hash=sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa \ - --hash=sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f \ - --hash=sha256:0aa7070978f893954008ab73bb9e3c24a7c56c054e00566a21b553dc18105fca \ - --hash=sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf \ - --hash=sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607 \ - --hash=sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8 \ - --hash=sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452 \ - --hash=sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700 \ - --hash=sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d \ - --hash=sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b \ - --hash=sha256:1ea99340b3c729beea786f78c38f60f4795622f36e305d9c9be402201efdc3b7 \ - --hash=sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d \ - --hash=sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6 \ - --hash=sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a \ - --hash=sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d \ - --hash=sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca \ - --hash=sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb \ - --hash=sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed \ - --hash=sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d \ - --hash=sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e \ - --hash=sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694 \ - --hash=sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd \ - --hash=sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659 \ - --hash=sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c \ - --hash=sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314 \ - --hash=sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5 \ - --hash=sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849 \ - --hash=sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938 \ - --hash=sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a \ - --hash=sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34 \ - --hash=sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90 \ - --hash=sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6 \ - --hash=sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba \ - --hash=sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285 \ - --hash=sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553 \ - --hash=sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d \ - --hash=sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c \ - --hash=sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5 \ - --hash=sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601 \ - --hash=sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba \ - --hash=sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37 \ - --hash=sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f \ - --hash=sha256:5921d924aa5468c939d95c9814fa9f9b5935a6ff4e679e26aaf2951f74043512 \ - --hash=sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a \ - --hash=sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438 \ - --hash=sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153 \ - --hash=sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9 \ - --hash=sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d \ - --hash=sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6 \ - --hash=sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f \ - --hash=sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534 \ - --hash=sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46 \ - --hash=sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf \ - --hash=sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f \ - --hash=sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93 \ - --hash=sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8 \ - --hash=sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f \ - --hash=sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1 \ - --hash=sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322 \ - --hash=sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f \ - --hash=sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9 \ - --hash=sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f \ - --hash=sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7 \ - --hash=sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f \ - --hash=sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb \ - --hash=sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916 \ - --hash=sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec \ - --hash=sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9 \ - --hash=sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d \ - --hash=sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679 \ - --hash=sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0 \ - --hash=sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192 \ - --hash=sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917 \ - --hash=sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c \ - --hash=sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d \ - --hash=sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338 \ - --hash=sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d \ - --hash=sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304 \ - --hash=sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77 \ - --hash=sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba \ - --hash=sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456 \ - --hash=sha256:a656ca105115f6b766bba324f23a67914d9c728dafec57638e2b92a9dcd76c62 \ - --hash=sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444 \ - --hash=sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a \ - --hash=sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f \ - --hash=sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c \ - --hash=sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d \ - --hash=sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84 \ - --hash=sha256:af85529ae8d2a453feee4c780d9406a5e3b17cee0dd75c18bd31adcd584debc3 \ - --hash=sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe \ - --hash=sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62 \ - --hash=sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8 \ - --hash=sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178 \ - --hash=sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0 \ - --hash=sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7 \ - --hash=sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48 \ - --hash=sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c \ - --hash=sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9 \ - --hash=sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7 \ - --hash=sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048 \ - --hash=sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c \ - --hash=sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4 \ - --hash=sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f \ - --hash=sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b \ - --hash=sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0 \ - --hash=sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564 \ - --hash=sha256:c54d83a2188a10ebdba573f16bd97135d06c9ef60c3dc495315c7a28c80a263f \ - --hash=sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee \ - --hash=sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5 \ - --hash=sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62 \ - --hash=sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272 \ - --hash=sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9 \ - --hash=sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad \ - --hash=sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321 \ - --hash=sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a \ - --hash=sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312 \ - --hash=sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0 \ - --hash=sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c \ - --hash=sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37 \ - --hash=sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964 \ - --hash=sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484 \ - --hash=sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e \ - --hash=sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6 \ - --hash=sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078 \ - --hash=sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6 \ - --hash=sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388 \ - --hash=sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924 \ - --hash=sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2 \ - --hash=sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df \ - --hash=sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd \ - --hash=sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1 \ - --hash=sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c \ - --hash=sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31 \ - --hash=sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed \ - --hash=sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2 \ - --hash=sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092 \ - --hash=sha256:fe659f6b5d10fb5a17f00a50eb903eb277a71ee35df4615db573c069bcf967ac +lxml==6.0.3 \ + --hash=sha256:04b7cedf52e125f86d0d426635e7fbe8e353d4cc272a1757888e3c072424381d \ + --hash=sha256:06b9f3ac459b4565bbaa97aa5512aa7f9a1188c662f0108364f288f6daf35773 \ + --hash=sha256:093786037b934ef4747b0e8a0e1599fe7df7dd8246e7f07d43bba1c4c8bd7b84 \ + --hash=sha256:0a9a79144a8051bc5fbb223fac895b87eb67b361f27b00c2ed4a07ee34246b90 \ + --hash=sha256:0b012cf200736d90f828b3ab4206857772c61b710f0a98d3814c7994decb6652 \ + --hash=sha256:0c46a246df7fbab1f7b018c7eb361585b295ac95dec806158d9ed1e63b477f05 \ + --hash=sha256:10bc4f37c28b4e1b3e901dde66e3a096eb128acf388d5b2962dc2941284293bb \ + --hash=sha256:13f1594a183cee73f9a1dbfd35871c4e04b461f47eeb9bcf80f7d7856b1b136d \ + --hash=sha256:143ac903fb6c9be6da613390825c8e8bb8c8d71517d43882031f6b9bc89770ef \ + --hash=sha256:16e5cbaa1a6351f2abefa4072e9aac1f09103b47fe7ab4496d54e5995b065162 \ + --hash=sha256:16fbcf06ae534b2fa5bcdc19fcf6abd9df2e74fe8563147d1c5a687a130efed4 \ + --hash=sha256:19b079e81aa3a31b523a224b0dd46da4f56e1b1e248eef9a599e5c885c788813 \ + --hash=sha256:1b36a3c73f2a6d9c2bfae78089ca7aedae5c2ee5fd5214a15f00b2f89e558ba7 \ + --hash=sha256:1b60a3a1205f869bd47874787c792087174453b1a869db4837bf5b3ff92be017 \ + --hash=sha256:20f8caa9beb61a688c4428631cb47fd6e0ba75ef30091cec5fee992138b2be77 \ + --hash=sha256:239e9a6be3a79c03ec200d26f7bb17a4414704a208059e20050bf161e2d8848a \ + --hash=sha256:26cdd7c3f4c3b932b28859d0b70966c2ec8b67c106717d6320121002f8f99025 \ + --hash=sha256:2773dbe2cedee81f2769bd5d24ceb4037706cf032e1703513dd0e9476cd9375f \ + --hash=sha256:27e317e554bc6086a082688ddf137437e5f7f20ffdd736a6f5b4e3ed1ecf1247 \ + --hash=sha256:2a49123cc3209ccad7c4c5a4133bcfcfd4875f30461ea4d0aaa84e6608f712c5 \ + --hash=sha256:2ce76d113a7c3bf42761ec1de7ca615b0cbf9d8ae478eb1d6c20111d9c9fc098 \ + --hash=sha256:2d00902610dd91a970a06d5f1a6e4f2426e04a9fa07209d58e09b345e2269267 \ + --hash=sha256:30c437d8bb9a9a9edff27e85b694342e47a26a6abc249abe00584a4824f9d80d \ + --hash=sha256:322c825054d02d35755b80dc5c39ba8a71c7c09c43453394a13b9bd8c0abc84c \ + --hash=sha256:336925309af5ecd9616acbe1c28d68ee0088839b1d42ae7dcc40ffecff959537 \ + --hash=sha256:33741ec3b4268efffae8ba40f9b64523f4489caf270bde175535e659f03af05a \ + --hash=sha256:353161f166e76f0d8228f8f5216d110601d143a8b6d0fd869230e12c098a5842 \ + --hash=sha256:38652c280cf50cc5cf955e3d0b691fa6a97046d84407bbae340d8e353f9014ef \ + --hash=sha256:38acf7171535ffa7fff1fcec8b82ebd4e55cd02e581efe776928108421accaa1 \ + --hash=sha256:3a0484bd1e84f82766befcbd71cccd7307dacfe08071e4dbc1d9a9b498d321e8 \ + --hash=sha256:448e69211e59c39f398990753d15ba49f7218ec128f64ac8012ef16762e509a3 \ + --hash=sha256:46c80f7fd5dd7d8c269f6486b165c8f91c489e323f3a767221fb5b4b2b388d5f \ + --hash=sha256:4723da3e8f4281853c2eaab161b69cc14bc9b0811be4cfa5a1de36df47e0c660 \ + --hash=sha256:4b0f01fb8bdcaf4aa69cf55b2b2f8ef722e4423e1c020e7250dcb89a1d5db38e \ + --hash=sha256:4ff774b43712b0cf40d9888a5494ca39aefe990c946511cc947b9fddcf74a29b \ + --hash=sha256:50293e024afe5e2c25da2be68c8ceca8618912a0701a73f75b488317c8081aa6 \ + --hash=sha256:51014ee2ab2091dcd9cdef92532f0a1addb7c2cc52a2bd70682e441363de5c0d \ + --hash=sha256:5892d2ef99449ebd8e30544af5bc61fd9c30e9e989093a10589766422f6c5e1a \ + --hash=sha256:59ff244cee0270fc4cf5f2ee920d4493ee88d0bcbc6e8465e9ef01439f1785e7 \ + --hash=sha256:5b6913a68d98c58c673667c864500ba31bc9b0f462effac98914e9a92ebacd2e \ + --hash=sha256:5c35e5c3ed300990a46a144d3514465713f812b35dacfa83e928c60db7c90af7 \ + --hash=sha256:5c45bdcdc2ca6cf26fddff3faa5de7a2ed7c7f6016b3de80125313a37f972378 \ + --hash=sha256:5d559a84b2fd583e5bcf8ec4af1ec895f98811684d5fbd6524ea31a04f92d4ad \ + --hash=sha256:609bf136a7339aeca2bd4268c7cd190f33d13118975fe9964eda8e5138f42802 \ + --hash=sha256:61399a5b01d74ec5f009762c74ab6ebf387e58393fc5d78368e12d4f577fea29 \ + --hash=sha256:6289cb9145fbbc5b0e159c9fcd7fc09446dadc6b60b72c4d1012e80c7c727970 \ + --hash=sha256:631567ffc3ddb989ccdcd28f6b9fa5aab1ec7fc0e99fe65572b006a6aad347e2 \ + --hash=sha256:6364aa77b13e04459df6a9d2b806465287e7540955527e75ebd5fda48532913d \ + --hash=sha256:6556b3197bd8a237a16fcd7278d09f094c5777ae36a1435b5e8e488826386d96 \ + --hash=sha256:6c055bafdcb53e7f9f75e22c009cd183dd410475e21c296d599531d7f03d1bf5 \ + --hash=sha256:724b26a38cef98d6869d00a33cb66083bee967598e44f6a8e53f1dd283c851b0 \ + --hash=sha256:72d108ef9e39f45c6865ea8a5ba6736c0b1a33ddd6343653775349869e58c30b \ + --hash=sha256:7373ede7ccb89e6f6e39c1423b3a4d4ee48035d3b4619a6addced5c8b48d0ecc \ + --hash=sha256:738aef404c862d2c3cd951364ee7175c9d50e8290f5726611c4208c0fba8d186 \ + --hash=sha256:773c22d3de2dd5454b0f89b36d366fa0052f0e924656506c40462d8107acd00f \ + --hash=sha256:775266571f7027b1d77f5fce18a247b24f51a4404bdc1b90ec56be9b1e3801b9 \ + --hash=sha256:794b42f0112adfa3f23670aba5bc0ac9c9adfcee699c0df129b0186c812ac3ff \ + --hash=sha256:7966fbce2d18fde579d5593933d36ad98cc7c8dc7f2b1916d127057ce0415062 \ + --hash=sha256:7f753db5785ce019d7b25bb75638ef5a42a0e208aa9f19933262134e668ca6af \ + --hash=sha256:809726d4c72f1a902556df822c3acc5780053a12a05e16eac999392b30984c06 \ + --hash=sha256:821fd53699eb498990c915ba955a392d07246454c9405e6c1d0692362503013d \ + --hash=sha256:8243937d4673b46da90b4f5ea2627fd26842225e62e885828fdb8133aa1f7b32 \ + --hash=sha256:8341c446fca7f6be003c60aededf2f23a53d4881cf7e0bafb9cef69c217ae26a \ + --hash=sha256:83c1d75e9d124ab82a4ddaf59135112f0dc49526b47355e5928ae6126a68e236 \ + --hash=sha256:83eca62141314d641ebe8089ffa532bbf572ea07dd6255b58c40130d06bb2509 \ + --hash=sha256:841b89fc3d910d61c7c267db6bb7dc3a8b3dac240edb66220fcdf96fe70a0552 \ + --hash=sha256:87bebd6836e88c0a007f66b89814daf5d7041430eb491c91d1851abc89aa6e93 \ + --hash=sha256:88c524cf8c3b8d71dfc3de6cfb225138a876862a92d88bfa22eb9ff020729d45 \ + --hash=sha256:8922a30704a4421d69a19e0499db5861da686c0bccc3a79cf3946e3155cf25f9 \ + --hash=sha256:89f8746c206d8cf2c167221831645d6cc2b24464afd9c428a5eb3fd34c584eb1 \ + --hash=sha256:8b81ec1ecac3be8c1ff1e00ca1c1baf8122e87db9000cd2549963847bd5e3b41 \ + --hash=sha256:8c082ad2398664213a4bb5d133e2eb8bf239220b7d6688f8c8ffa9050057501f \ + --hash=sha256:8c08926678852a233bf1ef645c4d683d56107f814482f8f41b21ef2c7659790e \ + --hash=sha256:8d10a75e4d0a6a9ac2fec2f7ade682f468b51935102c70dab638fa4e94ffcb04 \ + --hash=sha256:8eeec925ad7f81886d413b3a1f8715551f75543519229a9b35e957771e1826d5 \ + --hash=sha256:911dbd0e87729016402e03533117ffe94147bfbcd7902b76af5854c4b437e096 \ + --hash=sha256:955550c78afb2be47755bd1b8153724292a5b539cf3f21665b310c145d08e6f8 \ + --hash=sha256:976b56bd0f4ca72280b4569eb227d012a541860f0d6fcc128ce26d22ef82c845 \ + --hash=sha256:99457524afd384c330dc51e527976653d543ccadfa815d9f2d92c5911626e536 \ + --hash=sha256:9a1adb0e220cb8691202ba9d97646a06292657a122df4b92733861d42f7cf4d2 \ + --hash=sha256:9b8e0779780026979f217603385995202f364adc9807bd21210d81b9f562fc4e \ + --hash=sha256:9d98063e6ae0da5084ec46952bb0a5ccb5e2cad168e32b4d65d1ec84e4b4ebd4 \ + --hash=sha256:a10f9967859229cae38b1aa7a96eb655c96b8adc96989b52c5b1f77d963a77a4 \ + --hash=sha256:a1664c5139755df44cab3834f4400b331b02205d62d3fdcb1554f63439bf3372 \ + --hash=sha256:a1f258e6aa0e6eda2c1199f5582c062c96c7d4a28d96d0c4daa79e39b3f2a764 \ + --hash=sha256:a4dc9f81707b9b56888fa7d3a889ac5219724cf0fbecab90ea5b197faf649534 \ + --hash=sha256:a6380c5035598e4665272ad3fc86c96ddb2a220d4059cce5ba4b660f78346ad9 \ + --hash=sha256:aa18653b795d2c273b8676f7ad2ca916d846d15864e335f746658e4c28eb5168 \ + --hash=sha256:abc39c4fb67f029400608f9a3a4a3f351ccb3c061b05fd3ad113e4cfbba8a8ee \ + --hash=sha256:ac2d6cdafa29672d6a604c641bf67ace3fd0735ec6885501a94943379219ddbf \ + --hash=sha256:ac63a1ef1899ccadace10ac937c41321672771378374c254e931d001448ae372 \ + --hash=sha256:ac65c08ba1bd90f662cb1d5c79f7ae4c53b1c100f0bb6ec5df1f40ac29028a7e \ + --hash=sha256:ad6952810349cbfb843fe15e8afc580b2712359ae42b1d2b05d097bd48c4aea4 \ + --hash=sha256:b044fe3bdb8b68efa33cb5917ae9379f07ec2e416ecd18cf5d333650d6d2fcbb \ + --hash=sha256:b29300eeaadf85df7f2df4bb29cadfb13b9600d1bb8053f35d82d96f9e6d088a \ + --hash=sha256:b683665d0287308adafc90a5617a51a508d8af8c7040693693bb333b5f4474fe \ + --hash=sha256:b68c29aac4788438b07d768057836de47589c7deaa3ad8dc4af488dfc27be388 \ + --hash=sha256:bd4f70e091f2df300396bc9ce36963f90b87611324c2ca750072a6e6375beba2 \ + --hash=sha256:bf98f5f87f6484302e7cce4e2ca5af43562902852063d916c3e2f1c115fdce60 \ + --hash=sha256:c137f8c8419c3de93e2998131d94628805f148e52b34da6d7533454e4d78bc2a \ + --hash=sha256:c157bfef4e3b19688eb4da783c5bfabf5a3ac1ac8d317e0906f3feb18d4c89b7 \ + --hash=sha256:c3de55b53f69ffa2fcfd897bd8a7e62f0f88a40a8a0c544e171e813f9d4ddbf5 \ + --hash=sha256:c4fff7d77f440378cd841e340398edf5dbefee334816efbf521bb6e31651e54e \ + --hash=sha256:c71a387ea133481e725079cff22de45593bf0b834824de22829365ab1d2386c9 \ + --hash=sha256:c8184fdb2259bda1db2db9d6e25f667769afc2531830b4fa29f83f66a7872dea \ + --hash=sha256:c8e3b8a54e65393ce1d5c7d9753fe756f0d96089e7163b20ddec3e5bb56a963e \ + --hash=sha256:cbc7ce67f85b92db97c92219985432be84dc1ba9a028e68c6933e89551234df2 \ + --hash=sha256:cbffd22fc8e4d80454efa968b0c93440a00b8b8a817ce0c29d2c6cb5ad324362 \ + --hash=sha256:ce01ab3449015358f766a1950b3d818eedf9d4cdec3fa87e4eecaad10c0784db \ + --hash=sha256:d1f14c1006722824c3f2158d147e520a82460b47ffdc2a84e444b3d244b65e4d \ + --hash=sha256:d20af2784c763928d0d0879cbc5a3739e4d81eefa0d68962d3478bff4c13e644 \ + --hash=sha256:d38c25bad123d6ce30bb37931d90a4e8a167cd796eeae9cd16c2bfce52718f8e \ + --hash=sha256:d3d65e511e4e656ec67b472110f7a72cbf8547ca15f76fe74cffa4e97412a064 \ + --hash=sha256:d573b81c29e20b1513afa386a544797a99cecde5497e6c77b6dfa4484112c819 \ + --hash=sha256:d8781d812bb8efd47c35651639da38980383ff0d0c1f3269ade23e3a90799079 \ + --hash=sha256:d8a8129bd502de138cdde22eac3990bde8a4efbafc72596baab67a495c48c974 \ + --hash=sha256:d9e779a9c3167d2f158c41b6347fbc9e855f6d5561920a33123beb86463c3f46 \ + --hash=sha256:dfc80c74233fe01157ab550fb12b9d07a2f1fa7c5900cefb484e3bf02e856fbc \ + --hash=sha256:e0c88ca5fb307f7e817fc427681126e4712d3452258577bcb4ca86594c934852 \ + --hash=sha256:e759ff1b244725fef428c6b54f3dab4954c293b2d242a5f2e79db5cc3873de51 \ + --hash=sha256:e8ad05bb1fb4aa20ee201ab2f21c3c7571828e4fad525707437bb1c5f5ab6669 \ + --hash=sha256:ecdded59dc50c0c28f652a98f69a7ada8bd2377248bf48c4a83c81204eb58b33 \ + --hash=sha256:ed31e5852cd938704bc6c7a3822cbf84c7fa00ebfa914a1b4e2392d44f45bdfb \ + --hash=sha256:edccf1157677db1da741d042601754b94af3926310c5763179200718ca738e70 \ + --hash=sha256:f179bae37ad673f57756b59f26833b7922230bef471fdb29492428f152bae8c6 \ + --hash=sha256:f27373113fda6621e4201f529908a24c8a190c2af355aed4711dadca44db4673 \ + --hash=sha256:f297e9be3bbe59c31cfe5d0f38534510ed95856c480df3e8721b16d46ccaeeac \ + --hash=sha256:f8f004d5c601eb50ac29a110632595a4f4c50db81c715d46a43de64ef88246cb \ + --hash=sha256:f96bba9a26a064ce9e11099bad12fb08384b64d3acc0acf94bf386ca5cf4f95f \ + --hash=sha256:fab00cef83d4f9d76c5e0722346e84bc174b071d68b4f725aeb0bf3877b9e6a6 \ + --hash=sha256:fc6eeeddcee4d985707b3fc29fd6993e256e55798ca600586da68d3f0e04ec5a \ + --hash=sha256:fdb7786ebefaa0dad0d399dfeaf146b370a14591af2f3aea59e06f931a426678 \ + --hash=sha256:fddcf558bcb7a40993fb9e3ae3752d5d3a656479c71687799e43063563a2e68a \ + --hash=sha256:feb5b9ed7d0510663a78b94f2b417a41c41b42a7bb157ef398ef9d78e6f0fd50 # via # -c src/backend/requirements.txt # python3-saml @@ -1605,9 +1599,9 @@ pip-licenses==5.5.5 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements.txt # pint @@ -1749,9 +1743,9 @@ python-dotenv==1.2.2 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -python-fsutil==0.16.0 \ - --hash=sha256:a60e16bad77e3f00c3dca95433209c823bc45e0ae4158e52969002f3c7957a18 \ - --hash=sha256:dc957a3541215baa935f66f6f15ceb9a8b7f803919c3d99fa57c818fc545f288 +python-fsutil==0.16.1 \ + --hash=sha256:4cc78b9a1e64011cb4fdaeba531e457e649a6a9a560424e841426e47f3a153ad \ + --hash=sha256:bda20802a19f6dc1bd221f6d2a79e0cd2b2c6eaf2b7c353a385c749917047442 # via # -c src/backend/requirements.txt # django-maintenance-mode @@ -1860,90 +1854,90 @@ qrcode[pil]==8.2 \ # -c src/backend/requirements.txt # -r src/backend/requirements.in # django-allauth -rapidfuzz==3.14.3 \ - --hash=sha256:010e12e2411a4854b0434f920e72b717c43f8ec48d57e7affe5c42ecfa05dd0e \ - --hash=sha256:02821366d928e68ddcb567fed8723dad7ea3a979fada6283e6914d5858674850 \ - --hash=sha256:07aa0b5d8863e3151e05026a28e0d924accf0a7a3b605da978f0359bb804df43 \ - --hash=sha256:0e38828d1381a0cceb8a4831212b2f673d46f5129a1897b0451c883eaf4a1747 \ - --hash=sha256:152555187360978119e98ce3e8263d70dd0c40c7541193fc302e9b7125cf8f58 \ - --hash=sha256:1704fc70d214294e554a2421b473779bcdeef715881c5e927dc0f11e1692a0ff \ - --hash=sha256:1b7ef2f4b8583a744338a18f12c69693c194fb6777c0e9ada98cd4d9e8f09d10 \ - --hash=sha256:1b86daa7419b5e8b180690efd1fdbac43ff19230803282521c5b5a9c83977655 \ - --hash=sha256:1d83b8b712fa37e06d59f29a4b49e2e9e8635e908fbc21552fe4d1163db9d2a1 \ - --hash=sha256:1e6eefec45625c634926a9fd46c9e4f31118ac8f3156fff9494422cee45207e6 \ - --hash=sha256:1ec0c8c0c3d4f97ced46b2e191e883f8c82dbbf6d5ebc1842366d7eff13cd5a6 \ - --hash=sha256:1f1925619627f8798f8c3a391d81071336942e5fe8467bc3c567f982e7ce2897 \ - --hash=sha256:1faa0f8f76ba75fd7b142c984947c280ef6558b5067af2ae9b8729b0a0f99ede \ - --hash=sha256:2491937177868bc4b1e469087601d53f925e8d270ccc21e07404b4b5814b7b5f \ - --hash=sha256:2dc37bc20272f388b8c3a4eba4febc6e77e50a8f450c472def4751e7678f55e4 \ - --hash=sha256:32eeafa3abce138bb725550c0e228fc7eaeec7059aa8093d9cbbec2b58c2371a \ - --hash=sha256:33a325ed0e8e1aa20c3e75f8ab057a7b248fdea7843c2a19ade0008906c14af0 \ - --hash=sha256:33da4bbaf44e9755b0ce192597f3bde7372fe2e381ab305f41b707a95ac57aa7 \ - --hash=sha256:37d3c653af15cd88592633e942f5407cb4c64184efab163c40fcebad05f25141 \ - --hash=sha256:3fecce764cf5a991ee2195a844196da840aba72029b2612f95ac68a8b74946bf \ - --hash=sha256:43d0305c36f504232f18ea04e55f2059bb89f169d3119c4ea96a0e15b59e2a91 \ - --hash=sha256:43e38c1305cffae8472572a0584d4ffc2f130865586a81038ca3965301f7c97c \ - --hash=sha256:442125473b247227d3f2de807a11da6c08ccf536572d1be943f8e262bae7e4ea \ - --hash=sha256:442cba39957a008dfc5bdef21a9c3f4379e30ffb4e41b8555dbaf4887eca9300 \ - --hash=sha256:489ce98a895c98cad284f0a47960c3e264c724cb4cfd47a1430fa091c0c25204 \ - --hash=sha256:4ad73afb688b36864a8d9b7344a9cf6da186c471e5790cbf541a635ee0f457f2 \ - --hash=sha256:4b39921df948388a863f0e267edf2c36302983459b021ab928d4b801cbe6a421 \ - --hash=sha256:4e49c9e992bc5fc873bd0fff7ef16a4405130ec42f2ce3d2b735ba5d3d4eb70f \ - --hash=sha256:52619d25a09546b8db078981ca88939d72caa6b8701edd8b22e16482a38e799f \ - --hash=sha256:54fa03062124e73086dae66a3451c553c1e20a39c077fd704dc7154092c34c63 \ - --hash=sha256:56fefb4382bb12250f164250240b9dd7772e41c5c8ae976fd598a32292449cc5 \ - --hash=sha256:576e4b9012a67e0bf54fccb69a7b6c94d4e86a9540a62f1a5144977359133583 \ - --hash=sha256:57f878330c8d361b2ce76cebb8e3e1dc827293b6abf404e67d53260d27b5d941 \ - --hash=sha256:5cfc3d57abd83c734d1714ec39c88a34dd69c85474918ebc21296f1e61eb5ca8 \ - --hash=sha256:656e52b054d5b5c2524169240e50cfa080b04b1c613c5f90a2465e84888d6f15 \ - --hash=sha256:685c93ea961d135893b5984a5a9851637d23767feabe414ec974f43babbd8226 \ - --hash=sha256:6a014ba09657abfcfeed64b7d09407acb29af436d7fc075b23a298a7e4a6b41c \ - --hash=sha256:6c5f545f454871e6af05753a0172849c82feaf0f521c5ca62ba09e1b382d6382 \ - --hash=sha256:6de00eb84c71476af7d3110cf25d8fe7c792d7f5fa86764ef0b4ca97e78ca3ed \ - --hash=sha256:73b07566bc7e010e7b5bd490fb04bb312e820970180df6b5655e9e6224c137db \ - --hash=sha256:769f31c60cd79420188fcdb3c823227fc4a6deb35cafec9d14045c7f6743acae \ - --hash=sha256:7ba009977601d8b0828bfac9a110b195b3e4e79b350dcfa48c11269a9f1918a0 \ - --hash=sha256:7ccbf68100c170e9a0581accbe9291850936711548c6688ce3bfb897b8c589ad \ - --hash=sha256:7cf174b52cb3ef5d49e45d0a1133b7e7d0ecf770ed01f97ae9962c5c91d97d23 \ - --hash=sha256:7d9af908c2f371bfb9c985bd134e295038e3031e666e4b2ade1e7cb7f5af2f1a \ - --hash=sha256:834d1e818005ed0d4ae38f6b87b86fad9b0a74085467ece0727d20e15077c094 \ - --hash=sha256:8383b6d0d92f6cd008f3c9216535be215a064b2cc890398a678b56e6d280cb63 \ - --hash=sha256:89acb8cbb52904f763e5ac238083b9fc193bed8d1f03c80568b20e4cef43a519 \ - --hash=sha256:948b00e8476a91f510dd1ec07272efc7d78c275d83b630455559671d4e33b678 \ - --hash=sha256:9ec02e62ae765a318d6de38df609c57fc6dacc65c0ed1fd489036834fd8a620c \ - --hash=sha256:a0a28add871425c2fe94358c6300bbeb0bc2ed828ca003420ac6825408f5a424 \ - --hash=sha256:a2135b138bcdcb4c3742d417f215ac2d8c2b87bde15b0feede231ae95f09ec41 \ - --hash=sha256:adb44d996fc610c7da8c5048775b21db60dd63b1548f078e95858c05c86876a3 \ - --hash=sha256:b5100fd6bcee4d27f28f4e0a1c6b5127bc8ba7c2a9959cad9eab0bf4a7ab3329 \ - --hash=sha256:b9fcd4d751a4fffa17aed1dde41647923c72c74af02459ad1222e3b0022da3a1 \ - --hash=sha256:beda6aa9bc44d1d81242e7b291b446be352d3451f8217fcb068fc2933927d53b \ - --hash=sha256:c5fb2d978a601820d2cfd111e2c221a9a7bfdf84b41a3ccbb96ceef29f2f1ac7 \ - --hash=sha256:c71ce6d4231e5ef2e33caa952bfe671cb9fd42e2afb11952df9fad41d5c821f9 \ - --hash=sha256:c7bd1816db05d6c5ffb3a4df0a2b7b56fb8c81ef584d08e37058afa217da91b1 \ - --hash=sha256:c7e40c0a0af02ad6e57e89f62bef8604f55a04ecae90b0ceeda591bbf5923317 \ - --hash=sha256:cc594bbcd3c62f647dfac66800f307beaee56b22aaba1c005e9c4c40ed733923 \ - --hash=sha256:cc65e72790ddfd310c2c8912b45106e3800fefe160b0c2ef4d6b6fec4e826457 \ - --hash=sha256:cec3c0da88562727dd5a5a364bd9efeb535400ff0bfb1443156dd139a1dd7b50 \ - --hash=sha256:cfe8df315ab4e6db4e1be72c5170f8e66021acde22cd2f9d04d2058a9fd8162e \ - --hash=sha256:d1fa009f8b1100e4880868137e7bf0501422898f7674f2adcd85d5a67f041296 \ - --hash=sha256:d7843a1abf0091773a530636fdd2a49a41bcae22f9910b86b4f903e76ddc82dc \ - --hash=sha256:da2a007434323904719158e50f3076a4dadb176ce43df28ed14610c773cc9825 \ - --hash=sha256:dbcb726064b12f356bf10fffdb6db4b6dce5390b23627c08652b3f6e49aa56ae \ - --hash=sha256:dc8c07801df5206b81ed6bd6c35cb520cf9b6c64b9b0d19d699f8633dc942897 \ - --hash=sha256:dea2d113e260a5da0c4003e0a5e9fdf24a9dc2bb9eaa43abd030a1e46ce7837d \ - --hash=sha256:dea97ac3ca18cd3ba8f3d04b5c1fe4aa60e58e8d9b7793d3bd595fdb04128d7a \ - --hash=sha256:dee362e7e79bae940a5e2b3f6d09c6554db6a4e301cc68343886c08be99844f1 \ - --hash=sha256:e195a77d06c03c98b3fc06b8a28576ba824392ce40de8c708f96ce04849a052e \ - --hash=sha256:e6b5e3036976f0fde888687d91be86d81f9ac5f7b02e218913c38285b756be6c \ - --hash=sha256:e6c31a4aa68cfa75d7eede8b0ed24b9e458447db604c2db53f358be9843d81d3 \ - --hash=sha256:e805e52322ae29aa945baf7168b6c898120fbc16d2b8f940b658a5e9e3999253 \ - --hash=sha256:ea188aa00e9bcae8c8411f006a5f2f06c4607a02f24eab0d8dc58566aa911f35 \ - --hash=sha256:ecd7453e02cf072258c3a6b8e930230d789d5d46cc849503729f9ce475d0e785 \ - --hash=sha256:ef6bf930b947bd0735c550683939a032090f1d688dfd8861d6b45307b96fd5c5 \ - --hash=sha256:f3d15d8527e2b293e38ce6e437631af0708df29eafd7c9fc48210854c94472f9 \ - --hash=sha256:f3eb0ff3b75d6fdccd40b55e7414bb859a1cda77c52762c9c82b85569f5088e7 \ - --hash=sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb \ - --hash=sha256:fce3152f94afcfd12f3dd8cf51e48fa606e3cb56719bccebe3b401f43d0714f9 +rapidfuzz==3.14.5 \ + --hash=sha256:0084b687b02b4e569b46d8d6d4ad25659528e6081cd6d067ca453a69035f07e4 \ + --hash=sha256:01550fe5f60fd176aa66b7611289d46dc4aa4b1b904874c7b6d1d54e581c5ec1 \ + --hash=sha256:0298d357e2bc59d572da4db0bc631009b6f8f6c9bc8c11e99a12b833f16b6575 \ + --hash=sha256:068b3e965ca9d9ee4debe40001ae7c3938ba646308afd33cf0c66618147db65c \ + --hash=sha256:071d96b957a33b9296b9284b6350a0fb6d030b154a04efd7c15e56b98b79a517 \ + --hash=sha256:09d6c9ba091854f07817055d795d604179c12a8f308ba4c7d56f3719dfea1646 \ + --hash=sha256:0d3378f471ef440473a396ce2f8e97ee12f89a78b495540e0a5617bbfe895638 \ + --hash=sha256:0ebd1a18e2e47bc0b292a07e6ed9c3642f8aaa672d12253885f599b50807a4f9 \ + --hash=sha256:0f23e37019ec07712d58976b1ab2b889f8649a7f7c2f626a2f34ea9139e79279 \ + --hash=sha256:11bfc2ed8fbe4ab86bd516fadefab126f90e6dcadffa761739fcb304707dfd35 \ + --hash=sha256:13cb79c23ef5516e4c4e3830877be8b19aa75203636be1163d690d37803f6504 \ + --hash=sha256:17a34330cd2a538c1ce5d400b61ba358c5b72c654b928ff87b362e88f8b864c7 \ + --hash=sha256:1a31cc6d7d03e7318a0974c038959c59e19c752b81115f2e9138b3331cd64d45 \ + --hash=sha256:1e910eebca9fd0eba245c0555e764597e8a0cccb673a92da2dc2397050725f48 \ + --hash=sha256:1e989f86113be66574113b9c7bdf4793f3f863d248e47d911b355e05ca6b6b10 \ + --hash=sha256:2e83cd2e25bb4edd97b689d9979d9c3acccdaaf26ceac08212ceece202febcfa \ + --hash=sha256:39ef8658aaf67d51667e7bdaf7096f432333377d8302ac43c70b5df8a4cf89b8 \ + --hash=sha256:3d50e5861872935fece391351cbb5ba21d1bced277cf5e1143d207a0a35f1925 \ + --hash=sha256:3e91dcd2549b8f8d843f98ba03a17e01f3d8b72ce942adbbb6761bc58ffce813 \ + --hash=sha256:419e4397a36e2665ec992d8d64c20ba4b2a42500c76ecadeca78a4f19cb9cc32 \ + --hash=sha256:440d30faaf682ca496170a7f0cc5453ec942e3e079f0fd802c9a7f938dfb50a3 \ + --hash=sha256:46b92a9970dcc34f0096901c792644094cab49554ac3547f35e3aebbdf0a3610 \ + --hash=sha256:478b59bb018a6780d73f33e38d0b3ec5e968a6c1ed42876b993dd456b7aa20e8 \ + --hash=sha256:48bee0b91bebfaec41e1081e351000659ab7570cc4598d617aa04d5bf827f9e6 \ + --hash=sha256:4900143d82071bdda533b00300c40b14b963ff826b3642cc463b6dd0f036585e \ + --hash=sha256:4a60f0057231188e3bd30216f7b4e0f279b11fa4ec818bb6c1d9f014d1562fbc \ + --hash=sha256:56227a61fd3d17b0cd9793132431f3a3d07c8654be96794ba9f89fe0fc8b2d09 \ + --hash=sha256:578e6051f6d5e6200c259b47a103cf06bb875ab5814d17333fc0b5c290b22f4c \ + --hash=sha256:593c00dac4e30231c35bf3b4f1da8ec0998762e9e94425586a5d636fcd57f9d0 \ + --hash=sha256:59b3dba758661a318995655435c6ab20a04ade79fa51e75bc8dc107cac8df280 \ + --hash=sha256:5ab449c9abd0d4e1f8145dce0798a4c822a1a1933d613c764a641bea88b8bdab \ + --hash=sha256:5dfa89d78f22cd773054caff44827b846161a29f2dcf7e78b8f90d086621e502 \ + --hash=sha256:649712823f3abcdc48427147a5384fac15623ba435d0013959b52e6462521397 \ + --hash=sha256:667f40fe9c81ad129b198d236881b00dd9e8314d9cc72d03c3e16bdfe5879051 \ + --hash=sha256:6737b35d5af7479c5bf9710f7b17edd9d2c43128d974d25fb4ea653e42c64609 \ + --hash=sha256:67f3f9d2b444268ab53e47d31bab89954888d23c04c6789f2c727e51fe4b1d13 \ + --hash=sha256:7092a216728f80c960bd6b3807275d1ee318b168986bd5dc523349581d4890b8 \ + --hash=sha256:738c96944d076deeaff70e92b65696ab4f7ecb8081d7791c5403a3257dfaf8ff \ + --hash=sha256:77eac0526899b3c3ad1454bb2b03cdb491d67358ec8ef0c9c48bd61b632b431d \ + --hash=sha256:7d5ca9c7832e6879a707296d1463685f7c243a27846227044504741640caec66 \ + --hash=sha256:7e580cb04ad849ae9b786fa21383c6b994b6e6c1444ad1cb9f22392759d72741 \ + --hash=sha256:8166efddea49fdbc61185559f47593239e4794fd7c9044dd5a789d1a90af852d \ + --hash=sha256:823b1b9d9230809d8edcc18872770764bfe8ef4357995e16744047c8ccf0e489 \ + --hash=sha256:88b7d31ff1cc5e9bc0e4406e6b1fa00b6d37163d50bb58091e9b976ff1129faa \ + --hash=sha256:8c90cdf8516d9057e502aa6003cea71cf5ec27cc44699ca52412b502a04761bb \ + --hash=sha256:8ce1d850b3c0178440efde9e884d98421b5e87ff925f364d6d79e23910d7593f \ + --hash=sha256:8f4a8f5cc84c7ad6bffa0e9947b33eb343ad66e6b53e94fe54378a5508c5ed53 \ + --hash=sha256:93d8da883a35116d6813432177f35e570db5b0a5e30ecb0cbd7cb39c815735df \ + --hash=sha256:95d937e74c1a7a1287dfb03b62a827be08ede10a155cf1af73bbf47f2b73ee6e \ + --hash=sha256:9669753caef7fdc6529f6adcc5883ed98d65976445d9322e7dbdb6b697feee13 \ + --hash=sha256:97131ab2be39043054ee28d99e09efe316e6d53449b7e962dfcf3c2de8b2b246 \ + --hash=sha256:97c6d85283629646fa87acc22c66b30ea9d4de7f6fdf887daa2e30fa041829b5 \ + --hash=sha256:9981d38a703b86f0e315a3cd229fd1906fe1d91c989ed121fb975b3c849f89f5 \ + --hash=sha256:9ad37a0be705b544af6296da8edddc260d10a8ae5462530fc9991f66498bb1f9 \ + --hash=sha256:a2ae6f53f99c9a0eca7a0afc5b4e45fc73bc1dd4ac74c00509031d76df80ed98 \ + --hash=sha256:aac0ad28c686a5e72b81668b906c030ee28050b244544b8af68e12fb32543895 \ + --hash=sha256:af3b859726cd3374287e405e14b9634563c078c5531a4f62375508addebddad1 \ + --hash=sha256:af6a90a4ed2a48fa1a2d17e9d824e6c7c950bea5bad0b707c77fd55751e6bfef \ + --hash=sha256:b002c7994cc9f2bc9d9856f0fbaee6e8072c983873846c92f25cefba5b2a925f \ + --hash=sha256:b486b5218808f6f4dc471b114b1054e63553db69705c97da0271f47bd706aedd \ + --hash=sha256:b9c6bd754d11f6e78ac54e3d86b4b11dc1ba2f13e5fc958899574532897f5a99 \ + --hash=sha256:ba10ac57884ce82112f7ed910b67e7fb6072d8ef2c06e30dc63c0f604a112e0e \ + --hash=sha256:bf5018938208d4597b2e679a4f8cff9fd252f1df53583130ae56281a21801b64 \ + --hash=sha256:c0919d1f89ddf91129906705723118ea09754171e4116f5a5dbc667c7bc9b261 \ + --hash=sha256:c5801a89604c65ab4cc9e91b23bc4076d0ca80efd8c976fb63843d7879a85d7f \ + --hash=sha256:c84af70bcf34e99aee894e46a0f1ac77f17d0ef828179c387407642e2466d28a \ + --hash=sha256:cb2829fedd672dd7107267189dabe2bbe07972801d636014417c6861eb89e358 \ + --hash=sha256:d45e06f60729e07d9b20c205f7e5cff90b6ef2584e852eecf46e045aea69627d \ + --hash=sha256:d7ca16637c0ede8243f84074044bd0b2335a0341421f8227c85756de2d18c819 \ + --hash=sha256:d8375e3da319593389727c3187ccaf3e0e84199accc530866b8e0f2b79af05e9 \ + --hash=sha256:dfa552338f51aec280f17b02d28bace1e162d1a84ccd80e3339a57f98aedb56b \ + --hash=sha256:dfef96543ced67d9513a422755db422ae1dc34dade0a1485e0b43e7342ed3ebf \ + --hash=sha256:e012177c8e8a8a0754ae0d6027d63042aa5ff036d9f40f07cb3466a6082e21b8 \ + --hash=sha256:e251126d48615e1f02b4a178f2cd0cd4f0332b8a019c01a2e10480f7552554b4 \ + --hash=sha256:e52da10236aa6212de71b9e170bace65b64b129c0dea7fc243d6c9ce976f5074 \ + --hash=sha256:eacb434410b8d9ca99a8d42352ef085cf423e3c76c1f0b86be2fcba3bff2952c \ + --hash=sha256:ebd8fd343bf8492a1e60bcb6dc99f90f74f65d98d8241a6b3e1fed225b76ecd6 \ + --hash=sha256:f0b2af76b7e7060c09e1a0dfa9410eb19369cbe6164509bff2ef94094b54d2b6 \ + --hash=sha256:f2073495a7f9b75e57e600747ac09510d67683fd64d3228e009740b7ef88f9fe \ + --hash=sha256:f4c1bca487a17fe4226b4ffb2d30e799d2b274d692cffa76bd0746f56235fca3 \ + --hash=sha256:f9fff308486bbd2c8c24f25e8e152c7594d3fe8db265a2d6a1ce24d58671127f \ + --hash=sha256:fbf1b8bb2695415b347f3727da1addca2acb82c9b97ac86bebf8b1bead1eb12d \ + --hash=sha256:feedf219672eef83ea6be6f3bb093bba396a8560fc75be85ba225f082903df0a # via # -c src/backend/requirements.txt # -r src/backend/requirements.in diff --git a/src/backend/requirements-dev-3.14.txt b/src/backend/requirements-dev-3.14.txt index 2623076777..c8101c192e 100644 --- a/src/backend/requirements-dev-3.14.txt +++ b/src/backend/requirements-dev-3.14.txt @@ -247,9 +247,9 @@ charset-normalizer==3.4.7 \ # -c src/backend/requirements.txt # pdfminer-six # requests -click==8.3.1 \ - --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ - --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 +click==8.3.2 \ + --hash=sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5 \ + --hash=sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d # via pip-tools coverage[toml]==7.13.5 \ --hash=sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256 \ @@ -515,9 +515,9 @@ pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -578,9 +578,9 @@ pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in -python-discovery==1.2.1 \ - --hash=sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e \ - --hash=sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 +python-discovery==1.2.2 \ + --hash=sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb \ + --hash=sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -711,13 +711,13 @@ ty==0.0.1a21 \ --hash=sha256:e941e9a9d1e54b03eeaf9c3197c26a19cf76009fd5e41e16e5657c1c827bd6d3 \ --hash=sha256:ecf41706b803827b0de8717f32a434dad1e67be9f4b8caf403e12013179ea06a # via -r src/backend/requirements-dev.in -types-psycopg2==2.9.21.20260223 \ - --hash=sha256:78ed70de2e56bc6b5c26c8c1da8e9af54e49fdc3c94d1504609f3519e2b84f02 \ - --hash=sha256:c6228ade72d813b0624f4c03feeb89471950ac27cd0506b5debed6f053086bc8 +types-psycopg2==2.9.21.20260408 \ + --hash=sha256:49b086bfc9e0ce901c6537403ead1c19c75275571040b037af0248a8e48c322f \ + --hash=sha256:bb65cd12f53b6633077fd782607a33065e1f3bf585219c9f786b61ad2b72211c # via django-types -types-pyyaml==6.0.12.20250915 \ - --hash=sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3 \ - --hash=sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6 +types-pyyaml==6.0.12.20260408 \ + --hash=sha256:92a73f2b8d7f39ef392a38131f76b970f8c66e4c42b3125ae872b7c93b556307 \ + --hash=sha256:fbc42037d12159d9c801ebfcc79ebd28335a7c13b08a4cfbc6916df78fee9384 # via django-stubs typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ @@ -735,9 +735,9 @@ urllib3==2.6.3 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # requests -virtualenv==21.2.0 \ - --hash=sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098 \ - --hash=sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f +virtualenv==21.2.1 \ + --hash=sha256:b66ffe81301766c0d5e2208fc3576652c59d44e7b731fc5f5ed701c9b537fa78 \ + --hash=sha256:bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2 # via pre-commit wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/src/backend/requirements-dev.txt b/src/backend/requirements-dev.txt index 23d05f86ab..74b270e27f 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -243,9 +243,9 @@ charset-normalizer==3.4.7 \ # -c src/backend/requirements.txt # pdfminer-six # requests -click==8.3.1 \ - --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ - --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 +click==8.3.2 \ + --hash=sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5 \ + --hash=sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d # via pip-tools coverage[toml]==7.13.5 \ --hash=sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256 \ @@ -431,13 +431,13 @@ django-silk==5.5.0 \ django-slowtests==1.1.1 \ --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 # via -r src/backend/requirements-dev.in -django-stubs==6.0.1 \ - --hash=sha256:d885044bd0876610f3eb969d6b5ed22f386002a879fdcb369cd8efa0502dbbce \ - --hash=sha256:e1ca63634221b57a55e16562b9b6d1849aeee2cabfd0fc026084dbe8aa893366 +django-stubs==6.0.2 \ + --hash=sha256:56d43b5e3741563af0063e5b6283f908c625b0439aa06314268673699d1bdccd \ + --hash=sha256:c3bc84d80421758f3b2ad9e1358e001d719388a8eb106e67c873e606216108d4 # via -r src/backend/requirements-dev.in -django-stubs-ext==6.0.1 \ - --hash=sha256:17415759b9a3f4b4da7998ac3b08c7dc5137f9a019490b918aece1a8a4c2ade4 \ - --hash=sha256:633b280f89c0cbb7e3ce2f2f842e0acc43d8091378e75f84921d6be675d052dc +django-stubs-ext==6.0.2 \ + --hash=sha256:70b7b7ae837e7a6036e2facb64435550bf7cf8143c1a6e802864d4824ce6058c \ + --hash=sha256:b35bdec1995bf49765cc39fa89aa7c23f120a23d0cb0152ab7fb4e48ff7d667b # via django-stubs django-test-migrations==1.5.0 \ --hash=sha256:1cbff04b1e82c5564a6f635284907b381cc11a2ff883adff46776d9126824f07 \ @@ -507,9 +507,9 @@ pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements.txt # python-discovery @@ -568,9 +568,9 @@ pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in -python-discovery==1.2.1 \ - --hash=sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e \ - --hash=sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 +python-discovery==1.2.2 \ + --hash=sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb \ + --hash=sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -746,13 +746,13 @@ ty==0.0.1a21 \ --hash=sha256:e941e9a9d1e54b03eeaf9c3197c26a19cf76009fd5e41e16e5657c1c827bd6d3 \ --hash=sha256:ecf41706b803827b0de8717f32a434dad1e67be9f4b8caf403e12013179ea06a # via -r src/backend/requirements-dev.in -types-psycopg2==2.9.21.20260223 \ - --hash=sha256:78ed70de2e56bc6b5c26c8c1da8e9af54e49fdc3c94d1504609f3519e2b84f02 \ - --hash=sha256:c6228ade72d813b0624f4c03feeb89471950ac27cd0506b5debed6f053086bc8 +types-psycopg2==2.9.21.20260408 \ + --hash=sha256:49b086bfc9e0ce901c6537403ead1c19c75275571040b037af0248a8e48c322f \ + --hash=sha256:bb65cd12f53b6633077fd782607a33065e1f3bf585219c9f786b61ad2b72211c # via django-types -types-pyyaml==6.0.12.20250915 \ - --hash=sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3 \ - --hash=sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6 +types-pyyaml==6.0.12.20260408 \ + --hash=sha256:92a73f2b8d7f39ef392a38131f76b970f8c66e4c42b3125ae872b7c93b556307 \ + --hash=sha256:fbc42037d12159d9c801ebfcc79ebd28335a7c13b08a4cfbc6916df78fee9384 # via django-stubs typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ @@ -768,9 +768,9 @@ urllib3==2.6.3 \ # via # -c src/backend/requirements.txt # requests -virtualenv==21.2.0 \ - --hash=sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098 \ - --hash=sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f +virtualenv==21.2.1 \ + --hash=sha256:b66ffe81301766c0d5e2208fc3576652c59d44e7b731fc5f5ed701c9b537fa78 \ + --hash=sha256:bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2 # via pre-commit wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index c28d63529c..e0317709cf 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -95,15 +95,15 @@ blessed==1.38.0 \ --hash=sha256:89ce6ec6567f7aced0716b73577b7a1702eb23c667838bb46d7d9bd48c36d1b3 \ --hash=sha256:905884ae650e41284fa4fd7d0c3eed5e5b4a42be8c2bfb24c90d79fbf26a1490 # via -r src/backend/requirements.in -boto3==1.42.82 \ - --hash=sha256:6df9ca0f5047c6afe6bd42244d8e059cde69e2cdb719ebd68d52c7d7beb529b2 \ - --hash=sha256:804341c8197c556e8e7ceb82388ee120f319a4efbb9dc368f6059760a11cfc7d +boto3==1.42.87 \ + --hash=sha256:15cc1404b3ccbcfe17bd5834d467b1b28d53d9aca44e3798dc44876ac57362e6 \ + --hash=sha256:b5b86a826f8f12c7d38679f35bd0135807a6867a21eb8be6dea7c27aeb14ec14 # via # django-anymail # django-storages -botocore==1.42.82 \ - --hash=sha256:824dbb58c99d894f193ed1dd75cf59650e25c1b5adb9d3a66b39fdede46f259b \ - --hash=sha256:a2bfe8537e95462ec06a46cc29c327f84746722bb4ce106491bfd3af8075ceed +botocore==1.42.87 \ + --hash=sha256:1c6cc9555c1feec50b290a42de70ba6f04826c009562c2c12bb9990d0258482d \ + --hash=sha256:32832df27c039cc1a518289afe0f6006296d3df26603b5f66e911457e67f0146 # via # boto3 # s3transfer @@ -550,9 +550,9 @@ django-cors-headers==4.9.0 \ --hash=sha256:15c7f20727f90044dcee2216a9fd7303741a864865f0c3657e28b7056f61b449 \ --hash=sha256:fe5d7cb59fdc2c8c646ce84b727ac2bca8912a247e6e68e1fb507372178e59e8 # via -r src/backend/requirements.in -django-dbbackup==5.2.0 \ - --hash=sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370 \ - --hash=sha256:72b11dd31758abcf8f2d405fd2efbc49c9624bc17196f8c68542d3dc8d8d53c3 +django-dbbackup==5.3.0 \ + --hash=sha256:2c880dba7650539e8a724174fedb5213062c4fcda3aa09e1c5f3f573192106cb \ + --hash=sha256:ff80b5facd524e3f6479235aeb330b094a1c982f8b0b9503c24ba0dc613162ed # via -r src/backend/requirements.in django-error-report-2==0.4.2 \ --hash=sha256:1dd99c497af09b7ea99f5fbaf910501838150a9d5390796ea00e187bc62f6c1b \ @@ -876,9 +876,9 @@ inflection==0.5.1 \ --hash=sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417 \ --hash=sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2 # via drf-spectacular -invoke==2.2.1 \ - --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ - --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 +invoke==3.0.3 \ + --hash=sha256:437b6a622223824380bfb4e64f612711a6b648c795f565efc8625af66fb57f0c \ + --hash=sha256:f11327165e5cbb89b2ad1d88d3292b5113332c43b8553b494da435d6ec6f5053 # via paramiko isodate==0.7.2 \ --hash=sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 \ @@ -906,147 +906,141 @@ jwcrypto==1.5.7 \ --hash=sha256:70204d7cca406eda8c82352e3c41ba2d946610dafd19e54403f0a1f4f18633c6 \ --hash=sha256:729463fefe28b6de5cf1ebfda3e94f1a1b41d2799148ef98a01cb9678ebe2bb0 # via django-oauth-toolkit -lxml==6.0.2 \ - --hash=sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba \ - --hash=sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8 \ - --hash=sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0 \ - --hash=sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa \ - --hash=sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f \ - --hash=sha256:0aa7070978f893954008ab73bb9e3c24a7c56c054e00566a21b553dc18105fca \ - --hash=sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf \ - --hash=sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607 \ - --hash=sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8 \ - --hash=sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452 \ - --hash=sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700 \ - --hash=sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d \ - --hash=sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b \ - --hash=sha256:1ea99340b3c729beea786f78c38f60f4795622f36e305d9c9be402201efdc3b7 \ - --hash=sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d \ - --hash=sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6 \ - --hash=sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a \ - --hash=sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d \ - --hash=sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca \ - --hash=sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb \ - --hash=sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed \ - --hash=sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d \ - --hash=sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e \ - --hash=sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694 \ - --hash=sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd \ - --hash=sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659 \ - --hash=sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c \ - --hash=sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314 \ - --hash=sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5 \ - --hash=sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849 \ - --hash=sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938 \ - --hash=sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a \ - --hash=sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34 \ - --hash=sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90 \ - --hash=sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6 \ - --hash=sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba \ - --hash=sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285 \ - --hash=sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553 \ - --hash=sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d \ - --hash=sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c \ - --hash=sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5 \ - --hash=sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601 \ - --hash=sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba \ - --hash=sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37 \ - --hash=sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f \ - --hash=sha256:5921d924aa5468c939d95c9814fa9f9b5935a6ff4e679e26aaf2951f74043512 \ - --hash=sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a \ - --hash=sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438 \ - --hash=sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153 \ - --hash=sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9 \ - --hash=sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d \ - --hash=sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6 \ - --hash=sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f \ - --hash=sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534 \ - --hash=sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46 \ - --hash=sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf \ - --hash=sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f \ - --hash=sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93 \ - --hash=sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8 \ - --hash=sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f \ - --hash=sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1 \ - --hash=sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322 \ - --hash=sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f \ - --hash=sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9 \ - --hash=sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f \ - --hash=sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7 \ - --hash=sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f \ - --hash=sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb \ - --hash=sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916 \ - --hash=sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec \ - --hash=sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9 \ - --hash=sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d \ - --hash=sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679 \ - --hash=sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0 \ - --hash=sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192 \ - --hash=sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917 \ - --hash=sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c \ - --hash=sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d \ - --hash=sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338 \ - --hash=sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d \ - --hash=sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304 \ - --hash=sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77 \ - --hash=sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba \ - --hash=sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456 \ - --hash=sha256:a656ca105115f6b766bba324f23a67914d9c728dafec57638e2b92a9dcd76c62 \ - --hash=sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444 \ - --hash=sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a \ - --hash=sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f \ - --hash=sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c \ - --hash=sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d \ - --hash=sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84 \ - --hash=sha256:af85529ae8d2a453feee4c780d9406a5e3b17cee0dd75c18bd31adcd584debc3 \ - --hash=sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe \ - --hash=sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62 \ - --hash=sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8 \ - --hash=sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178 \ - --hash=sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0 \ - --hash=sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7 \ - --hash=sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48 \ - --hash=sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c \ - --hash=sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9 \ - --hash=sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7 \ - --hash=sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048 \ - --hash=sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c \ - --hash=sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4 \ - --hash=sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f \ - --hash=sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b \ - --hash=sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0 \ - --hash=sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564 \ - --hash=sha256:c54d83a2188a10ebdba573f16bd97135d06c9ef60c3dc495315c7a28c80a263f \ - --hash=sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee \ - --hash=sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5 \ - --hash=sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62 \ - --hash=sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272 \ - --hash=sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9 \ - --hash=sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad \ - --hash=sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321 \ - --hash=sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a \ - --hash=sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312 \ - --hash=sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0 \ - --hash=sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c \ - --hash=sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37 \ - --hash=sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964 \ - --hash=sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484 \ - --hash=sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e \ - --hash=sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6 \ - --hash=sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078 \ - --hash=sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6 \ - --hash=sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388 \ - --hash=sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924 \ - --hash=sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2 \ - --hash=sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df \ - --hash=sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd \ - --hash=sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1 \ - --hash=sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c \ - --hash=sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31 \ - --hash=sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed \ - --hash=sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2 \ - --hash=sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092 \ - --hash=sha256:fe659f6b5d10fb5a17f00a50eb903eb277a71ee35df4615db573c069bcf967ac +lxml==6.0.3 \ + --hash=sha256:04b7cedf52e125f86d0d426635e7fbe8e353d4cc272a1757888e3c072424381d \ + --hash=sha256:06b9f3ac459b4565bbaa97aa5512aa7f9a1188c662f0108364f288f6daf35773 \ + --hash=sha256:093786037b934ef4747b0e8a0e1599fe7df7dd8246e7f07d43bba1c4c8bd7b84 \ + --hash=sha256:0a9a79144a8051bc5fbb223fac895b87eb67b361f27b00c2ed4a07ee34246b90 \ + --hash=sha256:0b012cf200736d90f828b3ab4206857772c61b710f0a98d3814c7994decb6652 \ + --hash=sha256:0c46a246df7fbab1f7b018c7eb361585b295ac95dec806158d9ed1e63b477f05 \ + --hash=sha256:10bc4f37c28b4e1b3e901dde66e3a096eb128acf388d5b2962dc2941284293bb \ + --hash=sha256:13f1594a183cee73f9a1dbfd35871c4e04b461f47eeb9bcf80f7d7856b1b136d \ + --hash=sha256:143ac903fb6c9be6da613390825c8e8bb8c8d71517d43882031f6b9bc89770ef \ + --hash=sha256:16e5cbaa1a6351f2abefa4072e9aac1f09103b47fe7ab4496d54e5995b065162 \ + --hash=sha256:16fbcf06ae534b2fa5bcdc19fcf6abd9df2e74fe8563147d1c5a687a130efed4 \ + --hash=sha256:19b079e81aa3a31b523a224b0dd46da4f56e1b1e248eef9a599e5c885c788813 \ + --hash=sha256:1b36a3c73f2a6d9c2bfae78089ca7aedae5c2ee5fd5214a15f00b2f89e558ba7 \ + --hash=sha256:1b60a3a1205f869bd47874787c792087174453b1a869db4837bf5b3ff92be017 \ + --hash=sha256:20f8caa9beb61a688c4428631cb47fd6e0ba75ef30091cec5fee992138b2be77 \ + --hash=sha256:239e9a6be3a79c03ec200d26f7bb17a4414704a208059e20050bf161e2d8848a \ + --hash=sha256:26cdd7c3f4c3b932b28859d0b70966c2ec8b67c106717d6320121002f8f99025 \ + --hash=sha256:2773dbe2cedee81f2769bd5d24ceb4037706cf032e1703513dd0e9476cd9375f \ + --hash=sha256:27e317e554bc6086a082688ddf137437e5f7f20ffdd736a6f5b4e3ed1ecf1247 \ + --hash=sha256:2a49123cc3209ccad7c4c5a4133bcfcfd4875f30461ea4d0aaa84e6608f712c5 \ + --hash=sha256:2ce76d113a7c3bf42761ec1de7ca615b0cbf9d8ae478eb1d6c20111d9c9fc098 \ + --hash=sha256:2d00902610dd91a970a06d5f1a6e4f2426e04a9fa07209d58e09b345e2269267 \ + --hash=sha256:30c437d8bb9a9a9edff27e85b694342e47a26a6abc249abe00584a4824f9d80d \ + --hash=sha256:322c825054d02d35755b80dc5c39ba8a71c7c09c43453394a13b9bd8c0abc84c \ + --hash=sha256:336925309af5ecd9616acbe1c28d68ee0088839b1d42ae7dcc40ffecff959537 \ + --hash=sha256:33741ec3b4268efffae8ba40f9b64523f4489caf270bde175535e659f03af05a \ + --hash=sha256:353161f166e76f0d8228f8f5216d110601d143a8b6d0fd869230e12c098a5842 \ + --hash=sha256:38652c280cf50cc5cf955e3d0b691fa6a97046d84407bbae340d8e353f9014ef \ + --hash=sha256:38acf7171535ffa7fff1fcec8b82ebd4e55cd02e581efe776928108421accaa1 \ + --hash=sha256:3a0484bd1e84f82766befcbd71cccd7307dacfe08071e4dbc1d9a9b498d321e8 \ + --hash=sha256:448e69211e59c39f398990753d15ba49f7218ec128f64ac8012ef16762e509a3 \ + --hash=sha256:46c80f7fd5dd7d8c269f6486b165c8f91c489e323f3a767221fb5b4b2b388d5f \ + --hash=sha256:4723da3e8f4281853c2eaab161b69cc14bc9b0811be4cfa5a1de36df47e0c660 \ + --hash=sha256:4b0f01fb8bdcaf4aa69cf55b2b2f8ef722e4423e1c020e7250dcb89a1d5db38e \ + --hash=sha256:4ff774b43712b0cf40d9888a5494ca39aefe990c946511cc947b9fddcf74a29b \ + --hash=sha256:50293e024afe5e2c25da2be68c8ceca8618912a0701a73f75b488317c8081aa6 \ + --hash=sha256:51014ee2ab2091dcd9cdef92532f0a1addb7c2cc52a2bd70682e441363de5c0d \ + --hash=sha256:5892d2ef99449ebd8e30544af5bc61fd9c30e9e989093a10589766422f6c5e1a \ + --hash=sha256:59ff244cee0270fc4cf5f2ee920d4493ee88d0bcbc6e8465e9ef01439f1785e7 \ + --hash=sha256:5b6913a68d98c58c673667c864500ba31bc9b0f462effac98914e9a92ebacd2e \ + --hash=sha256:5c35e5c3ed300990a46a144d3514465713f812b35dacfa83e928c60db7c90af7 \ + --hash=sha256:5c45bdcdc2ca6cf26fddff3faa5de7a2ed7c7f6016b3de80125313a37f972378 \ + --hash=sha256:5d559a84b2fd583e5bcf8ec4af1ec895f98811684d5fbd6524ea31a04f92d4ad \ + --hash=sha256:609bf136a7339aeca2bd4268c7cd190f33d13118975fe9964eda8e5138f42802 \ + --hash=sha256:61399a5b01d74ec5f009762c74ab6ebf387e58393fc5d78368e12d4f577fea29 \ + --hash=sha256:6289cb9145fbbc5b0e159c9fcd7fc09446dadc6b60b72c4d1012e80c7c727970 \ + --hash=sha256:631567ffc3ddb989ccdcd28f6b9fa5aab1ec7fc0e99fe65572b006a6aad347e2 \ + --hash=sha256:6364aa77b13e04459df6a9d2b806465287e7540955527e75ebd5fda48532913d \ + --hash=sha256:6556b3197bd8a237a16fcd7278d09f094c5777ae36a1435b5e8e488826386d96 \ + --hash=sha256:6c055bafdcb53e7f9f75e22c009cd183dd410475e21c296d599531d7f03d1bf5 \ + --hash=sha256:724b26a38cef98d6869d00a33cb66083bee967598e44f6a8e53f1dd283c851b0 \ + --hash=sha256:72d108ef9e39f45c6865ea8a5ba6736c0b1a33ddd6343653775349869e58c30b \ + --hash=sha256:7373ede7ccb89e6f6e39c1423b3a4d4ee48035d3b4619a6addced5c8b48d0ecc \ + --hash=sha256:738aef404c862d2c3cd951364ee7175c9d50e8290f5726611c4208c0fba8d186 \ + --hash=sha256:773c22d3de2dd5454b0f89b36d366fa0052f0e924656506c40462d8107acd00f \ + --hash=sha256:775266571f7027b1d77f5fce18a247b24f51a4404bdc1b90ec56be9b1e3801b9 \ + --hash=sha256:794b42f0112adfa3f23670aba5bc0ac9c9adfcee699c0df129b0186c812ac3ff \ + --hash=sha256:7966fbce2d18fde579d5593933d36ad98cc7c8dc7f2b1916d127057ce0415062 \ + --hash=sha256:7f753db5785ce019d7b25bb75638ef5a42a0e208aa9f19933262134e668ca6af \ + --hash=sha256:809726d4c72f1a902556df822c3acc5780053a12a05e16eac999392b30984c06 \ + --hash=sha256:821fd53699eb498990c915ba955a392d07246454c9405e6c1d0692362503013d \ + --hash=sha256:8243937d4673b46da90b4f5ea2627fd26842225e62e885828fdb8133aa1f7b32 \ + --hash=sha256:8341c446fca7f6be003c60aededf2f23a53d4881cf7e0bafb9cef69c217ae26a \ + --hash=sha256:83c1d75e9d124ab82a4ddaf59135112f0dc49526b47355e5928ae6126a68e236 \ + --hash=sha256:83eca62141314d641ebe8089ffa532bbf572ea07dd6255b58c40130d06bb2509 \ + --hash=sha256:841b89fc3d910d61c7c267db6bb7dc3a8b3dac240edb66220fcdf96fe70a0552 \ + --hash=sha256:87bebd6836e88c0a007f66b89814daf5d7041430eb491c91d1851abc89aa6e93 \ + --hash=sha256:88c524cf8c3b8d71dfc3de6cfb225138a876862a92d88bfa22eb9ff020729d45 \ + --hash=sha256:8922a30704a4421d69a19e0499db5861da686c0bccc3a79cf3946e3155cf25f9 \ + --hash=sha256:89f8746c206d8cf2c167221831645d6cc2b24464afd9c428a5eb3fd34c584eb1 \ + --hash=sha256:8b81ec1ecac3be8c1ff1e00ca1c1baf8122e87db9000cd2549963847bd5e3b41 \ + --hash=sha256:8c082ad2398664213a4bb5d133e2eb8bf239220b7d6688f8c8ffa9050057501f \ + --hash=sha256:8c08926678852a233bf1ef645c4d683d56107f814482f8f41b21ef2c7659790e \ + --hash=sha256:8d10a75e4d0a6a9ac2fec2f7ade682f468b51935102c70dab638fa4e94ffcb04 \ + --hash=sha256:8eeec925ad7f81886d413b3a1f8715551f75543519229a9b35e957771e1826d5 \ + --hash=sha256:911dbd0e87729016402e03533117ffe94147bfbcd7902b76af5854c4b437e096 \ + --hash=sha256:955550c78afb2be47755bd1b8153724292a5b539cf3f21665b310c145d08e6f8 \ + --hash=sha256:976b56bd0f4ca72280b4569eb227d012a541860f0d6fcc128ce26d22ef82c845 \ + --hash=sha256:99457524afd384c330dc51e527976653d543ccadfa815d9f2d92c5911626e536 \ + --hash=sha256:9a1adb0e220cb8691202ba9d97646a06292657a122df4b92733861d42f7cf4d2 \ + --hash=sha256:9b8e0779780026979f217603385995202f364adc9807bd21210d81b9f562fc4e \ + --hash=sha256:9d98063e6ae0da5084ec46952bb0a5ccb5e2cad168e32b4d65d1ec84e4b4ebd4 \ + --hash=sha256:a10f9967859229cae38b1aa7a96eb655c96b8adc96989b52c5b1f77d963a77a4 \ + --hash=sha256:a1664c5139755df44cab3834f4400b331b02205d62d3fdcb1554f63439bf3372 \ + --hash=sha256:a1f258e6aa0e6eda2c1199f5582c062c96c7d4a28d96d0c4daa79e39b3f2a764 \ + --hash=sha256:a4dc9f81707b9b56888fa7d3a889ac5219724cf0fbecab90ea5b197faf649534 \ + --hash=sha256:a6380c5035598e4665272ad3fc86c96ddb2a220d4059cce5ba4b660f78346ad9 \ + --hash=sha256:aa18653b795d2c273b8676f7ad2ca916d846d15864e335f746658e4c28eb5168 \ + --hash=sha256:abc39c4fb67f029400608f9a3a4a3f351ccb3c061b05fd3ad113e4cfbba8a8ee \ + --hash=sha256:ac2d6cdafa29672d6a604c641bf67ace3fd0735ec6885501a94943379219ddbf \ + --hash=sha256:ac63a1ef1899ccadace10ac937c41321672771378374c254e931d001448ae372 \ + --hash=sha256:ac65c08ba1bd90f662cb1d5c79f7ae4c53b1c100f0bb6ec5df1f40ac29028a7e \ + --hash=sha256:ad6952810349cbfb843fe15e8afc580b2712359ae42b1d2b05d097bd48c4aea4 \ + --hash=sha256:b044fe3bdb8b68efa33cb5917ae9379f07ec2e416ecd18cf5d333650d6d2fcbb \ + --hash=sha256:b29300eeaadf85df7f2df4bb29cadfb13b9600d1bb8053f35d82d96f9e6d088a \ + --hash=sha256:b683665d0287308adafc90a5617a51a508d8af8c7040693693bb333b5f4474fe \ + --hash=sha256:b68c29aac4788438b07d768057836de47589c7deaa3ad8dc4af488dfc27be388 \ + --hash=sha256:bd4f70e091f2df300396bc9ce36963f90b87611324c2ca750072a6e6375beba2 \ + --hash=sha256:bf98f5f87f6484302e7cce4e2ca5af43562902852063d916c3e2f1c115fdce60 \ + --hash=sha256:c137f8c8419c3de93e2998131d94628805f148e52b34da6d7533454e4d78bc2a \ + --hash=sha256:c157bfef4e3b19688eb4da783c5bfabf5a3ac1ac8d317e0906f3feb18d4c89b7 \ + --hash=sha256:c3de55b53f69ffa2fcfd897bd8a7e62f0f88a40a8a0c544e171e813f9d4ddbf5 \ + --hash=sha256:c4fff7d77f440378cd841e340398edf5dbefee334816efbf521bb6e31651e54e \ + --hash=sha256:c71a387ea133481e725079cff22de45593bf0b834824de22829365ab1d2386c9 \ + --hash=sha256:c8184fdb2259bda1db2db9d6e25f667769afc2531830b4fa29f83f66a7872dea \ + --hash=sha256:c8e3b8a54e65393ce1d5c7d9753fe756f0d96089e7163b20ddec3e5bb56a963e \ + --hash=sha256:cbc7ce67f85b92db97c92219985432be84dc1ba9a028e68c6933e89551234df2 \ + --hash=sha256:cbffd22fc8e4d80454efa968b0c93440a00b8b8a817ce0c29d2c6cb5ad324362 \ + --hash=sha256:ce01ab3449015358f766a1950b3d818eedf9d4cdec3fa87e4eecaad10c0784db \ + --hash=sha256:d1f14c1006722824c3f2158d147e520a82460b47ffdc2a84e444b3d244b65e4d \ + --hash=sha256:d20af2784c763928d0d0879cbc5a3739e4d81eefa0d68962d3478bff4c13e644 \ + --hash=sha256:d38c25bad123d6ce30bb37931d90a4e8a167cd796eeae9cd16c2bfce52718f8e \ + --hash=sha256:d3d65e511e4e656ec67b472110f7a72cbf8547ca15f76fe74cffa4e97412a064 \ + --hash=sha256:d573b81c29e20b1513afa386a544797a99cecde5497e6c77b6dfa4484112c819 \ + --hash=sha256:d8781d812bb8efd47c35651639da38980383ff0d0c1f3269ade23e3a90799079 \ + --hash=sha256:d8a8129bd502de138cdde22eac3990bde8a4efbafc72596baab67a495c48c974 \ + --hash=sha256:d9e779a9c3167d2f158c41b6347fbc9e855f6d5561920a33123beb86463c3f46 \ + --hash=sha256:dfc80c74233fe01157ab550fb12b9d07a2f1fa7c5900cefb484e3bf02e856fbc \ + --hash=sha256:e0c88ca5fb307f7e817fc427681126e4712d3452258577bcb4ca86594c934852 \ + --hash=sha256:e759ff1b244725fef428c6b54f3dab4954c293b2d242a5f2e79db5cc3873de51 \ + --hash=sha256:e8ad05bb1fb4aa20ee201ab2f21c3c7571828e4fad525707437bb1c5f5ab6669 \ + --hash=sha256:ecdded59dc50c0c28f652a98f69a7ada8bd2377248bf48c4a83c81204eb58b33 \ + --hash=sha256:ed31e5852cd938704bc6c7a3822cbf84c7fa00ebfa914a1b4e2392d44f45bdfb \ + --hash=sha256:edccf1157677db1da741d042601754b94af3926310c5763179200718ca738e70 \ + --hash=sha256:f179bae37ad673f57756b59f26833b7922230bef471fdb29492428f152bae8c6 \ + --hash=sha256:f27373113fda6621e4201f529908a24c8a190c2af355aed4711dadca44db4673 \ + --hash=sha256:f297e9be3bbe59c31cfe5d0f38534510ed95856c480df3e8721b16d46ccaeeac \ + --hash=sha256:f8f004d5c601eb50ac29a110632595a4f4c50db81c715d46a43de64ef88246cb \ + --hash=sha256:f96bba9a26a064ce9e11099bad12fb08384b64d3acc0acf94bf386ca5cf4f95f \ + --hash=sha256:fab00cef83d4f9d76c5e0722346e84bc174b071d68b4f725aeb0bf3877b9e6a6 \ + --hash=sha256:fc6eeeddcee4d985707b3fc29fd6993e256e55798ca600586da68d3f0e04ec5a \ + --hash=sha256:fdb7786ebefaa0dad0d399dfeaf146b370a14591af2f3aea59e06f931a426678 \ + --hash=sha256:fddcf558bcb7a40993fb9e3ae3752d5d3a656479c71687799e43063563a2e68a \ + --hash=sha256:feb5b9ed7d0510663a78b94f2b417a41c41b42a7bb157ef398ef9d78e6f0fd50 # via # python3-saml # xmlsec @@ -1429,9 +1423,9 @@ pip-licenses==5.5.5 \ --hash=sha256:60750c006adf7a0910347b726e8ee9fee3bc8d2e7c8307a5c4ec0776c8e2a276 \ --hash=sha256:f4c4c6d9e6a03612cf59f29f19dc8ab54904d82e055b8e191498f2279a224e14 # via -r src/backend/requirements.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via pint ppf-datamatrix==0.2 \ --hash=sha256:819be65eae444b760e178d5761853f78f8e5fca14fec2809b5e3369978fa9244 \ @@ -1546,9 +1540,9 @@ python-dotenv==1.2.2 \ --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 # via -r src/backend/requirements.in -python-fsutil==0.16.0 \ - --hash=sha256:a60e16bad77e3f00c3dca95433209c823bc45e0ae4158e52969002f3c7957a18 \ - --hash=sha256:dc957a3541215baa935f66f6f15ceb9a8b7f803919c3d99fa57c818fc545f288 +python-fsutil==0.16.1 \ + --hash=sha256:4cc78b9a1e64011cb4fdaeba531e457e649a6a9a560424e841426e47f3a153ad \ + --hash=sha256:bda20802a19f6dc1bd221f6d2a79e0cd2b2c6eaf2b7c353a385c749917047442 # via django-maintenance-mode python-ipware==3.0.0 \ --hash=sha256:9117b1c4dddcb5d5ca49e6a9617de2fc66aec2ef35394563ac4eecabdf58c062 \ @@ -1647,90 +1641,90 @@ qrcode[pil]==8.2 \ # via # -r src/backend/requirements.in # django-allauth -rapidfuzz==3.14.3 \ - --hash=sha256:010e12e2411a4854b0434f920e72b717c43f8ec48d57e7affe5c42ecfa05dd0e \ - --hash=sha256:02821366d928e68ddcb567fed8723dad7ea3a979fada6283e6914d5858674850 \ - --hash=sha256:07aa0b5d8863e3151e05026a28e0d924accf0a7a3b605da978f0359bb804df43 \ - --hash=sha256:0e38828d1381a0cceb8a4831212b2f673d46f5129a1897b0451c883eaf4a1747 \ - --hash=sha256:152555187360978119e98ce3e8263d70dd0c40c7541193fc302e9b7125cf8f58 \ - --hash=sha256:1704fc70d214294e554a2421b473779bcdeef715881c5e927dc0f11e1692a0ff \ - --hash=sha256:1b7ef2f4b8583a744338a18f12c69693c194fb6777c0e9ada98cd4d9e8f09d10 \ - --hash=sha256:1b86daa7419b5e8b180690efd1fdbac43ff19230803282521c5b5a9c83977655 \ - --hash=sha256:1d83b8b712fa37e06d59f29a4b49e2e9e8635e908fbc21552fe4d1163db9d2a1 \ - --hash=sha256:1e6eefec45625c634926a9fd46c9e4f31118ac8f3156fff9494422cee45207e6 \ - --hash=sha256:1ec0c8c0c3d4f97ced46b2e191e883f8c82dbbf6d5ebc1842366d7eff13cd5a6 \ - --hash=sha256:1f1925619627f8798f8c3a391d81071336942e5fe8467bc3c567f982e7ce2897 \ - --hash=sha256:1faa0f8f76ba75fd7b142c984947c280ef6558b5067af2ae9b8729b0a0f99ede \ - --hash=sha256:2491937177868bc4b1e469087601d53f925e8d270ccc21e07404b4b5814b7b5f \ - --hash=sha256:2dc37bc20272f388b8c3a4eba4febc6e77e50a8f450c472def4751e7678f55e4 \ - --hash=sha256:32eeafa3abce138bb725550c0e228fc7eaeec7059aa8093d9cbbec2b58c2371a \ - --hash=sha256:33a325ed0e8e1aa20c3e75f8ab057a7b248fdea7843c2a19ade0008906c14af0 \ - --hash=sha256:33da4bbaf44e9755b0ce192597f3bde7372fe2e381ab305f41b707a95ac57aa7 \ - --hash=sha256:37d3c653af15cd88592633e942f5407cb4c64184efab163c40fcebad05f25141 \ - --hash=sha256:3fecce764cf5a991ee2195a844196da840aba72029b2612f95ac68a8b74946bf \ - --hash=sha256:43d0305c36f504232f18ea04e55f2059bb89f169d3119c4ea96a0e15b59e2a91 \ - --hash=sha256:43e38c1305cffae8472572a0584d4ffc2f130865586a81038ca3965301f7c97c \ - --hash=sha256:442125473b247227d3f2de807a11da6c08ccf536572d1be943f8e262bae7e4ea \ - --hash=sha256:442cba39957a008dfc5bdef21a9c3f4379e30ffb4e41b8555dbaf4887eca9300 \ - --hash=sha256:489ce98a895c98cad284f0a47960c3e264c724cb4cfd47a1430fa091c0c25204 \ - --hash=sha256:4ad73afb688b36864a8d9b7344a9cf6da186c471e5790cbf541a635ee0f457f2 \ - --hash=sha256:4b39921df948388a863f0e267edf2c36302983459b021ab928d4b801cbe6a421 \ - --hash=sha256:4e49c9e992bc5fc873bd0fff7ef16a4405130ec42f2ce3d2b735ba5d3d4eb70f \ - --hash=sha256:52619d25a09546b8db078981ca88939d72caa6b8701edd8b22e16482a38e799f \ - --hash=sha256:54fa03062124e73086dae66a3451c553c1e20a39c077fd704dc7154092c34c63 \ - --hash=sha256:56fefb4382bb12250f164250240b9dd7772e41c5c8ae976fd598a32292449cc5 \ - --hash=sha256:576e4b9012a67e0bf54fccb69a7b6c94d4e86a9540a62f1a5144977359133583 \ - --hash=sha256:57f878330c8d361b2ce76cebb8e3e1dc827293b6abf404e67d53260d27b5d941 \ - --hash=sha256:5cfc3d57abd83c734d1714ec39c88a34dd69c85474918ebc21296f1e61eb5ca8 \ - --hash=sha256:656e52b054d5b5c2524169240e50cfa080b04b1c613c5f90a2465e84888d6f15 \ - --hash=sha256:685c93ea961d135893b5984a5a9851637d23767feabe414ec974f43babbd8226 \ - --hash=sha256:6a014ba09657abfcfeed64b7d09407acb29af436d7fc075b23a298a7e4a6b41c \ - --hash=sha256:6c5f545f454871e6af05753a0172849c82feaf0f521c5ca62ba09e1b382d6382 \ - --hash=sha256:6de00eb84c71476af7d3110cf25d8fe7c792d7f5fa86764ef0b4ca97e78ca3ed \ - --hash=sha256:73b07566bc7e010e7b5bd490fb04bb312e820970180df6b5655e9e6224c137db \ - --hash=sha256:769f31c60cd79420188fcdb3c823227fc4a6deb35cafec9d14045c7f6743acae \ - --hash=sha256:7ba009977601d8b0828bfac9a110b195b3e4e79b350dcfa48c11269a9f1918a0 \ - --hash=sha256:7ccbf68100c170e9a0581accbe9291850936711548c6688ce3bfb897b8c589ad \ - --hash=sha256:7cf174b52cb3ef5d49e45d0a1133b7e7d0ecf770ed01f97ae9962c5c91d97d23 \ - --hash=sha256:7d9af908c2f371bfb9c985bd134e295038e3031e666e4b2ade1e7cb7f5af2f1a \ - --hash=sha256:834d1e818005ed0d4ae38f6b87b86fad9b0a74085467ece0727d20e15077c094 \ - --hash=sha256:8383b6d0d92f6cd008f3c9216535be215a064b2cc890398a678b56e6d280cb63 \ - --hash=sha256:89acb8cbb52904f763e5ac238083b9fc193bed8d1f03c80568b20e4cef43a519 \ - --hash=sha256:948b00e8476a91f510dd1ec07272efc7d78c275d83b630455559671d4e33b678 \ - --hash=sha256:9ec02e62ae765a318d6de38df609c57fc6dacc65c0ed1fd489036834fd8a620c \ - --hash=sha256:a0a28add871425c2fe94358c6300bbeb0bc2ed828ca003420ac6825408f5a424 \ - --hash=sha256:a2135b138bcdcb4c3742d417f215ac2d8c2b87bde15b0feede231ae95f09ec41 \ - --hash=sha256:adb44d996fc610c7da8c5048775b21db60dd63b1548f078e95858c05c86876a3 \ - --hash=sha256:b5100fd6bcee4d27f28f4e0a1c6b5127bc8ba7c2a9959cad9eab0bf4a7ab3329 \ - --hash=sha256:b9fcd4d751a4fffa17aed1dde41647923c72c74af02459ad1222e3b0022da3a1 \ - --hash=sha256:beda6aa9bc44d1d81242e7b291b446be352d3451f8217fcb068fc2933927d53b \ - --hash=sha256:c5fb2d978a601820d2cfd111e2c221a9a7bfdf84b41a3ccbb96ceef29f2f1ac7 \ - --hash=sha256:c71ce6d4231e5ef2e33caa952bfe671cb9fd42e2afb11952df9fad41d5c821f9 \ - --hash=sha256:c7bd1816db05d6c5ffb3a4df0a2b7b56fb8c81ef584d08e37058afa217da91b1 \ - --hash=sha256:c7e40c0a0af02ad6e57e89f62bef8604f55a04ecae90b0ceeda591bbf5923317 \ - --hash=sha256:cc594bbcd3c62f647dfac66800f307beaee56b22aaba1c005e9c4c40ed733923 \ - --hash=sha256:cc65e72790ddfd310c2c8912b45106e3800fefe160b0c2ef4d6b6fec4e826457 \ - --hash=sha256:cec3c0da88562727dd5a5a364bd9efeb535400ff0bfb1443156dd139a1dd7b50 \ - --hash=sha256:cfe8df315ab4e6db4e1be72c5170f8e66021acde22cd2f9d04d2058a9fd8162e \ - --hash=sha256:d1fa009f8b1100e4880868137e7bf0501422898f7674f2adcd85d5a67f041296 \ - --hash=sha256:d7843a1abf0091773a530636fdd2a49a41bcae22f9910b86b4f903e76ddc82dc \ - --hash=sha256:da2a007434323904719158e50f3076a4dadb176ce43df28ed14610c773cc9825 \ - --hash=sha256:dbcb726064b12f356bf10fffdb6db4b6dce5390b23627c08652b3f6e49aa56ae \ - --hash=sha256:dc8c07801df5206b81ed6bd6c35cb520cf9b6c64b9b0d19d699f8633dc942897 \ - --hash=sha256:dea2d113e260a5da0c4003e0a5e9fdf24a9dc2bb9eaa43abd030a1e46ce7837d \ - --hash=sha256:dea97ac3ca18cd3ba8f3d04b5c1fe4aa60e58e8d9b7793d3bd595fdb04128d7a \ - --hash=sha256:dee362e7e79bae940a5e2b3f6d09c6554db6a4e301cc68343886c08be99844f1 \ - --hash=sha256:e195a77d06c03c98b3fc06b8a28576ba824392ce40de8c708f96ce04849a052e \ - --hash=sha256:e6b5e3036976f0fde888687d91be86d81f9ac5f7b02e218913c38285b756be6c \ - --hash=sha256:e6c31a4aa68cfa75d7eede8b0ed24b9e458447db604c2db53f358be9843d81d3 \ - --hash=sha256:e805e52322ae29aa945baf7168b6c898120fbc16d2b8f940b658a5e9e3999253 \ - --hash=sha256:ea188aa00e9bcae8c8411f006a5f2f06c4607a02f24eab0d8dc58566aa911f35 \ - --hash=sha256:ecd7453e02cf072258c3a6b8e930230d789d5d46cc849503729f9ce475d0e785 \ - --hash=sha256:ef6bf930b947bd0735c550683939a032090f1d688dfd8861d6b45307b96fd5c5 \ - --hash=sha256:f3d15d8527e2b293e38ce6e437631af0708df29eafd7c9fc48210854c94472f9 \ - --hash=sha256:f3eb0ff3b75d6fdccd40b55e7414bb859a1cda77c52762c9c82b85569f5088e7 \ - --hash=sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb \ - --hash=sha256:fce3152f94afcfd12f3dd8cf51e48fa606e3cb56719bccebe3b401f43d0714f9 +rapidfuzz==3.14.5 \ + --hash=sha256:0084b687b02b4e569b46d8d6d4ad25659528e6081cd6d067ca453a69035f07e4 \ + --hash=sha256:01550fe5f60fd176aa66b7611289d46dc4aa4b1b904874c7b6d1d54e581c5ec1 \ + --hash=sha256:0298d357e2bc59d572da4db0bc631009b6f8f6c9bc8c11e99a12b833f16b6575 \ + --hash=sha256:068b3e965ca9d9ee4debe40001ae7c3938ba646308afd33cf0c66618147db65c \ + --hash=sha256:071d96b957a33b9296b9284b6350a0fb6d030b154a04efd7c15e56b98b79a517 \ + --hash=sha256:09d6c9ba091854f07817055d795d604179c12a8f308ba4c7d56f3719dfea1646 \ + --hash=sha256:0d3378f471ef440473a396ce2f8e97ee12f89a78b495540e0a5617bbfe895638 \ + --hash=sha256:0ebd1a18e2e47bc0b292a07e6ed9c3642f8aaa672d12253885f599b50807a4f9 \ + --hash=sha256:0f23e37019ec07712d58976b1ab2b889f8649a7f7c2f626a2f34ea9139e79279 \ + --hash=sha256:11bfc2ed8fbe4ab86bd516fadefab126f90e6dcadffa761739fcb304707dfd35 \ + --hash=sha256:13cb79c23ef5516e4c4e3830877be8b19aa75203636be1163d690d37803f6504 \ + --hash=sha256:17a34330cd2a538c1ce5d400b61ba358c5b72c654b928ff87b362e88f8b864c7 \ + --hash=sha256:1a31cc6d7d03e7318a0974c038959c59e19c752b81115f2e9138b3331cd64d45 \ + --hash=sha256:1e910eebca9fd0eba245c0555e764597e8a0cccb673a92da2dc2397050725f48 \ + --hash=sha256:1e989f86113be66574113b9c7bdf4793f3f863d248e47d911b355e05ca6b6b10 \ + --hash=sha256:2e83cd2e25bb4edd97b689d9979d9c3acccdaaf26ceac08212ceece202febcfa \ + --hash=sha256:39ef8658aaf67d51667e7bdaf7096f432333377d8302ac43c70b5df8a4cf89b8 \ + --hash=sha256:3d50e5861872935fece391351cbb5ba21d1bced277cf5e1143d207a0a35f1925 \ + --hash=sha256:3e91dcd2549b8f8d843f98ba03a17e01f3d8b72ce942adbbb6761bc58ffce813 \ + --hash=sha256:419e4397a36e2665ec992d8d64c20ba4b2a42500c76ecadeca78a4f19cb9cc32 \ + --hash=sha256:440d30faaf682ca496170a7f0cc5453ec942e3e079f0fd802c9a7f938dfb50a3 \ + --hash=sha256:46b92a9970dcc34f0096901c792644094cab49554ac3547f35e3aebbdf0a3610 \ + --hash=sha256:478b59bb018a6780d73f33e38d0b3ec5e968a6c1ed42876b993dd456b7aa20e8 \ + --hash=sha256:48bee0b91bebfaec41e1081e351000659ab7570cc4598d617aa04d5bf827f9e6 \ + --hash=sha256:4900143d82071bdda533b00300c40b14b963ff826b3642cc463b6dd0f036585e \ + --hash=sha256:4a60f0057231188e3bd30216f7b4e0f279b11fa4ec818bb6c1d9f014d1562fbc \ + --hash=sha256:56227a61fd3d17b0cd9793132431f3a3d07c8654be96794ba9f89fe0fc8b2d09 \ + --hash=sha256:578e6051f6d5e6200c259b47a103cf06bb875ab5814d17333fc0b5c290b22f4c \ + --hash=sha256:593c00dac4e30231c35bf3b4f1da8ec0998762e9e94425586a5d636fcd57f9d0 \ + --hash=sha256:59b3dba758661a318995655435c6ab20a04ade79fa51e75bc8dc107cac8df280 \ + --hash=sha256:5ab449c9abd0d4e1f8145dce0798a4c822a1a1933d613c764a641bea88b8bdab \ + --hash=sha256:5dfa89d78f22cd773054caff44827b846161a29f2dcf7e78b8f90d086621e502 \ + --hash=sha256:649712823f3abcdc48427147a5384fac15623ba435d0013959b52e6462521397 \ + --hash=sha256:667f40fe9c81ad129b198d236881b00dd9e8314d9cc72d03c3e16bdfe5879051 \ + --hash=sha256:6737b35d5af7479c5bf9710f7b17edd9d2c43128d974d25fb4ea653e42c64609 \ + --hash=sha256:67f3f9d2b444268ab53e47d31bab89954888d23c04c6789f2c727e51fe4b1d13 \ + --hash=sha256:7092a216728f80c960bd6b3807275d1ee318b168986bd5dc523349581d4890b8 \ + --hash=sha256:738c96944d076deeaff70e92b65696ab4f7ecb8081d7791c5403a3257dfaf8ff \ + --hash=sha256:77eac0526899b3c3ad1454bb2b03cdb491d67358ec8ef0c9c48bd61b632b431d \ + --hash=sha256:7d5ca9c7832e6879a707296d1463685f7c243a27846227044504741640caec66 \ + --hash=sha256:7e580cb04ad849ae9b786fa21383c6b994b6e6c1444ad1cb9f22392759d72741 \ + --hash=sha256:8166efddea49fdbc61185559f47593239e4794fd7c9044dd5a789d1a90af852d \ + --hash=sha256:823b1b9d9230809d8edcc18872770764bfe8ef4357995e16744047c8ccf0e489 \ + --hash=sha256:88b7d31ff1cc5e9bc0e4406e6b1fa00b6d37163d50bb58091e9b976ff1129faa \ + --hash=sha256:8c90cdf8516d9057e502aa6003cea71cf5ec27cc44699ca52412b502a04761bb \ + --hash=sha256:8ce1d850b3c0178440efde9e884d98421b5e87ff925f364d6d79e23910d7593f \ + --hash=sha256:8f4a8f5cc84c7ad6bffa0e9947b33eb343ad66e6b53e94fe54378a5508c5ed53 \ + --hash=sha256:93d8da883a35116d6813432177f35e570db5b0a5e30ecb0cbd7cb39c815735df \ + --hash=sha256:95d937e74c1a7a1287dfb03b62a827be08ede10a155cf1af73bbf47f2b73ee6e \ + --hash=sha256:9669753caef7fdc6529f6adcc5883ed98d65976445d9322e7dbdb6b697feee13 \ + --hash=sha256:97131ab2be39043054ee28d99e09efe316e6d53449b7e962dfcf3c2de8b2b246 \ + --hash=sha256:97c6d85283629646fa87acc22c66b30ea9d4de7f6fdf887daa2e30fa041829b5 \ + --hash=sha256:9981d38a703b86f0e315a3cd229fd1906fe1d91c989ed121fb975b3c849f89f5 \ + --hash=sha256:9ad37a0be705b544af6296da8edddc260d10a8ae5462530fc9991f66498bb1f9 \ + --hash=sha256:a2ae6f53f99c9a0eca7a0afc5b4e45fc73bc1dd4ac74c00509031d76df80ed98 \ + --hash=sha256:aac0ad28c686a5e72b81668b906c030ee28050b244544b8af68e12fb32543895 \ + --hash=sha256:af3b859726cd3374287e405e14b9634563c078c5531a4f62375508addebddad1 \ + --hash=sha256:af6a90a4ed2a48fa1a2d17e9d824e6c7c950bea5bad0b707c77fd55751e6bfef \ + --hash=sha256:b002c7994cc9f2bc9d9856f0fbaee6e8072c983873846c92f25cefba5b2a925f \ + --hash=sha256:b486b5218808f6f4dc471b114b1054e63553db69705c97da0271f47bd706aedd \ + --hash=sha256:b9c6bd754d11f6e78ac54e3d86b4b11dc1ba2f13e5fc958899574532897f5a99 \ + --hash=sha256:ba10ac57884ce82112f7ed910b67e7fb6072d8ef2c06e30dc63c0f604a112e0e \ + --hash=sha256:bf5018938208d4597b2e679a4f8cff9fd252f1df53583130ae56281a21801b64 \ + --hash=sha256:c0919d1f89ddf91129906705723118ea09754171e4116f5a5dbc667c7bc9b261 \ + --hash=sha256:c5801a89604c65ab4cc9e91b23bc4076d0ca80efd8c976fb63843d7879a85d7f \ + --hash=sha256:c84af70bcf34e99aee894e46a0f1ac77f17d0ef828179c387407642e2466d28a \ + --hash=sha256:cb2829fedd672dd7107267189dabe2bbe07972801d636014417c6861eb89e358 \ + --hash=sha256:d45e06f60729e07d9b20c205f7e5cff90b6ef2584e852eecf46e045aea69627d \ + --hash=sha256:d7ca16637c0ede8243f84074044bd0b2335a0341421f8227c85756de2d18c819 \ + --hash=sha256:d8375e3da319593389727c3187ccaf3e0e84199accc530866b8e0f2b79af05e9 \ + --hash=sha256:dfa552338f51aec280f17b02d28bace1e162d1a84ccd80e3339a57f98aedb56b \ + --hash=sha256:dfef96543ced67d9513a422755db422ae1dc34dade0a1485e0b43e7342ed3ebf \ + --hash=sha256:e012177c8e8a8a0754ae0d6027d63042aa5ff036d9f40f07cb3466a6082e21b8 \ + --hash=sha256:e251126d48615e1f02b4a178f2cd0cd4f0332b8a019c01a2e10480f7552554b4 \ + --hash=sha256:e52da10236aa6212de71b9e170bace65b64b129c0dea7fc243d6c9ce976f5074 \ + --hash=sha256:eacb434410b8d9ca99a8d42352ef085cf423e3c76c1f0b86be2fcba3bff2952c \ + --hash=sha256:ebd8fd343bf8492a1e60bcb6dc99f90f74f65d98d8241a6b3e1fed225b76ecd6 \ + --hash=sha256:f0b2af76b7e7060c09e1a0dfa9410eb19369cbe6164509bff2ef94094b54d2b6 \ + --hash=sha256:f2073495a7f9b75e57e600747ac09510d67683fd64d3228e009740b7ef88f9fe \ + --hash=sha256:f4c1bca487a17fe4226b4ffb2d30e799d2b274d692cffa76bd0746f56235fca3 \ + --hash=sha256:f9fff308486bbd2c8c24f25e8e152c7594d3fe8db265a2d6a1ce24d58671127f \ + --hash=sha256:fbf1b8bb2695415b347f3727da1addca2acb82c9b97ac86bebf8b1bead1eb12d \ + --hash=sha256:feedf219672eef83ea6be6f3bb093bba396a8560fc75be85ba225f082903df0a # via -r src/backend/requirements.in redis==7.4.0 \ --hash=sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad \ From a0431b32d6c6e34314aee43b023abb12b944bd9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:17:26 +1000 Subject: [PATCH 14/71] chore(deps): bump follow-redirects in /src/frontend (#11749) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.11 to 1.16.0. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.11...v1.16.0) --- updated-dependencies: - dependency-name: follow-redirects dependency-version: 1.16.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Matthias Mair --- src/frontend/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock index 546d1c2067..f3ad510dcf 100644 --- a/src/frontend/yarn.lock +++ b/src/frontend/yarn.lock @@ -3360,9 +3360,9 @@ find-up@^5.0.0: path-exists "^4.0.0" follow-redirects@^1.15.11: - version "1.15.11" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + version "1.16.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" + integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== foreground-child@^2.0.0: version "2.0.0" From 481f25cd3296b89f06dabc11f9eb5bed32379847 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:24:08 +1000 Subject: [PATCH 15/71] chore(deps): bump the dependencies group with 2 updates (#11770) Bumps the dependencies group with 2 updates: [actions/upload-artifact](https://github.com/actions/upload-artifact) and [oasdiff/oasdiff-action](https://github.com/oasdiff/oasdiff-action). Updates `actions/upload-artifact` from 7.0.0 to 7.0.1 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/bbbca2ddaa5d8feaa63e36b76fdaad77386f024f...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a) Updates `oasdiff/oasdiff-action` from 0.0.37 to 0.0.39 - [Release notes](https://github.com/oasdiff/oasdiff-action/releases) - [Commits](https://github.com/oasdiff/oasdiff-action/compare/1f38ea5ea0b4a2e4e49901c3bcdf4386a05e9ea1...f8cb9308b42121e793f835bd14c0b8090420430c) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: oasdiff/oasdiff-action dependency-version: 0.0.39 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/qc_checks.yaml | 16 ++++++++-------- .github/workflows/release.yaml | 2 +- .github/workflows/scorecard.yaml | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 1dd9e318a0..8f54291d4f 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -202,7 +202,7 @@ jobs: - name: Export API Documentation run: invoke dev.schema --ignore-warnings --filename src/backend/InvenTree/schema.yml - name: Upload schema - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: schema.yml path: src/backend/InvenTree/schema.yml @@ -222,7 +222,7 @@ jobs: echo "Downloaded api.yaml" - name: Running OpenAPI Spec diff action id: breaking_changes - uses: oasdiff/oasdiff-action/diff@1f38ea5ea0b4a2e4e49901c3bcdf4386a05e9ea1 # pin@main + uses: oasdiff/oasdiff-action/diff@f8cb9308b42121e793f835bd14c0b8090420430c # pin@main with: base: "api.yaml" revision: "src/backend/InvenTree/schema.yml" @@ -251,17 +251,17 @@ jobs: - name: Extract settings / tags run: invoke int.export-definitions --basedir docs - name: Upload settings - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: inventree_settings.json path: docs/generated/inventree_settings.json - name: Upload tags - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: inventree_tags.yml path: docs/generated/inventree_tags.yml - name: Upload filters - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: inventree_filters.yml path: docs/generated/inventree_filters.yml @@ -409,7 +409,7 @@ jobs: - name: Coverage Tests run: invoke dev.test --check --coverage --translations - name: Upload raw coverage to artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: coverage path: .coverage @@ -725,7 +725,7 @@ jobs: invoke static env INVENTREE_CUSTOM_SPLASH="img/playwright_custom_splash.png" INVENTREE_CUSTOM_LOGO="img/playwright_custom_logo.png" npx nyc playwright test --project=customization npx nyc playwright test --project=chromium --project=firefox - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 if: ${{ !cancelled() && steps.tests.outcome == 'failure' }} with: name: playwright-report @@ -770,7 +770,7 @@ jobs: run: | cd src/backend/InvenTree/web/static zip -r frontend-build.zip web/ web/.vite - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: frontend-build path: src/backend/InvenTree/web/static/web diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ff8afc0604..56debc6675 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -86,7 +86,7 @@ jobs: tag: ${{ github.ref }} overwrite: true - name: Upload frontend to artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: frontend-build path: src/backend/InvenTree/web/static/frontend-build.zip diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 4a0bc3ab6a..e525beeef8 100644 --- a/.github/workflows/scorecard.yaml +++ b/.github/workflows/scorecard.yaml @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file path: results.sarif From 3c9b014939db6c4dc5360398e1b36194487908d7 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Tue, 21 Apr 2026 02:26:39 +0200 Subject: [PATCH 16/71] add frontend cookie removal of mfa trust (#11768) --- src/frontend/src/functions/auth.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/frontend/src/functions/auth.tsx b/src/frontend/src/functions/auth.tsx index e2e58d4da4..6f541f049c 100644 --- a/src/frontend/src/functions/auth.tsx +++ b/src/frontend/src/functions/auth.tsx @@ -212,6 +212,10 @@ export const doLogout = async (navigate: NavigateFunction) => { await authApi(apiUrl(ApiEndpoints.auth_session), undefined, 'delete').catch( () => {} ); + // remove MFA token (mfa_trusted) + document.cookie = + 'mfa_trusted=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'; + showLoginNotification({ title: t`Logged Out`, message: t`Successfully logged out` From d81a87225c10812d20aac258d8574f5e9a498047 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 21 Apr 2026 12:23:53 +1000 Subject: [PATCH 17/71] Ensure configuration settings are documented (#11674) * Export configuration keys to JSON * Support rendering of config options in docs * Check for missing config settings * Simplify macro * Initial tests * Fix collisions * Updates * Ensure values are stringified * Ensure null values are exported correctly * Refactor database config - Observability on the config settings * More docs updates * Updates * Add observability of cache settings * More updates * Observability * Set env config for RTD * Revert RTD config file - Handled by ENV VAR on RTD account * Visibility on background worker settings * Tweaks * Tweaks * Split tracing settings out into separate file - Improved discovery - declutter settings.py * Cleanup LDAP settings * Social providers docs * More updates * Refactor ldap setup into own module * Tweaks * Formatting tweaks * Tweak logic * Fix INVENTREE_SESSION_COOKIE_SECURE setting * Fix wrapping * Add custom default --- docs/docs/hooks.py | 20 +- docs/docs/plugins/test.md | 9 +- docs/docs/settings/SSO.md | 8 +- docs/docs/start/advanced.md | 73 ++-- docs/docs/start/backup.md | 26 +- docs/docs/start/config.md | 326 +++++++------- docs/docs/start/docker_install.md | 12 +- docs/main.py | 30 ++ src/backend/InvenTree/InvenTree/api.py | 2 +- src/backend/InvenTree/InvenTree/cache.py | 78 ++-- src/backend/InvenTree/InvenTree/config.py | 12 +- .../commands/export_settings_definitions.py | 15 +- .../InvenTree/InvenTree/setting/db_backend.py | 58 +++ .../InvenTree/InvenTree/setting/ldap.py | 139 ++++++ .../InvenTree/InvenTree/setting/tracing.py | 61 +++ .../InvenTree/InvenTree/setting/worker.py | 88 ++++ src/backend/InvenTree/InvenTree/settings.py | 402 +++--------------- src/backend/InvenTree/InvenTree/tasks.py | 3 +- src/backend/InvenTree/common/serializers.py | 11 +- tasks.py | 16 +- 20 files changed, 754 insertions(+), 635 deletions(-) create mode 100644 src/backend/InvenTree/InvenTree/setting/ldap.py create mode 100644 src/backend/InvenTree/InvenTree/setting/tracing.py create mode 100644 src/backend/InvenTree/InvenTree/setting/worker.py diff --git a/docs/docs/hooks.py b/docs/docs/hooks.py index 2cd00cd586..b038738565 100644 --- a/docs/docs/hooks.py +++ b/docs/docs/hooks.py @@ -280,9 +280,27 @@ def on_post_build(*args, **kwargs): ignored_settings = { 'global': ['SERVER_RESTART_REQUIRED'], 'user': ['LAST_USED_PRINTING_MACHINES'], + 'config': [ + 'INVENTREE_DB_TCP_KEEPALIVES', + 'INVENTREE_DB_TCP_KEEPALIVES_IDLE', + 'INVENTREE_DB_TCP_KEEPALIVES_INTERVAL', + 'INVENTREE_DB_TCP_KEEPALIVES_COUNT', + 'INVENTREE_DB_ISOLATION_SERIALIZABLE', + 'INVENTREE_DB_WAL_MODE', + 'INVENTREE_PLUGIN_DIR', + 'INVENTREE_DOCKER', + 'INVENTREE_FLAGS', + 'INVENTREE_REMOTE_LOGIN', + 'INVENTREE_REMOTE_LOGIN_HEADER', + 'TEST_TRANSLATIONS', + 'INVENTREE_FRONTEND_URL_BASE', + 'INVENTREE_FRONTEND_API_HOST', + 'INVENTREE_FRONTEND_SETTINGS', + 'INVENTREE_LOGOUT_REDIRECT_URL', + ], } - for group in ['global', 'user']: + for group in ['global', 'user', 'config']: expected = expected_settings.get(group, {}) observed = observed_settings.get(group, {}) ignored = ignored_settings.get(group, []) diff --git a/docs/docs/plugins/test.md b/docs/docs/plugins/test.md index 775da49c03..a1eddd8912 100644 --- a/docs/docs/plugins/test.md +++ b/docs/docs/plugins/test.md @@ -9,11 +9,10 @@ For complicated plugins it makes sense to add unit tests the code to ensure that For plugin testing the following environment variables must be set to True: -| Name | Function | Value | -| ---- | -------- | ----- | -| INVENTREE_PLUGINS_ENABLED | Enables the use of 3rd party plugins | True | -| INVENTREE_PLUGIN_TESTING | Enables enables all plugins no matter of their active state in the db or built-in flag | True | -| INVENTREE_PLUGIN_TESTING_SETUP | Enables the url mixin | True | +{{ configtable() }} +{{ configsetting("INVENTREE_PLUGINS_ENABLED") }} Enables the use of 3rd party plugins | +{{ configsetting("INVENTREE_PLUGIN_TESTING") }} Enables enables all plugins no matter of their active state in the db or built-in flag | +{{ configsetting("INVENTREE_PLUGIN_TESTING_SETUP") }} Enables the url mixin | ### Test Program diff --git a/docs/docs/settings/SSO.md b/docs/docs/settings/SSO.md index 62849500b1..ab7d3a539c 100644 --- a/docs/docs/settings/SSO.md +++ b/docs/docs/settings/SSO.md @@ -29,10 +29,10 @@ The first step is to ensure that the required provider modules are installed, vi There are two variables in the configuration file which define the operation of SSO: -| Environment Variable |Configuration File | Description | More Info | -| --- | --- | --- | --- | -| INVENTREE_SOCIAL_BACKENDS | `social_backends` | A *list* of provider backends enabled for the InvenTree instance | [django-allauth docs](https://docs.allauth.org/en/latest/installation/quickstart.html) | -| INVENTREE_SOCIAL_PROVIDERS | `social_providers` | A *dict* of settings specific to the installed providers | [provider documentation](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) | +{{ configtable() }} +{{ configsetting("INVENTREE_SOCIAL_BACKENDS") }} A *list* of [social provider backends](https://docs.allauth.org/en/latest/installation/quickstart.html) enabled for the InvenTree instance | +{{ configsetting("INVENTREE_SOCIAL_PROVIDERS") }} A *dict* of settings specific to the [installed providers](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) | + In the example below, SSO provider modules are activated for *google*, *github* and *microsoft*. Specific configuration options are specified for the *microsoft* provider module: diff --git a/docs/docs/start/advanced.md b/docs/docs/start/advanced.md index 14d8af5a3c..9bacc83924 100644 --- a/docs/docs/start/advanced.md +++ b/docs/docs/start/advanced.md @@ -51,46 +51,44 @@ You can link your InvenTree server to an LDAP server. Next you can start configuring the connection. Either use the config file or set the environment variables. -| config key | ENV Variable | Description | -| --- | --- | --- | -| `ldap.enabled` | `INVENTREE_LDAP_ENABLED` | Set this to `True` to enable LDAP. | -| `ldap.debug` | `INVENTREE_LDAP_DEBUG` | Set this to `True` to activate debug mode, useful for troubleshooting ldap configurations. | -| `ldap.server_uri` | `INVENTREE_LDAP_SERVER_URI` | LDAP Server URI, e.g. `ldaps://example.org` | -| `ldap.start_tls` | `INVENTREE_LDAP_START_TLS` | Enable TLS encryption over the standard LDAP port, [see](https://django-auth-ldap.readthedocs.io/en/latest/reference.html#auth-ldap-start-tls). (You can set TLS options via `ldap.global_options`) | -| `ldap.bind_dn` | `INVENTREE_LDAP_BIND_DN` | LDAP bind dn, e.g. `cn=admin,dc=example,dc=org` | -| `ldap.bind_password` | `INVENTREE_LDAP_BIND_PASSWORD` | LDAP bind password | -| `ldap.search_base_dn` | `INVENTREE_LDAP_SEARCH_BASE_DN` | LDAP search base dn, e.g. `cn=Users,dc=example,dc=org` | -| `ldap.user_dn_template` | `INVENTREE_LDAP_USER_DN_TEMPLATE` | use direct bind as auth user, `ldap.bind_dn` and `ldap.bin_password` is not necessary then, e.g. `uid=%(user)s,dc=example,dc=org` | -| `ldap.global_options` | `INVENTREE_LDAP_GLOBAL_OPTIONS` | set advanced options as dict, e.g. TLS settings. For a list of all available options, see [python-ldap docs](https://www.python-ldap.org/en/latest/reference/ldap.html#ldap-options). (keys and values starting with OPT_ get automatically converted to `python-ldap` keys) | -| `ldap.search_filter_str`| `INVENTREE_LDAP_SEARCH_FILTER_STR` | LDAP search filter str, default: `uid=%(user)s` | -| `ldap.user_attr_map` | `INVENTREE_LDAP_USER_ATTR_MAP` | LDAP <-> InvenTree user attribute map, can be json if used as env, in yml directly specify the object. default: `{"first_name": "givenName", "last_name": "sn", "email": "mail"}` | -| `ldap.always_update_user` | `INVENTREE_LDAP_ALWAYS_UPDATE_USER` | Always update the user on each login, default: `true` | -| `ldap.cache_timeout` | `INVENTREE_LDAP_CACHE_TIMEOUT` | cache timeout to reduce traffic with LDAP server, default: `3600` (1h) | -| `ldap.group_search` | `INVENTREE_LDAP_GROUP_SEARCH` | Base LDAP DN for group searching; required to enable group features | -| `ldap.group_object_class` | `INVENTREE_LDAP_GROUP_OBJECT_CLASS` | The string to pass to the LDAP group search `(objectClass=<...>)`, default: `groupOfUniqueNames` | -| `ldap.mirror_groups` | `INVENTREE_LDAP_MIRROR_GROUPS` | If `True`, mirror a user's LDAP group membership in the Django database, default: `False` | -| `ldap.group_type_class` | `INVENTREE_LDAP_GROUP_TYPE_CLASS` | The group class to be imported from `django_auth_ldap.config` as a string, default: `'GroupOfUniqueNamesType'`| -| `ldap.group_type_class_args` | `INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS` | A `list` of positional args to pass to the LDAP group type class, default `[]` | -| `ldap.group_type_class_kwargs` | `INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS` | A `dict` of keyword args to pass to the LDAP group type class, default `{'name_attr': 'cn'}` | -| `ldap.require_group` | `INVENTREE_LDAP_REQUIRE_GROUP` | If set, users _must_ be in this group to log in to InvenTree | -| `ldap.deny_group` | `INVENTREE_LDAP_DENY_GROUP` | If set, users _must not_ be in this group to log in to InvenTree | -| `ldap.user_flags_by_group` | `INVENTREE_LDAP_USER_FLAGS_BY_GROUP` | LDAP group to InvenTree user flag map, can be json if used as env, in yml directly specify the object. See config template for example, default: `{}` | +{{ configtable() }} +{{ configsetting("INVENTREE_LDAP_ENABLED") }} Enable LDAP support | +{{ configsetting("INVENTREE_LDAP_DEBUG") }} Set this to `True` to activate debug mode, useful for troubleshooting ldap configurations. | +| `INVENTREE_LDAP_SERVER_URI` | `ldap.server_uri` | LDAP Server URI, e.g. `ldaps://example.org` | +| `INVENTREE_LDAP_START_TLS` | `ldap.start_tls` | Enable TLS encryption over the standard LDAP port, [see](https://django-auth-ldap.readthedocs.io/en/latest/reference.html#auth-ldap-start-tls). (You can set TLS options via `ldap.global_options`) | +| `INVENTREE_LDAP_BIND_DN` | `ldap.bind_dn` | LDAP bind dn, e.g. `cn=admin,dc=example,dc=org` | +| `INVENTREE_LDAP_BIND_PASSWORD` | `ldap.bind_password` | LDAP bind password | +| `INVENTREE_LDAP_SEARCH_BASE_DN` | `ldap.search_base_dn` | LDAP search base dn, e.g. `cn=Users,dc=example,dc=org` | +| `INVENTREE_LDAP_USER_DN_TEMPLATE` | `ldap.user_dn_template` | use direct bind as auth user, `ldap.bind_dn` and `ldap.bin_password` is not necessary then, e.g. `uid=%(user)s,dc=example,dc=org` | +| `INVENTREE_LDAP_GLOBAL_OPTIONS` | `ldap.global_options` | set advanced options as dict, e.g. TLS settings. For a list of all available options, see [python-ldap docs](https://www.python-ldap.org/en/latest/reference/ldap.html#ldap-options). (keys and values starting with OPT_ get automatically converted to `python-ldap` keys) | +| `INVENTREE_LDAP_SEARCH_FILTER_STR`| `ldap.search_filter_str` | LDAP search filter str, default: `uid=%(user)s` | +| `INVENTREE_LDAP_USER_ATTR_MAP` | `ldap.user_attr_map` | LDAP <-> InvenTree user attribute map, can be json if used as env, in yml directly specify the object. default: `{"first_name": "givenName", "last_name": "sn", "email": "mail"}` | +| `INVENTREE_LDAP_ALWAYS_UPDATE_USER` | `ldap.always_update_user` | Always update the user on each login, default: `true` | +| `INVENTREE_LDAP_CACHE_TIMEOUT` | `ldap.cache_timeout` | cache timeout to reduce traffic with LDAP server, default: `3600` (1h) | +| `INVENTREE_LDAP_GROUP_SEARCH` | `ldap.group_search` | Base LDAP DN for group searching; required to enable group features | +| `INVENTREE_LDAP_GROUP_OBJECT_CLASS` | `ldap.group_object_class` | The string to pass to the LDAP group search `(objectClass=<...>)`, default: `groupOfUniqueNames` | +| `INVENTREE_LDAP_MIRROR_GROUPS` | `ldap.mirror_groups` | If `True`, mirror a user's LDAP group membership in the Django database, default: `False` | +| `INVENTREE_LDAP_GROUP_TYPE_CLASS` | `ldap.group_type_class` | The group class to be imported from `django_auth_ldap.config` as a string, default: `'GroupOfUniqueNamesType'`| +| `INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS` | `ldap.group_type_class_args` | A `list` of positional args to pass to the LDAP group type class, default `[]` | +| `INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS` | `ldap.group_type_class_kwargs` | A `dict` of keyword args to pass to the LDAP group type class, default `{'name_attr': 'cn'}` | +| `INVENTREE_LDAP_REQUIRE_GROUP` | `ldap.require_group` | If set, users _must_ be in this group to log in to InvenTree | +| `INVENTREE_LDAP_DENY_GROUP` | `ldap.deny_group` | If set, users _must not_ be in this group to log in to InvenTree | +| `INVENTREE_LDAP_USER_FLAGS_BY_GROUP` | `ldap.user_flags_by_group` | LDAP group to InvenTree user flag map, can be json if used as env, in yml directly specify the object. See config template for example, default: `{}` | ## Tracing support Starting with 0.14.0 InvenTree supports sending traces, logs and metrics to OpenTelemetry compatible endpoints (both HTTP and gRPC). A [list of vendors](https://opentelemetry.io/ecosystem/vendors) is available on the project site. This can be used to track usage and performance of the InvenTree backend and connected services like databases, caches and more. -| config key | ENV Variable | Description | -| --- | --- | --- | -| `tracing.enabled` | `INVENTREE_TRACING_ENABLED` | Set this to `True` to enable OpenTelemetry. | -| `tracing.endpoint` | `INVENTREE_TRACING_ENDPOINT` | General endpoint for information (not specific trace/log url) | -| `tracing.headers` | `INVENTREE_TRACING_HEADERS` | HTTP headers that should be send with every request (often used for authentication). Format as a dict. | -| `tracing.auth.basic` | `INVENTREE_TRACING_AUTH_BASIC` | Auth headers that should be send with every requests (will be encoded to b64 and overwrite auth headers) | -| `tracing.is_http` | `INVENTREE_TRACING_IS_HTTP` | Are the endpoints HTTP (True, default) or gRPC (False) | -| `tracing.append_http` | `INVENTREE_TRACING_APPEND_HTTP` | Append default url routes (v1) to `tracing.endpoint` | -| `tracing.console` | `INVENTREE_TRACING_CONSOLE` | Print out all exports (additionally) to the console for debugging. Do not use in production | -| `tracing.resources` | `INVENTREE_TRACING_RESOURCES` | Add additional resources to all exports. This can be used to add custom tags to the traces. Format as a dict. | +{{ configtable() }} +{{ configsetting("INVENTREE_TRACING_ENABLED") }} Enable OpenTelemetry | +{{ configsetting("INVENTREE_TRACING_ENDPOINT") }} General endpoint for information (not specific trace/log url) | +{{ configsetting("INVENTREE_TRACING_HEADERS") }} HTTP headers that should be send with every request (often used for authentication). Format as a dict. | +{{ configsetting("INVENTREE_TRACING_AUTH") }} Auth headers that should be send with every requests (will be encoded to b64 and overwrite auth headers) | +{{ configsetting("INVENTREE_TRACING_IS_HTTP") }} Are the endpoints HTTP (True, default) or gRPC (False) | +{{ configsetting("INVENTREE_TRACING_APPEND_HTTP") }} Append default url routes (v1) to `tracing.endpoint` | +{{ configsetting("INVENTREE_TRACING_CONSOLE") }} Print out all exports (additionally) to the console for debugging. Do not use in production | +{{ configsetting("INVENTREE_TRACING_RESOURCES") }} Add additional resources to all exports. This can be used to add custom tags to the traces. Format as a dict. | ## Multi Site Support @@ -99,7 +97,6 @@ If your InvenTree instance is used in a multi-site environment, you can enable m !!! tip "Django Documentation" For more information on multi-site support, refer to the [Django documentation]({% include "django.html" %}/ref/contrib/sites/). -| Environment Variable | Config Key | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SITE_MULTI | site_multi | Enable multiple sites | False | -| INVENTREE_SITE_ID | site_id | Specify a fixed site ID | _Not specified_ | +{{ configtable() }} +{{ configsetting("INVENTREE_SITE_MULTI") }} Enable multiple sites | +{{ configsetting("INVENTREE_SITE_ID") }} Specify a fixed site ID | diff --git a/docs/docs/start/backup.md b/docs/docs/start/backup.md index e96cc0088a..fb6ae5f9c9 100644 --- a/docs/docs/start/backup.md +++ b/docs/docs/start/backup.md @@ -17,19 +17,19 @@ The django-dbbackup library provides [multiple configuration options](https://ar The following configuration options are available for backup: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_BACKUP_STORAGE | backup_storage | Backup storage backend. Refer to the [storage backend documentation](#storage-backend). | django.core.files.storage.FileSystemStorage | -| INVENTREE_BACKUP_DIR | backup_dir | Backup storage directory. | *No default* | -| INVENTREE_BACKUP_OPTIONS | backup_options | Specific options for the selected storage backend (dict) | *No default* | -| INVENTREE_BACKUP_CONNECTOR_OPTIONS | backup_connector_options | Specific options for the database connector (dict). Refer to the [database connector options](#database-connector). | *No default* | -| INVENTREE_BACKUP_SEND_EMAIL | backup_send_email | If True, an email is sent to the site admin when an error occurs during a backup or restore procedure. | False | -| INVENTREE_BACKUP_EMAIL_PREFIX | backup_email_prefix | Prefix for the subject line of backup-related emails. | `[InvenTree Backup]` | -| INVENTREE_BACKUP_GPG_RECIPIENT | backup_gpg_recipient | Specify GPG recipient if using encryption for backups. | *No default* | -| INVENTREE_BACKUP_DATE_FORMAT | backup_date_format | Date format string used to format timestamps in backup filenames. | `%Y-%m-%d-%H%M%S` | -| INVENTREE_BACKUP_DATABASE_FILENAME_TEMPLATE | backup_database_filename_template | Template string used to generate database backup filenames. | `InvenTree-db-{datetime}.{extension}` | -| INVENTREE_BACKUP_MEDIA_FILENAME_TEMPLATE | backup_media_filename_template | Template string used to generate media backup filenames. | `InvenTree-media-{datetime}.{extension}` | -| INVENTREE_BACKUP_RESTORE_ALLOW_NEWER_VERSION | backup_restore_allow_newer_version | If True, allows restoring a backup created with a newer version of InvenTree. This is dangerous as it can lead to hard-to-debug data loss. | False | +{{ configtable() }} +{{ configsetting("INVENTREE_BACKUP_STORAGE") }} Backup storage backend. Refer to the [storage backend documentation](#storage-backend). | +{{ configsetting("INVENTREE_BACKUP_DIR") }} Backup storage directory. | +{{ configsetting("INVENTREE_BACKUP_OPTIONS") }} Specific options for the selected storage backend (dict) | +{{ configsetting("INVENTREE_BACKUP_CONNECTOR_OPTIONS") }} Specific options for the database connector (dict). Refer to the [database connector options](#database-connector) | +{{ configsetting("INVENTREE_BACKUP_SEND_EMAIL") }} If True, an email is sent to the site admin when an error occurs during a backup or restore procedure. | +{{ configsetting("INVENTREE_BACKUP_EMAIL_PREFIX") }} Prefix for the subject line of backup-related emails. | +{{ configsetting("INVENTREE_BACKUP_GPG_RECIPIENT") }} Specify GPG recipient if using encryption for backups. | +{{ configsetting("INVENTREE_BACKUP_DATE_FORMAT") }} Date format string used to format timestamps in backup filenames. | +{{ configsetting("INVENTREE_BACKUP_DATABASE_FILENAME_TEMPLATE") }} Template string used to generate database backup filenames. +{{ configsetting("INVENTREE_BACKUP_MEDIA_FILENAME_TEMPLATE") }} Template string used to generate media backup filenames. | +{{ configsetting("INVENTREE_BACKUP_RESTORE_ALLOW_NEWER_VERSION") }} If True, allows restoring a backup created with a newer version of InvenTree. This is dangerous as it can lead to hard-to-debug data loss. | + ### Storage Backend diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index 2c8fcbd4ed..25b7fd6639 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -46,6 +46,9 @@ Environment variable settings generally use the `INVENTREE_` prefix, and are all !!! warning "Available Variables" Some configuration options cannot be set via environment variables. Refer to the documentation below. +!!! info "Environment Variable Priority" + Note that a provided environment variable will override the value provided in the configuration file. + #### List Values To specify a list value in an environment variable, use a comma-separated list. For example, to specify a list of trusted origins: @@ -58,14 +61,13 @@ INVENTREE_TRUSTED_ORIGINS='https://inventree.example.com:8443,https://stock.exam The following basic options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SITE_URL | site_url | Specify a fixed site URL | *Not specified* | -| INVENTREE_TIMEZONE | timezone | Server timezone | UTC | -| INVENTREE_ADMIN_ENABLED | admin_enabled | Enable the [django administrator interface]({% include "django.html" %}/ref/contrib/admin/) | True | -| INVENTREE_ADMIN_URL | admin_url | URL for accessing [admin interface](../settings/admin.md) | admin | -| INVENTREE_LANGUAGE | language | Default language | en-us | -| INVENTREE_AUTO_UPDATE | auto_update | Database migrations will be run automatically | False | +{{ configtable() }} +{{ configsetting("INVENTREE_SITE_URL") }} Specify a fixed site URL | +{{ configsetting("INVENTREE_TIMEZONE") }} Server timezone | +{{ configsetting("INVENTREE_ADMIN_ENABLED") }} Enable the [django administrator interface]({% include "django.html" %}/ref/contrib/admin/) | +{{ configsetting("INVENTREE_ADMIN_URL") }} URL for accessing [admin interface](../settings/admin.md) | +{{ configsetting("INVENTREE_LANGUAGE") }} Default language | +{{ configsetting("INVENTREE_AUTO_UPDATE") }} Database migrations will be run automatically | ### Site URL @@ -89,18 +91,17 @@ With "auto update" enabled, the InvenTree server will automatically apply databa The following debugging / logging options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DEBUG | debug | Enable [debug mode](./index.md#debug-mode) | False | -| INVENTREE_DEBUG_QUERYCOUNT | debug_querycount | Enable support for [django-querycount](../develop/index.md#django-querycount) middleware. | False | -| INVENTREE_DEBUG_SILK | debug_silk | Enable support for [django-silk](../develop/index.md#django-silk) profiling tool. | False | -| INVENTREE_DEBUG_SILK_PROFILING | debug_silk_profiling | Enable detailed profiling in django-silk | False | -| INVENTREE_DB_LOGGING | db_logging | Enable logging of database messages | False | -| INVENTREE_LOG_LEVEL | log_level | Set level of logging to terminal | WARNING | -| INVENTREE_JSON_LOG | json_log | log as json | False | -| INVENTREE_WRITE_LOG | write_log | Enable writing of log messages to file at config base | False | -| INVENTREE_CONSOLE_LOG | console_log | Enable logging to console | True | -| INVENTREE_SCHEMA_LEVEL | schema.level | Set level of added schema extensions detail (0-3) 0 = including no additional detail | 0 | +{{ configtable() }} +{{ configsetting("INVENTREE_DEBUG") }} Enable [debug mode](./index.md#debug-mode) | +{{ configsetting("INVENTREE_DB_LOGGING") }} Enable logging of database messages | +{{ configsetting("INVENTREE_LOG_LEVEL") }} Set level of logging to terminal | +{{ configsetting("INVENTREE_JSON_LOG") }} Log messages as json | +{{ configsetting("INVENTREE_WRITE_LOG") }} Enable writing of log messages to file at config base | +{{ configsetting("INVENTREE_CONSOLE_LOG") }} Enable logging to console | +{{ configsetting("INVENTREE_SCHEMA_LEVEL") }} Set level of added schema extensions detail (0-3) 0 = including no additional detail | +{{ configsetting("INVENTREE_DEBUG_QUERYCOUNT") }} Enable support for [django-querycount](../develop/index.md#django-querycount) middleware. | +{{ configsetting("INVENTREE_DEBUG_SILK") }} Enable support for [django-silk](../develop/index.md#django-silk) profiling tool. | +| `INVENTREE_DEBUG_SILK_PROFILING` | `debug_silk_profiling` | False | Enable detailed profiling in django-silk | ### Debug Mode @@ -118,26 +119,24 @@ Depending on how your InvenTree installation is configured, you will need to pay !!! danger "Not Secure" Allowing access from any host is not secure, and should be adjusted for your installation. -!!! info "Environment Variables" - Note that a provided environment variable will override the value provided in the configuration file. - !!! success "INVENTREE_SITE_URL" If you have specified the `INVENTREE_SITE_URL`, this will automatically be used as a trusted CSRF and CORS host (see below). -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_ALLOWED_HOSTS | allowed_hosts | List of allowed hosts | `*` | -| INVENTREE_TRUSTED_ORIGINS | trusted_origins | List of trusted origins. Refer to the [django documentation]({% include "django.html" %}/ref/settings/#csrf-trusted-origins) | Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list. | -| INVENTREE_CORS_ORIGIN_ALLOW_ALL | cors.allow_all | Allow all remote URLS for CORS checks | `False` | -| INVENTREE_CORS_ORIGIN_WHITELIST | cors.whitelist | List of whitelisted CORS URLs. Refer to the [django-cors-headers documentation](https://github.com/adamchainz/django-cors-headers#cors_allowed_origins-sequencestr) | Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list. | -| INVENTREE_CORS_ORIGIN_REGEX | cors.regex | List of regular expressions for CORS whitelisted URL patterns | *Empty list* | -| INVENTREE_CORS_ALLOW_CREDENTIALS | cors.allow_credentials | Allow cookies in cross-site requests | `True` | -| INVENTREE_SITE_LAX_PROTOCOL | site_lax_protocol | Ignore protocol mismatches on INVE-E7 site checks | `True` | -| INVENTREE_USE_X_FORWARDED_HOST | use_x_forwarded_host | Use forwarded host header | `False` | -| INVENTREE_USE_X_FORWARDED_PORT | use_x_forwarded_port | Use forwarded port header | `False` | -| INVENTREE_USE_X_FORWARDED_PROTO | use_x_forwarded_proto | Use forwarded protocol header | `False` | -| INVENTREE_SESSION_COOKIE_SECURE | cookie.secure | Enforce secure session cookies | `False` | -| INVENTREE_COOKIE_SAMESITE | cookie.samesite | Session cookie mode. Must be one of `Strict | Lax | None | False`. Refer to the [mozilla developer docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) and the [django documentation]({% include "django.html" %}/ref/settings/#std-setting-SESSION_COOKIE_SAMESITE) for more information. | False | +{{ configtable() }} +{{ configsetting("INVENTREE_ALLOWED_HOSTS") }} List of allowed hosts | +{{ configsetting("INVENTREE_TRUSTED_ORIGINS", default="Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list.") }} List of trusted origins. Refer to the [django documentation]({% include "django.html" %}/ref/settings/#csrf-trusted-origins) | +{{ configsetting("INVENTREE_CORS_ORIGIN_ALLOW_ALL") }} Allow all remote URLS for CORS checks | +{{ configsetting("INVENTREE_CORS_ORIGIN_WHITELIST", default="Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list.") }} List of whitelisted CORS URLs. Refer to the [django-cors-headers documentation](https://github.com/adamchainz/django-cors-headers#cors_allowed_origins-sequencestr) | +{{ configsetting("INVENTREE_CORS_ORIGIN_REGEX") }} List of regular expressions for CORS whitelisted URL patterns | +{{ configsetting("INVENTREE_CORS_ALLOW_CREDENTIALS") }} Allow cookies in cross-site requests | +{{ configsetting("INVENTREE_SITE_LAX_PROTOCOL") }} Ignore protocol mismatches on INVE-E7 site checks | +{{ configsetting("INVENTREE_USE_X_FORWARDED_HOST") }} Use forwarded host header | +{{ configsetting("INVENTREE_USE_X_FORWARDED_PORT") }} Use forwarded port header | +{{ configsetting("INVENTREE_USE_X_FORWARDED_PROTO") }} Use forwarded protocol header | +| `INVENTREE_X_FORWARDED_PROTO_NAME` | `x_forwarded_proto_name` | `HTTP_X_FORWARDED_PROTO` | Name of the header to use for forwarded protocol information | +{{ configsetting("INVENTREE_SESSION_COOKIE_SECURE") }} Enforce secure session cookies | +{{ configsetting("INVENTREE_COOKIE_SAMESITE") }} Session cookie mode. Must be one of `Strict | Lax | None | False`. Refer to the [mozilla developer docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) and the [django documentation]({% include "django.html" %}/ref/settings/#std-setting-SESSION_COOKIE_SAMESITE) for more information. | + ### Debug Mode @@ -191,10 +190,9 @@ Django provides a powerful [administrator interface]({% include "django.html" %} The following admin site configuration options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_ADMIN_ENABLED | admin_enabled | Enable the django administrator interface | True | -| INVENTREE_ADMIN_URL | admin_url | URL for accessing the admin interface | admin | +{{ configtable() }} +{{ configsetting("INVENTREE_ADMIN_ENABLED") }} Enable the django administrator interface | +{{ configsetting("INVENTREE_ADMIN_URL") }} URL for accessing the admin interface | !!! warning "Security" Changing the admin URL is a simple way to improve security, but it is not a substitute for proper security practices. @@ -203,12 +201,11 @@ The following admin site configuration options are available: An administrator account can be specified using the following environment variables: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_ADMIN_USER | admin_user | Admin account username | *Not specified* | -| INVENTREE_ADMIN_PASSWORD | admin_password | Admin account password | *Not specified* | -| INVENTREE_ADMIN_PASSWORD_FILE | admin_password_file | Admin account password file | *Not specified* | -| INVENTREE_ADMIN_EMAIL | admin_email |Admin account email address | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_ADMIN_USER") }} Admin account username | +{{ configsetting("INVENTREE_ADMIN_PASSWORD") }} Admin account password | +{{ configsetting("INVENTREE_ADMIN_PASSWORD_FILE") }} Admin account password file | +{{ configsetting("INVENTREE_ADMIN_EMAIL") }} Admin account email address | You can either specify the password directly using `INVENTREE_ADMIN_PASSWORD`, or you can specify a file containing the password using `INVENTREE_ADMIN_PASSWORD_FILE` (this is useful for nix users). @@ -238,12 +235,11 @@ A PEM-encoded file containing the oidc private key can be passed via the environ If not specified via environment variables, the fallback files (automatically generated as part of InvenTree installation) will be used. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SECRET_KEY | secret_key | Raw secret key value | *Not specified* | -| INVENTREE_SECRET_KEY_FILE | secret_key_file | File containing secret key value | *Not specified* | -| INVENTREE_OIDC_PRIVATE_KEY | oidc_private_key | Raw private key value | *Not specified* | -| INVENTREE_OIDC_PRIVATE_KEY_FILE | oidc_private_key_file | File containing private key value in PEM format | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_SECRET_KEY") }} Raw secret key value | +{{ configsetting("INVENTREE_SECRET_KEY_FILE") }} File containing secret key value | +{{ configsetting("INVENTREE_OIDC_PRIVATE_KEY") }} Raw private key value | +{{ configsetting("INVENTREE_OIDC_PRIVATE_KEY_FILE", default="oidc.pem") }} File containing private key value in PEM format | ## Database Options @@ -253,14 +249,14 @@ Database options are specified under the *database* heading in the configuration The following database options can be configured: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_ENGINE | database.ENGINE | Database backend | *Not specified* | -| INVENTREE_DB_NAME | database.NAME | Database name | *Not specified* | -| INVENTREE_DB_USER | database.USER | Database username (if required) | *Not specified* | -| INVENTREE_DB_PASSWORD | database.PASSWORD | Database password (if required) | *Not specified* | -| INVENTREE_DB_HOST | database.HOST | Database host address (if required) | *Not specified* | -| INVENTREE_DB_PORT | database.PORT | Database host port (if required) | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_DB_ENGINE") }} Database backend | +{{ configsetting("INVENTREE_DB_NAME") }} Database name | +{{ configsetting("INVENTREE_DB_USER") }} Database username (if required) | +{{ configsetting("INVENTREE_DB_PASSWORD") }} Database password (if required) | +{{ configsetting("INVENTREE_DB_HOST") }} Database host address (if required) | +{{ configsetting("INVENTREE_DB_PORT") }} Database host port (if required) | +{{ configsetting("INVENTREE_DB_OPTIONS") }} Additional database options (as a JSON object) | !!! tip "Database Password" The value specified for `INVENTREE_DB_PASSWORD` should not contain comma `,` or colon `:` characters, otherwise the connection to the database may fail. @@ -269,22 +265,20 @@ The following database options can be configured: If running with a PostgreSQL database backend, the following additional options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 2 | -| INVENTREE_DB_TCP_KEEPALIVES | database.tcp_keepalives | TCP keepalive | 1 | -| INVENTREE_DB_TCP_KEEPALIVES_IDLE | database.tcp_keepalives_idle | Idle TCP keepalive | 1 | -| INVENTREE_DB_TCP_KEEPALIVES_INTERVAL | database.tcp_keepalives_interval | TCP keepalive interval | 1| -| INVENTREE_DB_TCP_KEEPALIVES_COUNT | database.tcp_keepalives_count | TCP keepalive count | 5 | -| INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | +{{ configtable() }} +{{ configsetting("INVENTREE_DB_TIMEOUT", default="2") }} Database connection timeout (s) | +| `INVENTREE_DB_TCP_KEEPALIVES` | database.tcp_keepalives | 1 | TCP keepalive | +| `INVENTREE_DB_TCP_KEEPALIVES_IDLE` | database.tcp_keepalives_idle | 1 | Idle TCP keepalive | +| `INVENTREE_DB_TCP_KEEPALIVES_INTERVAL` | database.tcp_keepalives_interval | 1| TCP keepalive interval | +| `INVENTREE_DB_TCP_KEEPALIVES_COUNT` | database.tcp_keepalives_count | 5 | TCP keepalive count | +| `INVENTREE_DB_ISOLATION_SERIALIZABLE` | database.serializable | False | Database isolation level configured to "serializable" | ### MySQL Settings If running with a MySQL database backend, the following additional options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | +{{ configtable() }} +| `INVENTREE_DB_ISOLATION_SERIALIZABLE` | database.serializable | False | Database isolation level configured to "serializable" | ### SQLite Settings @@ -293,10 +287,9 @@ If running with a MySQL database backend, the following additional options are a If running with a SQLite database backend, the following additional options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 10 | -| INVENTREE_DB_WAL_MODE | database.wal_mode | Enable Write-Ahead Logging (WAL) mode for SQLite databases | True | +{{ configtable() }} +{{ configsetting("INVENTREE_DB_TIMEOUT", default="10") }} Database connection timeout (s) | +| `INVENTREE_DB_WAL_MODE` | database.wal_mode | True | Enable Write-Ahead Logging (WAL) mode for SQLite databases | ## Caching @@ -314,21 +307,21 @@ Enabling global caching requires connection to a redis server (which is separate The following cache settings are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_CACHE_ENABLED | cache.enabled | Enable redis caching | False | -| INVENTREE_CACHE_HOST | cache.host | Cache server host | *Not specified* | -| INVENTREE_CACHE_PORT | cache.port | Cache server port | 6379 | -| INVENTREE_CACHE_PASSWORD | cache.password | Cache server password | none | -| INVENTREE_CACHE_USER | cache.user | Cache server username | none | -| INVENTREE_CACHE_DB | cache.db | Cache server database index | 0 | -| INVENTREE_CACHE_CONNECT_TIMEOUT | cache.connect_timeout | Cache connection timeout (seconds) | 3 | -| INVENTREE_CACHE_TIMEOUT | cache.timeout | Cache timeout (seconds) | 3 | -| INVENTREE_CACHE_TCP_KEEPALIVE | cache.tcp_keepalive | Cache TCP keepalive | True | -| INVENTREE_CACHE_KEEPALIVE_COUNT | cache.keepalive_count | Cache keepalive count | 5 | -| INVENTREE_CACHE_KEEPALIVE_IDLE | cache.keepalive_idle | Cache keepalive idle | 1 | -| INVENTREE_CACHE_KEEPALIVE_INTERVAL | cache.keepalive_interval | Cache keepalive interval | 1 | -| INVENTREE_CACHE_USER_TIMEOUT | cache.user_timeout | Cache user timeout | 1000 | +{{ configtable() }} +{{ configsetting("INVENTREE_CACHE_ENABLED") }} Enable redis caching | +{{ configsetting("INVENTREE_CACHE_HOST") }} Cache server host | +{{ configsetting("INVENTREE_CACHE_PORT") }} Cache server port | +{{ configsetting("INVENTREE_CACHE_PASSWORD") }} Cache server password | +{{ configsetting("INVENTREE_CACHE_USER") }} Cache server username | +{{ configsetting("INVENTREE_CACHE_DB") }} Cache server database index | +{{ configsetting("INVENTREE_CACHE_CONNECT_TIMEOUT") }} Cache connection timeout (seconds) | +{{ configsetting("INVENTREE_CACHE_TIMEOUT") }} Cache timeout (seconds) | +{{ configsetting("INVENTREE_CACHE_TCP_KEEPALIVE") }} Cache TCP keepalive | +{{ configsetting("INVENTREE_CACHE_KEEPALIVE_COUNT") }} Cache keepalive count | +{{ configsetting("INVENTREE_CACHE_KEEPALIVE_IDLE") }} Cache keepalive idle | +{{ configsetting("INVENTREE_CACHE_KEEPALIVE_INTERVAL") }} Cache keepalive interval | +{{ configsetting("INVENTREE_CACHE_USER_TIMEOUT") }} Cache user timeout | + !!! tip "Cache Password" The value specified for `INVENTREE_CACHE_PASSWORD` should not contain comma `,` or colon `:` characters, otherwise the connection to the cache server may fail. @@ -339,17 +332,16 @@ To enable [email functionality](../settings/email.md), email settings must be co The following email settings are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_EMAIL_BACKEND | email.backend | Email backend module | django.core.mail.backends.smtp.EmailBackend | -| INVENTREE_EMAIL_HOST | email.host | Email server host | *Not specified* | -| INVENTREE_EMAIL_PORT | email.port | Email server port | 25 | -| INVENTREE_EMAIL_USERNAME | email.username | Email account username | *Not specified* | -| INVENTREE_EMAIL_PASSWORD | email.password | Email account password | *Not specified* | -| INVENTREE_EMAIL_TLS | email.tls | Enable STARTTLS support (commonly port 567) | False | -| INVENTREE_EMAIL_SSL | email.ssl | Enable legacy SSL/TLS support (commonly port 465) | False | -| INVENTREE_EMAIL_SENDER | email.sender | Sending email address | *Not specified* | -| INVENTREE_EMAIL_PREFIX | email.prefix | Prefix for subject text | [InvenTree] | +{{ configtable() }} +{{ configsetting("INVENTREE_EMAIL_BACKEND") }} Email backend module | +{{ configsetting("INVENTREE_EMAIL_HOST") }} Email server host | +{{ configsetting("INVENTREE_EMAIL_PORT") }} Email server port | +{{ configsetting("INVENTREE_EMAIL_USERNAME") }} Email account username | +{{ configsetting("INVENTREE_EMAIL_PASSWORD") }} Email account password | +{{ configsetting("INVENTREE_EMAIL_TLS") }} Enable STARTTLS support (commonly port 567) | +{{ configsetting("INVENTREE_EMAIL_SSL") }} Enable legacy SSL/TLS support (commonly port 465) | +{{ configsetting("INVENTREE_EMAIL_SENDER") }} Sending email address | +{{ configsetting("INVENTREE_EMAIL_PREFIX") }} Prefix for subject text | ### Email Backend @@ -366,11 +358,10 @@ The "sender" email address is the address from which InvenTree emails are sent ( InvenTree requires some external directories for storing files: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| 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* | +{{ configtable() }} +{{ configsetting("INVENTREE_STATIC_ROOT") }} [Static files](./processes.md#static-files) directory | +{{ configsetting("INVENTREE_MEDIA_ROOT") }} [Media files](./processes.md#media-files) directory | +{{ configsetting("INVENTREE_BACKUP_DIR") }} Directory for backup files | !!! tip "Serving Files" Read the [proxy server documentation](./processes.md#proxy-server) for more information on hosting *static* and *media* files @@ -404,43 +395,41 @@ Alternatively this location can be specified with the `INVENTREE_BACKUP_DIR` env It is also possible to use alternative storage backends for static and media files, at the moment there is direct provide direct support bundled for S3 and SFTP. Google cloud storage and Azure blob storage would also be supported by the [used library](https://django-storages.readthedocs.io), but require additional packages to be installed. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_STORAGE_TARGET | storage.target | Storage target to use for static and media files, valid options: local, s3, sftp | local | +{{ configtable() }} +{{ configsetting("INVENTREE_STORAGE_TARGET") }} Storage target to use for static and media files, valid options: local, s3, sftp | + #### S3 -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_S3_ACCESS_KEY | storage.s3.access_key | Access key | *Not specified* | -| INVENTREE_S3_SECRET_KEY | storage.s3.secret_key | Secret key | *Not specified* | -| INVENTREE_S3_BUCKET_NAME | storage.s3.bucket_name | Bucket name, required by most providers | *Not specified* | -| INVENTREE_S3_REGION_NAME | storage.s3.region_name | S3 region name | *Not specified* | -| INVENTREE_S3_ENDPOINT_URL | storage.s3.endpoint_url | Custom S3 endpoint URL, defaults to AWS endpoints if not set | *Not specified* | -| INVENTREE_S3_LOCATION | storage.s3.location | Sub-Location that should be used | inventree-server | -| INVENTREE_S3_DEFAULT_ACL | storage.s3.default_acl | Default ACL for uploaded files, defaults to provider default if not set | *Not specified* | -| INVENTREE_S3_VERIFY_SSL | storage.s3.verify_ssl | Verify SSL certificate for S3 endpoint | True | -| INVENTREE_S3_OVERWRITE | storage.s3.overwrite | Overwrite existing files in S3 bucket | False | -| INVENTREE_S3_VIRTUAL | storage.s3.virtual | Use virtual addressing style - by default False -> `path` style, `virtual` style if True | False | +{{ configtable() }} +| `INVENTREE_S3_ACCESS_KEY` | storage.s3.access_key | *Not specified* | Access key | +| `INVENTREE_S3_SECRET_KEY` | storage.s3.secret_key | *Not specified* | Secret key | +| `INVENTREE_S3_BUCKET_NAME` | storage.s3.bucket_name | *Not specified* | Bucket name, required by most providers | +| `INVENTREE_S3_REGION_NAME` | storage.s3.region_name | *Not specified* | S3 region name | +| `INVENTREE_S3_ENDPOINT_URL` | storage.s3.endpoint_url | *Not specified* | Custom S3 endpoint URL, defaults to AWS endpoints if not set | +| `INVENTREE_S3_LOCATION` | storage.s3.location | inventree-server | Sub-Location that should be used | +| `INVENTREE_S3_DEFAULT_ACL` | storage.s3.default_acl | *Not specified* | Default ACL for uploaded files, defaults to provider default if not set | +| `INVENTREE_S3_VERIFY_SSL` | storage.s3.verify_ssl | True | Verify SSL certificate for S3 endpoint | +| `INVENTREE_S3_OVERWRITE` | storage.s3.overwrite | False | Overwrite existing files in S3 bucket | +| `INVENTREE_S3_VIRTUAL` | storage.s3.virtual | False | Use virtual addressing style - by default False -> `path` style, `virtual` style if True | #### SFTP -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SFTP_HOST | storage.sftp.host | SFTP host | *Not specified* | -| INVENTREE_SFTP_PARAMS | storage.sftp.params | SFTP connection parameters, see https://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient.connect; e.g. `{'port': 22, 'user': 'usr', 'password': 'pwd'}` | *Not specified* | -| INVENTREE_SFTP_UID | storage.sftp.uid | SFTP user ID - not required | *Not specified* | -| INVENTREE_SFTP_GID | storage.sftp.gid | SFTP group ID - not required | *Not specified* | -| INVENTREE_SFTP_LOCATION | storage.sftp.location | Sub-Location that should be used | inventree-server | +{{ configtable() }} +| `INVENTREE_SFTP_HOST` | storage.sftp.host | *Not specified* | SFTP host | +| `INVENTREE_SFTP_PARAMS` | storage.sftp.params | *Not specified* | SFTP connection parameters, see https://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient.connect; e.g. `{'port': 22, 'user': 'usr', 'password': 'pwd'}` | +| `INVENTREE_SFTP_UID` | storage.sftp.uid | *Not specified* | SFTP user ID - not required | +| `INVENTREE_SFTP_GID` | storage.sftp.gid | *Not specified* | SFTP group ID - not required | +| `INVENTREE_SFTP_LOCATION` | storage.sftp.location | inventree-server | Sub-Location that should be used | ## Authentication InvenTree provides allowance for additional sign-in options. The following options are not enabled by default, and care must be taken by the system administrator when configuring these settings. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_MFA_ENABLED | mfa_enabled | Enable or disable multi-factor authentication support for the InvenTree server | True | -| INVENTREE_MFA_SUPPORTED_TYPES | mfa_supported_types | List of supported multi-factor authentication types | recovery_codes,totp,webauthn | +{{ configtable() }} +{{ configsetting("INVENTREE_MFA_ENABLED") }} Enable multi-factor authentication support for the InvenTree server | +{{ configsetting("INVENTREE_MFA_SUPPORTED_TYPES") }} List of supported multi-factor authentication types | +{{ configsetting("INVENTREE_USE_JWT") }} Enable support for JSON Web Tokens (JWT) for authentication | ### Single Sign On @@ -455,11 +444,10 @@ There are multiple configuration parameters which must be specified (either in y The login-experience can be altered with the following settings: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_LOGIN_CONFIRM_DAYS | login_confirm_days | Duration for which confirmation links are valid | 3 | -| INVENTREE_LOGIN_ATTEMPTS | login_attempts | Count of allowed login attempts before blocking user | 5 | -| INVENTREE_LOGIN_DEFAULT_HTTP_PROTOCOL | login_default_protocol | Default protocol to use for login callbacks (e.g. using [SSO](#single-sign-on)) | Uses the protocol specified in `INVENTREE_SITE_URL`, or defaults to *http* | +{{ configtable() }} +{{ configsetting("INVENTREE_LOGIN_CONFIRM_DAYS") }} Duration for which confirmation links are valid | +{{ configsetting("INVENTREE_LOGIN_ATTEMPTS") }} Count of allowed login attempts before blocking user | +{{ configsetting("INVENTREE_LOGIN_DEFAULT_HTTP_PROTOCOL", default="Uses the protocol specified in `INVENTREE_SITE_URL`, or defaults to *http*") }} Default protocol to use for login callbacks (e.g. using [SSO](#single-sign-on)) | !!! tip "Default Protocol" If you have specified `INVENTREE_SITE_URL`, the default protocol will be used from that setting. Otherwise, the default protocol will be *http*. @@ -472,22 +460,20 @@ Custom authentication backends can be used by specifying them here. These can fo The following options are available for configuring the InvenTree [background worker process](./processes.md#background-worker): -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_BACKGROUND_WORKERS | background.workers | Number of background worker processes | 1 | -| INVENTREE_BACKGROUND_TIMEOUT | background.timeout | Timeout for background worker tasks (seconds) | 90 | -| INVENTREE_BACKGROUND_RETRY | background.retry | Time to wait before retrying a background task (seconds) | 300 | -| INVENTREE_BACKGROUND_MAX_ATTEMPTS | background.max_attempts | Maximum number of attempts for a background task | 5 | +{{ configtable() }} +{{ configsetting("INVENTREE_BACKGROUND_WORKERS") }} Number of background worker processes | +{{ configsetting("INVENTREE_BACKGROUND_TIMEOUT") }} Timeout for background worker tasks (seconds) | +{{ configsetting("INVENTREE_BACKGROUND_RETRY") }} Time to wait before retrying a background task (seconds) | +{{ configsetting("INVENTREE_BACKGROUND_MAX_ATTEMPTS") }} Maximum number of attempts for a background task | ## Sentry Integration The InvenTree server can be integrated with the [sentry.io](https://sentry.io) monitoring service, for error logging and performance tracking. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SENTRY_ENABLED | sentry_enabled | Enable sentry.io integration | False | -| INVENTREE_SENTRY_DSN | sentry_dsn | Sentry DSN (data source name) key | *Defaults to InvenTree developer key* | -| INVENTREE_SENTRY_SAMPLE_RATE | sentry_sample_rate | How often to send data samples | 0.1 | +{{ configtable() }} +{{ configsetting("INVENTREE_SENTRY_ENABLED") }} Enable sentry.io integration | +{{ configsetting("INVENTREE_SENTRY_DSN", default="Defaults to InvenTree developer key") }} Sentry DSN (data source name) key | +{{ configsetting("INVENTREE_SENTRY_SAMPLE_RATE") }} How often to send data samples (seconds) | !!! info "Default DSN" If enabled with the default DSN, server errors will be logged to a sentry.io account monitored by the InvenTree developers. @@ -496,13 +482,11 @@ The InvenTree server can be integrated with the [sentry.io](https://sentry.io) m The logo and custom messages can be changed/set: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_CUSTOM_LOGO | customize.logo | Path to custom logo in the static files directory | *Not specified* | -| INVENTREE_CUSTOM_SPLASH | customize.splash | Path to custom splash screen in the static files directory | *Not specified* | -| INVENTREE_CUSTOMIZE | customize.site_header | Custom site header in the Django admin | InvenTree Admin | -| INVENTREE_CUSTOMIZE | customize.login_message | Custom message for login page | *Not specified* | -| INVENTREE_CUSTOMIZE | customize.navbar_message | Custom message for navbar | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_CUSTOM_LOGO") }} Path to custom logo in the static files directory | +{{ configsetting("INVENTREE_CUSTOM_SPLASH") }} Path to custom splash screen in the static files directory | +{{ configsetting("INVENTREE_SITE_HEADER") }} Custom header text for the django admin page | +{{ configsetting("INVENTREE_CUSTOMIZE") }} JSON object containing custom messages for the login page, navbar, and Django admin site | The INVENTREE_CUSTOMIZE environment variable must contain a json object with the keys from the table above and the wanted values. Example: @@ -547,15 +531,15 @@ INVENTREE_FRONTEND_SETTINGS='{"mobile_mode": "allow-ignore"}' The following [plugin](../plugins/index.md) configuration options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_PLUGINS_ENABLED | plugins_enabled | Enable plugin support | False | -| INVENTREE_PLUGIN_NOINSTALL | plugin_noinstall | Disable Plugin installation via API - only use plugins.txt file | False | -| INVENTREE_PLUGIN_FILE | plugins_plugin_file | Location of plugin installation file | *Not specified* | -| INVENTREE_PLUGIN_DIR | plugins_plugin_dir | Location of external plugin directory | *Not specified* | -| INVENTREE_PLUGINS_MANDATORY | plugins_mandatory | List of [plugins which are considered mandatory](../plugins/index.md#mandatory-third-party-plugins) | *Not specified* | -| INVENTREE_PLUGIN_DEV_SLUG | plugin_dev.slug | Specify plugin to run in [development mode](../plugins/creator.md#backend-configuration) | *Not specified* | -| INVENTREE_PLUGIN_DEV_HOST | plugin_dev.host | Specify host for development mode plugin | http://localhost:5174 | +{{ configtable() }} +{{ configsetting("INVENTREE_PLUGINS_ENABLED") }} Enable plugin support | +{{ configsetting("INVENTREE_PLUGIN_NOINSTALL") }} Disable Plugin installation via API | +{{ configsetting("INVENTREE_PLUGIN_FILE") }} Location of plugin installation file | +| `INVENTREE_PLUGIN_DIR` | `plugin_dir` | *Not specified* | Location of external plugin directory | +{{ configsetting("INVENTREE_PLUGIN_RETRY") }} Number of tries to attempt loading a plugin before giving up | +{{ configsetting("INVENTREE_PLUGINS_MANDATORY") }} List of [plugins which are considered mandatory](../plugins/index.md#mandatory-third-party-plugins) | +{{ configsetting("INVENTREE_PLUGIN_DEV_SLUG") }} Specify plugin to run in [development mode](../plugins/creator.md#backend-configuration) | +{{ configsetting("INVENTREE_PLUGIN_DEV_HOST") }} Specify host for development mode plugin | ## Override Global Settings @@ -563,6 +547,12 @@ If required, [global settings values](../settings/global.md#override-global-sett To override global settings, provide a "dictionary" of settings overrides in the configuration file, or via an environment variable. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_GLOBAL_SETTINGS | global_settings | JSON object containing global settings overrides | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_GLOBAL_SETTINGS") }} JSON object containing global settings overrides | + +## Other Settings + +Other available settings, not categorized above, are detailed in the table below: + +{{ configtable() }} +{{ configsetting("INVENTREE_EXTRA_URL_SCHEMES") }} Allow additional URL schemes for URL validation | diff --git a/docs/docs/start/docker_install.md b/docs/docs/start/docker_install.md index 125d2e924f..44f60ffba1 100644 --- a/docs/docs/start/docker_install.md +++ b/docs/docs/start/docker_install.md @@ -87,13 +87,7 @@ If you are creating the initial database, you need to create an admin (superuser docker compose run inventree-server invoke superuser ``` -Alternatively, admin account details can be specified in the `.env` file, removing the need for this manual step: - -| Variable | Description | -| --- | --- | -| INVENTREE_ADMIN_USER | Admin account username | -| INVENTREE_ADMIN_PASSWORD | Admin account password | -| INVENTREE_ADMIN_EMAIL | Admin account email address | +Alternatively, admin account details can be specified using environment variables, or in the `.env` file, removing the need for this manual step. Refer to the [configuration documentation](./config.md#administrator-account) for more information. !!! warning "Scrub Account Data" Ensure that the admin account credentials are removed from the `.env` file after the first run, for security. @@ -242,8 +236,8 @@ This can be adjusted using the following environment variables: | Environment Variable | Default | | --- | --- | -| INVENTREE_WEB_ADDR | 0.0.0.0 | -| INVENTREE_WEB_PORT | 8000 | +| `INVENTREE_WEB_ADDR` | 0.0.0.0 | +| `INVENTREE_WEB_PORT` | 8000 | These variables are combined in the [Dockerfile]({{ sourcefile("contrib/container/Dockerfile") }}) to build the bind string passed to the InvenTree server on startup. diff --git a/docs/main.py b/docs/main.py index c3d8cba512..148e61be65 100644 --- a/docs/main.py +++ b/docs/main.py @@ -34,6 +34,7 @@ for key in [ print(f' - {key}: {val}') # Cached settings dict values +global CONFIG_SETTINGS global GLOBAL_SETTINGS global USER_SETTINGS global TAGS @@ -64,6 +65,7 @@ with open(settings_file, encoding='utf-8') as sf: GLOBAL_SETTINGS = settings['global'] USER_SETTINGS = settings['user'] + CONFIG_SETTINGS = settings['config'] # Tags with open(gen_base.joinpath('inventree_tags.yml'), encoding='utf-8') as f: @@ -377,6 +379,34 @@ def define_env(env): return rendersetting(key, setting, short=short) + @env.macro + def configtable(): + """Generate a header for the configuration settings table.""" + return '| Environment Variable | Configuration File | Default | Description |\n| --- | --- | --- | --- |' + + @env.macro + def configsetting(key: str, default: Optional[str] = None): + """Extract information on a particular configuration setting. + + Arguments: + key: The name of the configuration setting to extract information for. + default: An optional default value to override the setting's default display value. + """ + global CONFIG_SETTINGS + setting = CONFIG_SETTINGS[key] + + observe_setting(key, 'config') + + cfg_key = setting.get('config_key', None) + cfg_key = f'`{cfg_key}`' if cfg_key else '-' + + default = default or setting.get('default_value', None) + + if default is None: + default = '*Not Specified*' + + return f'| {key} | {cfg_key} | {default} |' + @env.macro def tags_and_filters(): """Return a list of all tags and filters.""" diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index dfc73236b7..87edf69474 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -297,7 +297,7 @@ class InfoView(APIView): 'instance': InvenTree.version.inventreeInstanceName(), 'apiVersion': InvenTree.version.inventreeApiVersion(), 'worker_running': is_worker_running(), - 'worker_count': settings.BACKGROUND_WORKER_COUNT, + 'worker_count': settings.Q_CLUSTER['workers'], 'worker_pending_tasks': self.worker_pending_tasks(), 'plugins_enabled': settings.PLUGINS_ENABLED, 'plugins_install_disabled': settings.PLUGINS_INSTALL_DISABLED, diff --git a/src/backend/InvenTree/InvenTree/cache.py b/src/backend/InvenTree/InvenTree/cache.py index 772d1deb03..07547eb667 100644 --- a/src/backend/InvenTree/InvenTree/cache.py +++ b/src/backend/InvenTree/InvenTree/cache.py @@ -94,51 +94,51 @@ def get_cache_config(global_cache: bool) -> dict: Returns: A dictionary containing the cache configuration options. """ - if global_cache: - # Build Redis URL with optional password - password = cache_password() - user = cache_user() or '' + # Build Redis URL with optional password + password = cache_password() + user = cache_user() or '' + host = cache_host() + port = cache_port() + db = cache_db() - if password: - redis_url = ( - f'redis://{user}:{password}@{cache_host()}:{cache_port()}/{cache_db()}' - ) - else: - redis_url = f'redis://{cache_host()}:{cache_port()}/{cache_db()}' + if password: + redis_url = f'redis://{user}:{password}@{host}:{port}/{db}' + else: + redis_url = f'redis://{host}:{port}/{db}' - keepalive_options = { - 'TCP_KEEPCNT': cache_setting('keepalive_count', 5, typecast=int), - 'TCP_KEEPIDLE': cache_setting('keepalive_idle', 1, typecast=int), - 'TCP_KEEPINTVL': cache_setting('keepalive_interval', 1, typecast=int), - 'TCP_USER_TIMEOUT': cache_setting('user_timeout', 1000, typecast=int), - } + keepalive_options = { + 'TCP_KEEPCNT': cache_setting('keepalive_count', 5, typecast=int), + 'TCP_KEEPIDLE': cache_setting('keepalive_idle', 1, typecast=int), + 'TCP_KEEPINTVL': cache_setting('keepalive_interval', 1, typecast=int), + 'TCP_USER_TIMEOUT': cache_setting('user_timeout', 1000, typecast=int), + } - return { - 'BACKEND': 'django_redis.cache.RedisCache', - 'LOCATION': redis_url, - 'OPTIONS': { - 'CLIENT_CLASS': 'django_redis.client.DefaultClient', - 'SOCKET_CONNECT_TIMEOUT': cache_setting( - 'connect_timeout', 5, typecast=int - ), - 'SOCKET_TIMEOUT': cache_setting('timeout', 3, typecast=int), - 'CONNECTION_POOL_KWARGS': { - 'socket_keepalive': cache_setting( - 'tcp_keepalive', True, typecast=bool - ), - 'socket_keepalive_options': { - # Only include options which are available on this platform - # e.g. MacOS does not have TCP_KEEPIDLE and TCP_USER_TIMEOUT - getattr(socket, key): value - for key, value in keepalive_options.items() - if hasattr(socket, key) - }, + global_cache_config = { + 'BACKEND': 'django_redis.cache.RedisCache', + 'LOCATION': redis_url, + 'OPTIONS': { + 'CLIENT_CLASS': 'django_redis.client.DefaultClient', + 'SOCKET_CONNECT_TIMEOUT': cache_setting('connect_timeout', 5, typecast=int), + 'SOCKET_TIMEOUT': cache_setting('timeout', 3, typecast=int), + 'CONNECTION_POOL_KWARGS': { + 'socket_keepalive': cache_setting('tcp_keepalive', True, typecast=bool), + 'socket_keepalive_options': { + # Only include options which are available on this platform + # e.g. MacOS does not have TCP_KEEPIDLE and TCP_USER_TIMEOUT + getattr(socket, key): value + for key, value in keepalive_options.items() + if hasattr(socket, key) }, }, - } + }, + } - # Default: Use django local memory cache - return {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'} + if global_cache: + # Only return the global cache configuration if the global cache is enabled + return global_cache_config + else: + # Default: Use django local memory cache + return {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'} def create_session_cache(request) -> None: diff --git a/src/backend/InvenTree/InvenTree/config.py b/src/backend/InvenTree/InvenTree/config.py index d71d80e567..a4947de545 100644 --- a/src/backend/InvenTree/InvenTree/config.py +++ b/src/backend/InvenTree/InvenTree/config.py @@ -270,10 +270,13 @@ def get_setting(env_var=None, config_key=None, default_value=None, typecast=None def set_metadata(source: str): """Set lookup metadata for the setting.""" + global CONFIG_LOOKUPS + key = env_var or config_key CONFIG_LOOKUPS[key] = { 'env_var': env_var, 'config_key': config_key, + 'default_value': default_value, 'source': source, 'accessed': datetime.datetime.now(), } @@ -544,13 +547,14 @@ def get_frontend_settings(debug=True): 'INVENTREE_FRONTEND_SETTINGS', 'frontend_settings', {}, typecast=dict ) + base_url = get_setting( + 'INVENTREE_FRONTEND_URL_BASE', 'frontend_url_base', 'web', typecast=str + ) + # Set the base URL for the user interface # This is the UI path e.g. '/web/' if 'base_url' not in frontend_settings: - frontend_settings['base_url'] = ( - get_setting('INVENTREE_FRONTEND_URL_BASE', 'frontend_url_base', 'web') - or 'web' - ) + frontend_settings['base_url'] = base_url # If provided, specify the API host api_host = frontend_settings.get('api_host', None) or get_setting( diff --git a/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py b/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py index fef25f676a..09199f06db 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py +++ b/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py @@ -24,8 +24,9 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): """Export settings information to a JSON file.""" from common.models import InvenTreeSetting, InvenTreeUserSetting + from InvenTree.config import CONFIG_LOOKUPS - settings = {'global': {}, 'user': {}} + settings = {'global': {}, 'user': {}, 'config': {}} # Global settings for key, setting in InvenTreeSetting.SETTINGS.items(): @@ -45,6 +46,18 @@ class Command(BaseCommand): 'units': str(setting.get('units', '')), } + # Configuration settings + for key, config in CONFIG_LOOKUPS.items(): + default_value = config.get('default_value', None) + if default_value is not None: + default_value = str(default_value) + + settings['config'][key] = { + 'env_var': str(config.get('env_var', '')), + 'config_key': str(config.get('config_key', '')), + 'default_value': default_value, + } + filename = kwargs.get('filename', 'inventree_settings.json') with open(filename, 'w', encoding='utf-8') as f: diff --git a/src/backend/InvenTree/InvenTree/setting/db_backend.py b/src/backend/InvenTree/InvenTree/setting/db_backend.py index e90f01c8f9..f053d4d7bd 100644 --- a/src/backend/InvenTree/InvenTree/setting/db_backend.py +++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py @@ -1,5 +1,7 @@ """Configuration settings specific to a particular database backend.""" +from pathlib import Path + import structlog from InvenTree.config import get_boolean_setting, get_setting @@ -7,6 +9,62 @@ from InvenTree.config import get_boolean_setting, get_setting logger = structlog.get_logger('inventree') +def get_db_backend(): + """Return the database backend configuration.""" + db_config = { + 'ENGINE': get_setting('INVENTREE_DB_ENGINE', 'database.engine', None), + 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', None), + 'USER': get_setting('INVENTREE_DB_USER', 'database.user', None), + 'PASSWORD': get_setting('INVENTREE_DB_PASSWORD', 'database.password', None), + 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', None), + 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', 5432, typecast=int), + 'OPTIONS': get_setting( + 'INVENTREE_DB_OPTIONS', 'database.options', {}, typecast=dict + ) + or {}, + } + + # Check for required keys + required_keys = ['ENGINE', 'NAME'] + + for key in required_keys: + if not db_config[key]: + raise ValueError( + f'Missing required database configuration key: INVENTREE_DB_{key}' + ) + + DB_ENGINE = db_config['ENGINE'].lower() + + # Correct common misspelling + if DB_ENGINE == 'sqlite': + DB_ENGINE = 'sqlite3' # pragma: no cover + + if DB_ENGINE in ['sqlite3', 'postgresql', 'mysql']: + # Prepend the required python module string + DB_ENGINE = f'django.db.backends.{DB_ENGINE}' + db_config['ENGINE'] = DB_ENGINE + + if 'sqlite' in DB_ENGINE: + db_name = str(Path(db_config['NAME']).resolve()) + db_config['NAME'] = db_name + + logger.info('DB_ENGINE: %s', DB_ENGINE) + logger.info('DB_NAME: %s', db_config['NAME']) + logger.info('DB_HOST: %s', db_config.get('HOST', "''")) + + # Set testing options for the database + db_config['TEST'] = {'CHARSET': 'utf8'} + + # Set collation option for mysql test database + if 'mysql' in DB_ENGINE: + db_config['TEST']['COLLATION'] = 'utf8_general_ci' # pragma: no cover + + # Specify database specific configuration + set_db_options(DB_ENGINE, db_config['OPTIONS']) + + return db_config + + def set_db_options(engine: str, db_options: dict): """Update database options based on the specified database backend. diff --git a/src/backend/InvenTree/InvenTree/setting/ldap.py b/src/backend/InvenTree/InvenTree/setting/ldap.py new file mode 100644 index 0000000000..6e6f57989f --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/ldap.py @@ -0,0 +1,139 @@ +"""Configuration of LDAP support for InvenTree.""" + +from InvenTree.config import get_boolean_setting, get_setting + + +def get_ldap_config(debug: bool = False) -> dict: + """Return a dictionary of LDAP configuration settings. + + The returned settings will be updated into the globals() object, + and will be used to configure the LDAP authentication backend. + """ + import django_auth_ldap.config # type: ignore[unresolved-import] + import ldap # type: ignore[unresolved-import] + + # get global options from dict and use ldap.OPT_* as keys and values + global_options_dict = get_setting( + 'INVENTREE_LDAP_GLOBAL_OPTIONS', + 'ldap.global_options', + default_value=None, + typecast=dict, + ) + + global_options = {} + + for k, v in global_options_dict.items(): + # keys are always ldap.OPT_* constants + k_attr = getattr(ldap, k, None) + if not k.startswith('OPT_') or k_attr is None: + print(f"[LDAP] ldap.global_options, key '{k}' not found, skipping...") + continue + + # values can also be other strings, e.g. paths + v_attr = v + if v.startswith('OPT_'): + v_attr = getattr(ldap, v, None) + + if v_attr is None: + print(f"[LDAP] ldap.global_options, value key '{v}' not found, skipping...") + continue + + global_options[k_attr] = v_attr + + if debug: + print('[LDAP] ldap.global_options =', global_options) + + group_type_class = get_setting( + 'INVENTREE_LDAP_GROUP_TYPE_CLASS', + 'ldap.group_type_class', + 'GroupOfUniqueNamesType', + str, + ) + + group_type_class_args = get_setting( + 'INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS', 'ldap.group_type_class_args', [], list + ) + + group_type_class_kwargs = get_setting( + 'INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS', + 'ldap.group_type_class_kwargs', + {'name_attr': 'cn'}, + dict, + ) + + group_object_class = get_setting( + 'INVENTREE_LDAP_GROUP_OBJECT_CLASS', + 'ldap.group_object_class', + 'groupOfUniqueNames', + str, + ) + + ldap_config = { + 'AUTH_LDAP_GLOBAL_OPTIONS': global_options, + 'AUTH_LDAP_SERVER_URI': get_setting( + 'INVENTREE_LDAP_SERVER_URI', 'ldap.server_uri' + ), + 'AUTH_LDAP_START_TLS': get_boolean_setting( + 'INVENTREE_LDAP_START_TLS', 'ldap.start_tls', False + ), + 'AUTH_LDAP_BIND_DN': get_setting('INVENTREE_LDAP_BIND_DN', 'ldap.bind_dn'), + 'AUTH_LDAP_BIND_PASSWORD': get_setting( + 'INVENTREE_LDAP_BIND_PASSWORD', 'ldap.bind_password' + ), + 'AUTH_LDAP_USER_SEARCH': django_auth_ldap.config.LDAPSearch( + get_setting('INVENTREE_LDAP_SEARCH_BASE_DN', 'ldap.search_base_dn'), + ldap.SCOPE_SUBTREE, + str( + get_setting( + 'INVENTREE_LDAP_SEARCH_FILTER_STR', + 'ldap.search_filter_str', + '(uid= %(user)s)', + ) + ), + ), + 'AUTH_LDAP_USER_DN_TEMPLATE': get_setting( + 'INVENTREE_LDAP_USER_DN_TEMPLATE', 'ldap.user_dn_template' + ), + 'AUTH_LDAP_USER_ATTR_MAP': get_setting( + 'INVENTREE_LDAP_USER_ATTR_MAP', + 'ldap.user_attr_map', + {'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'}, + dict, + ), + 'AUTH_LDAP_ALWAYS_UPDATE_USER': get_boolean_setting( + 'INVENTREE_LDAP_ALWAYS_UPDATE_USER', 'ldap.always_update_user', True + ), + 'AUTH_LDAP_CACHE_TIMEOUT': get_setting( + 'INVENTREE_LDAP_CACHE_TIMEOUT', 'ldap.cache_timeout', 3600, int + ), + 'AUTH_LDAP_MIRROR_GROUPS': get_boolean_setting( + 'INVENTREE_LDAP_MIRROR_GROUPS', 'ldap.mirror_groups', False + ), + 'AUTH_LDAP_GROUP_OBJECT_CLASS': group_object_class, + 'AUTH_LDAP_GROUP_SEARCH': django_auth_ldap.config.LDAPSearch( + get_setting('INVENTREE_LDAP_GROUP_SEARCH', 'ldap.group_search'), + ldap.SCOPE_SUBTREE, + f'(objectClass={group_object_class})', + ), + 'AUTH_LDAP_GROUP_TYPE_CLASS': group_type_class, + 'AUTH_LDAP_GROUP_TYPE_CLASS_ARGS': [*group_type_class_args], + 'AUTH_LDAP_GROUP_TYPE_CLASS_KWARGS': {**group_type_class_kwargs}, + 'AUTH_LDAP_GROUP_TYPE': getattr(django_auth_ldap.config, group_type_class)( + *group_type_class_args, **group_type_class_kwargs + ), + 'AUTH_LDAP_REQUIRE_GROUP': get_setting( + 'INVENTREE_LDAP_REQUIRE_GROUP', 'ldap.require_group' + ), + 'AUTH_LDAP_DENY_GROUP': get_setting( + 'INVENTREE_LDAP_DENY_GROUP', 'ldap.deny_group' + ), + 'AUTH_LDAP_USER_FLAGS_BY_GROUP': get_setting( + 'INVENTREE_LDAP_USER_FLAGS_BY_GROUP', + 'ldap.user_flags_by_group', + default_value=None, + typecast=dict, + ), + 'AUTH_LDAP_FIND_GROUP_PERMS': True, + } + + return ldap_config diff --git a/src/backend/InvenTree/InvenTree/setting/tracing.py b/src/backend/InvenTree/InvenTree/setting/tracing.py new file mode 100644 index 0000000000..59a667b71d --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/tracing.py @@ -0,0 +1,61 @@ +"""Start-up configuration options for InvenTree tracing integrations.""" + +import structlog + +from InvenTree.config import get_boolean_setting, get_setting +from InvenTree.tracing import setup_instruments, setup_tracing + +logger = structlog.get_logger('inventree') + + +def configure_tracing(db_engine: str, enabled: bool, tags: dict) -> dict: + """Configure tracing integrations for InvenTree. + + Arguments: + db_engine: The database engine being used + enabled: Whether tracing is enabled + tags: A dictionary of tags to be included in tracing spans, with keys prefixed by + """ + endpoint = get_setting('INVENTREE_TRACING_ENDPOINT', 'tracing.endpoint', None) + headers = ( + get_setting('INVENTREE_TRACING_HEADERS', 'tracing.headers', None, typecast=dict) + or {} + ) + + if enabled and endpoint: + logger.info('Tracing enabled with endpoint: %s', endpoint) + + TRACING_DETAILS = { + 'endpoint': endpoint, + 'headers': headers, + 'resources_input': { + **{'inventree.env.' + k: v for k, v in tags.items()}, + **get_setting( + 'INVENTREE_TRACING_RESOURCES', + 'tracing.resources', + default_value=None, + typecast=dict, + ), + }, + 'console': get_boolean_setting( + 'INVENTREE_TRACING_CONSOLE', 'tracing.console', False + ), + 'auth': get_setting( + 'INVENTREE_TRACING_AUTH', 'tracing.auth', default_value=None, typecast=dict + ), + 'is_http': get_setting('INVENTREE_TRACING_IS_HTTP', 'tracing.is_http', True), + 'append_http': get_boolean_setting( + 'INVENTREE_TRACING_APPEND_HTTP', 'tracing.append_http', True + ), + } + + if not enabled: + return None + + if endpoint: + setup_tracing(**TRACING_DETAILS) + setup_instruments(db_engine) + else: + logger.warning('OpenTelemetry tracing not enabled because endpoint is not set') + + return TRACING_DETAILS diff --git a/src/backend/InvenTree/InvenTree/setting/worker.py b/src/backend/InvenTree/InvenTree/setting/worker.py new file mode 100644 index 0000000000..bef1380bd2 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/worker.py @@ -0,0 +1,88 @@ +"""Configuration settings for the InvenTree background worker process.""" + +import sys + +from InvenTree.config import get_setting + + +def get_worker_config( + db_engine: str, + global_cache: bool = False, + sentry_dsn: str = '', + debug: bool = False, +) -> dict: + """Return a dictionary of configuration settings for the background worker. + + Arguments: + db_engine: The database engine being used (e.g. 'sqlite', 'postgresql', 'mysql') + global_cache: Whether a global redis cache is enabled + sentry_dsn: The DSN for sentry.io integration (if enabled) + debug: Whether the application is running in debug mode + + Ref: https://django-q2.readthedocs.io/en/master/configure.html + """ + BACKGROUND_WORKER_TIMEOUT = int( + get_setting('INVENTREE_BACKGROUND_TIMEOUT', 'background.timeout', 90) + ) + + # Set the retry time for background workers to be slightly longer than the worker timeout, to ensure that workers have time to timeout before being retried + BACKGROUND_WORKER_RETRY = max( + int(get_setting('INVENTREE_BACKGROUND_RETRY', 'background.retry', 300)), + BACKGROUND_WORKER_TIMEOUT + 120, + ) + + BACKGROUND_WORKER_ATTEMPTS = int( + get_setting('INVENTREE_BACKGROUND_MAX_ATTEMPTS', 'background.max_attempts', 5) + ) + + # 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 is disabled, we cannot run multiple background workers + if not global_cache: + BACKGROUND_WORKER_COUNT = 1 + + # If running with SQLite, limit background worker threads to 1 to prevent database locking issues + if 'sqlite' in db_engine: + BACKGROUND_WORKER_COUNT = 1 + + # Check if '--sync' was passed in the command line + if '--sync' in sys.argv and '--noreload' in sys.argv and debug: + SYNC_TASKS = True + else: + SYNC_TASKS = False + + # Clean up sys.argv so Django doesn't complain about an unknown argument + if SYNC_TASKS: + sys.argv.remove('--sync') + + # django-q background worker configuration + config = { + 'name': 'InvenTree', + 'label': 'Background Tasks', + 'workers': BACKGROUND_WORKER_COUNT, + 'timeout': BACKGROUND_WORKER_TIMEOUT, + 'retry': BACKGROUND_WORKER_RETRY, + 'max_attempts': BACKGROUND_WORKER_ATTEMPTS, + 'save_limit': 1000, + 'queue_limit': 50, + 'catch_up': False, + 'bulk': 10, + 'orm': 'default', + 'cache': 'default', + 'sync': SYNC_TASKS, + 'poll': 1.5, + } + + if global_cache: + # If using external redis cache, make the cache the broker for Django Q + config['django_redis'] = 'worker' + + if sentry_dsn: + # If sentry is enabled, configure django-q to report errors to sentry + config['error_reporter'] = {'sentry': {'dsn': sentry_dsn}} + + return config diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 444919d6b8..3aa32669be 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -12,7 +12,6 @@ database setup in this file. import logging import os import sys -from pathlib import Path from typing import Optional from zoneinfo import ZoneInfo, ZoneInfoNotFoundError @@ -33,7 +32,16 @@ from InvenTree.version import checkMinPythonVersion, inventreeCommitHash from users.oauth2_scopes import oauth2_scopes from . import config -from .setting import db_backend, locales, markdown, spectacular, storages +from .setting import ( + db_backend, + ldap, + locales, + markdown, + spectacular, + storages, + tracing, + worker, +) try: import django_stubs_ext @@ -81,6 +89,8 @@ DEBUG = get_boolean_setting('INVENTREE_DEBUG', 'debug', False) # Internal flag to determine if we are running in docker mode DOCKER = get_boolean_setting('INVENTREE_DOCKER', default_value=False) +AUTO_UPDATE = get_boolean_setting('INVENTREE_AUTO_UPDATE', 'auto_update', False) + # Configure logging settings LOG_LEVEL = get_setting('INVENTREE_LOG_LEVEL', 'log_level', 'WARNING') JSON_LOG = get_boolean_setting('INVENTREE_JSON_LOG', 'json_log', False) @@ -222,9 +232,7 @@ PLUGIN_TESTING_EVENTS_ASYNC = False # Flag if events are tested asynchronously PLUGIN_TESTING_RELOAD = False # Flag if plugin reloading is in testing (check_reload) # Plugin development settings -PLUGIN_DEV_SLUG = ( - get_setting('INVENTREE_PLUGIN_DEV_SLUG', 'plugin_dev.slug') if DEBUG else None -) +PLUGIN_DEV_SLUG = get_setting('INVENTREE_PLUGIN_DEV_SLUG', 'plugin_dev.slug') PLUGIN_DEV_HOST = get_setting( 'INVENTREE_PLUGIN_DEV_HOST', 'plugin_dev.host', 'http://localhost:5174' @@ -386,8 +394,11 @@ MIDDLEWARE = CONFIG.get( # In DEBUG mode, add support for django-silk # Ref: https://silk.readthedocs.io/en/latest/ -DJANGO_SILK_ENABLED = DEBUG and get_boolean_setting( # pragma: no cover - 'INVENTREE_DEBUG_SILK', 'debug_silk', False +DJANGO_SILK_ENABLED = ( + get_boolean_setting( # pragma: no cover + 'INVENTREE_DEBUG_SILK', 'debug_silk', False + ) + and DEBUG ) if DJANGO_SILK_ENABLED: # pragma: no cover @@ -401,8 +412,11 @@ if DJANGO_SILK_ENABLED: # pragma: no cover # In DEBUG mode, add support for django-querycount # Ref: https://github.com/bradmontgomery/django-querycount -if DEBUG and get_boolean_setting( # pragma: no cover - 'INVENTREE_DEBUG_QUERYCOUNT', 'debug_querycount', False +if ( + get_boolean_setting( # pragma: no cover + 'INVENTREE_DEBUG_QUERYCOUNT', 'debug_querycount', False + ) + and DEBUG ): MIDDLEWARE.append('querycount.middleware.QueryCountMiddleware') logger.debug('Running with debug_querycount middleware enabled') @@ -437,14 +451,14 @@ AUTHENTICATION_BACKENDS = ( # LDAP support LDAP_AUTH = get_boolean_setting('INVENTREE_LDAP_ENABLED', 'ldap.enabled', False) -if LDAP_AUTH: # pragma: no cover - import django_auth_ldap.config # type: ignore[unresolved-import] - import ldap # type: ignore[unresolved-import] +LDAP_DEBUG = ( + get_boolean_setting('INVENTREE_LDAP_DEBUG', 'ldap.debug', False) and LDAP_AUTH +) +if LDAP_AUTH: # pragma: no cover AUTHENTICATION_BACKENDS.append('django_auth_ldap.backend.LDAPBackend') # debug mode to troubleshoot configuration - LDAP_DEBUG = get_boolean_setting('INVENTREE_LDAP_DEBUG', 'ldap.debug', False) if LDAP_DEBUG: if 'loggers' not in LOGGING: LOGGING['loggers'] = {} @@ -453,113 +467,10 @@ if LDAP_AUTH: # pragma: no cover 'handlers': DEFAULT_LOG_HANDLER, } - # get global options from dict and use ldap.OPT_* as keys and values - global_options_dict = get_setting( - 'INVENTREE_LDAP_GLOBAL_OPTIONS', - 'ldap.global_options', - default_value=None, - typecast=dict, - ) - global_options = {} - for k, v in global_options_dict.items(): - # keys are always ldap.OPT_* constants - k_attr = getattr(ldap, k, None) - if not k.startswith('OPT_') or k_attr is None: - print(f"[LDAP] ldap.global_options, key '{k}' not found, skipping...") - continue + # Determine LDAP settings + ldap_settings = ldap.get_ldap_config(debug=LDAP_DEBUG) + globals().update(ldap_settings) - # values can also be other strings, e.g. paths - v_attr = v - if v.startswith('OPT_'): - v_attr = getattr(ldap, v, None) - - if v_attr is None: - print(f"[LDAP] ldap.global_options, value key '{v}' not found, skipping...") - continue - - global_options[k_attr] = v_attr - AUTH_LDAP_GLOBAL_OPTIONS = global_options - if LDAP_DEBUG: - print('[LDAP] ldap.global_options =', global_options) - - AUTH_LDAP_SERVER_URI = get_setting('INVENTREE_LDAP_SERVER_URI', 'ldap.server_uri') - AUTH_LDAP_START_TLS = get_boolean_setting( - 'INVENTREE_LDAP_START_TLS', 'ldap.start_tls', False - ) - AUTH_LDAP_BIND_DN = get_setting('INVENTREE_LDAP_BIND_DN', 'ldap.bind_dn') - AUTH_LDAP_BIND_PASSWORD = get_setting( - 'INVENTREE_LDAP_BIND_PASSWORD', 'ldap.bind_password' - ) - AUTH_LDAP_USER_SEARCH = django_auth_ldap.config.LDAPSearch( - get_setting('INVENTREE_LDAP_SEARCH_BASE_DN', 'ldap.search_base_dn'), - ldap.SCOPE_SUBTREE, - str( - get_setting( - 'INVENTREE_LDAP_SEARCH_FILTER_STR', - 'ldap.search_filter_str', - '(uid= %(user)s)', - ) - ), - ) - AUTH_LDAP_USER_DN_TEMPLATE = get_setting( - 'INVENTREE_LDAP_USER_DN_TEMPLATE', 'ldap.user_dn_template' - ) - AUTH_LDAP_USER_ATTR_MAP = get_setting( - 'INVENTREE_LDAP_USER_ATTR_MAP', - 'ldap.user_attr_map', - {'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'}, - dict, - ) - AUTH_LDAP_ALWAYS_UPDATE_USER = get_boolean_setting( - 'INVENTREE_LDAP_ALWAYS_UPDATE_USER', 'ldap.always_update_user', True - ) - AUTH_LDAP_CACHE_TIMEOUT = get_setting( - 'INVENTREE_LDAP_CACHE_TIMEOUT', 'ldap.cache_timeout', 3600, int - ) - - AUTH_LDAP_MIRROR_GROUPS = get_boolean_setting( - 'INVENTREE_LDAP_MIRROR_GROUPS', 'ldap.mirror_groups', False - ) - AUTH_LDAP_GROUP_OBJECT_CLASS = get_setting( - 'INVENTREE_LDAP_GROUP_OBJECT_CLASS', - 'ldap.group_object_class', - 'groupOfUniqueNames', - str, - ) - AUTH_LDAP_GROUP_SEARCH = django_auth_ldap.config.LDAPSearch( - get_setting('INVENTREE_LDAP_GROUP_SEARCH', 'ldap.group_search'), - ldap.SCOPE_SUBTREE, - f'(objectClass={AUTH_LDAP_GROUP_OBJECT_CLASS})', - ) - AUTH_LDAP_GROUP_TYPE_CLASS = get_setting( - 'INVENTREE_LDAP_GROUP_TYPE_CLASS', - 'ldap.group_type_class', - 'GroupOfUniqueNamesType', - str, - ) - AUTH_LDAP_GROUP_TYPE_CLASS_ARGS = get_setting( - 'INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS', 'ldap.group_type_class_args', [], list - ) - AUTH_LDAP_GROUP_TYPE_CLASS_KWARGS = get_setting( - 'INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS', - 'ldap.group_type_class_kwargs', - {'name_attr': 'cn'}, - dict, - ) - AUTH_LDAP_GROUP_TYPE = getattr(django_auth_ldap.config, AUTH_LDAP_GROUP_TYPE_CLASS)( - *AUTH_LDAP_GROUP_TYPE_CLASS_ARGS, **AUTH_LDAP_GROUP_TYPE_CLASS_KWARGS - ) - AUTH_LDAP_REQUIRE_GROUP = get_setting( - 'INVENTREE_LDAP_REQUIRE_GROUP', 'ldap.require_group' - ) - AUTH_LDAP_DENY_GROUP = get_setting('INVENTREE_LDAP_DENY_GROUP', 'ldap.deny_group') - AUTH_LDAP_USER_FLAGS_BY_GROUP = get_setting( - 'INVENTREE_LDAP_USER_FLAGS_BY_GROUP', - 'ldap.user_flags_by_group', - default_value=None, - typecast=dict, - ) - AUTH_LDAP_FIND_GROUP_PERMS = True # Allow secure http developer server in debug mode if DEBUG: @@ -642,107 +553,11 @@ Configure the database backend based on the user-specified values. logger.debug('Configuring database backend:') -# Extract database configuration from the config.yaml file -db_config = CONFIG.get('database', None) if CONFIG else None +# Load database configuration from the config file and environment variables +database = db_backend.get_db_backend() +DB_ENGINE = database['ENGINE'] -if not db_config: - db_config = {} - -# Environment variables take preference over config file! - -db_keys = ['ENGINE', 'NAME', 'USER', 'PASSWORD', 'HOST', 'PORT'] - -for key in db_keys: - # First, check the environment variables - env_key = f'INVENTREE_DB_{key}' - env_var = os.environ.get(env_key, None) - - if env_var: - # Make use PORT is int - if key == 'PORT': - try: - env_var = int(env_var) - except ValueError: - logger.exception('Invalid number for %s: %s', env_key, env_var) - # Override configuration value - db_config[key] = env_var - -# Check that required database configuration options are specified -required_keys = ['ENGINE', 'NAME'] - -# Ensure all database keys are upper case -db_config = {key.upper(): value for key, value in db_config.items()} - -for key in required_keys: - if key not in db_config: # pragma: no cover - error_msg = ( - f'Missing required database configuration value `INVENTREE_DB_{key}`' - ) - logger.error(error_msg) - - print('Error: ' + error_msg) - sys.exit(-1) - -""" -Special considerations for the database 'ENGINE' setting. -It can be specified in config.yaml (or envvar) as either (for example): -- sqlite3 -- django.db.backends.sqlite3 -- django.db.backends.postgresql -""" - -DB_ENGINE = db_config['ENGINE'].lower() - -# Correct common misspelling -if DB_ENGINE == 'sqlite': - DB_ENGINE = 'sqlite3' # pragma: no cover - -if DB_ENGINE in ['sqlite3', 'postgresql', 'mysql']: - # Prepend the required python module string - DB_ENGINE = f'django.db.backends.{DB_ENGINE}' - db_config['ENGINE'] = DB_ENGINE - -db_name = db_config['NAME'] -db_host = db_config.get('HOST', "''") - -if 'sqlite' in DB_ENGINE: - db_name = str(Path(db_name).resolve()) - db_config['NAME'] = db_name - -logger.info('DB_ENGINE: %s', DB_ENGINE) -logger.info('DB_NAME: %s', db_name) -logger.info('DB_HOST: %s', db_host) - -""" -In addition to base-level database configuration, we may wish to specify specific options to the database backend -Ref: https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-OPTIONS -""" - -# 'OPTIONS' or 'options' can be specified in config.yaml -# Set useful sensible timeouts for a transactional webserver to communicate -# with its database server, that is, if the webserver is having issues -# connecting to the database server (such as a replica failover) don't sit and -# wait for possibly an hour or more, just tell the client something went wrong -# and let the client retry when they want to. -db_options = db_config.get('OPTIONS', db_config.get('options')) - -if db_options is None: - db_options = {} - -# Set database-specific options -db_backend.set_db_options(DB_ENGINE, db_options) - -# Provide OPTIONS dict back to the database configuration dict -db_config['OPTIONS'] = db_options - -# Set testing options for the database -db_config['TEST'] = {'CHARSET': 'utf8'} - -# Set collation option for mysql test database -if 'mysql' in DB_ENGINE: - db_config['TEST']['COLLATION'] = 'utf8_general_ci' # pragma: no cover - -DATABASES = {'default': db_config} +DATABASES = {'default': database} # login settings REMOTE_LOGIN = get_boolean_setting( @@ -776,133 +591,28 @@ if SENTRY_ENABLED and SENTRY_DSN and not TESTING: # pragma: no cover init_sentry(SENTRY_DSN, SENTRY_SAMPLE_RATE, inventree_tags) # OpenTelemetry tracing -TRACING_ENABLED = get_boolean_setting( - 'INVENTREE_TRACING_ENABLED', 'tracing.enabled', False +TRACING_ENABLED = ( + get_boolean_setting('INVENTREE_TRACING_ENABLED', 'tracing.enabled', False) + and not isRunningBackup() ) -TRACING_DETAILS: Optional[dict] = None -if TRACING_ENABLED and not isRunningBackup(): # pragma: no cover - from InvenTree.tracing import setup_instruments, setup_tracing - - _t_endpoint = get_setting('INVENTREE_TRACING_ENDPOINT', 'tracing.endpoint', None) - _t_headers = get_setting('INVENTREE_TRACING_HEADERS', 'tracing.headers', None, dict) - - if _t_headers is None: - _t_headers = {} - - if _t_endpoint: - logger.info('OpenTelemetry tracing enabled') - - TRACING_DETAILS = ( - TRACING_DETAILS - if TRACING_DETAILS - else { - 'endpoint': _t_endpoint, - 'headers': _t_headers, - 'resources_input': { - **{'inventree.env.' + k: v for k, v in inventree_tags.items()}, - **get_setting( - 'INVENTREE_TRACING_RESOURCES', - 'tracing.resources', - default_value=None, - typecast=dict, - ), - }, - 'console': get_boolean_setting( - 'INVENTREE_TRACING_CONSOLE', 'tracing.console', False - ), - 'auth': get_setting( - 'INVENTREE_TRACING_AUTH', - 'tracing.auth', - default_value=None, - typecast=dict, - ), - 'is_http': get_setting( - 'INVENTREE_TRACING_IS_HTTP', 'tracing.is_http', True - ), - 'append_http': get_boolean_setting( - 'INVENTREE_TRACING_APPEND_HTTP', 'tracing.append_http', True - ), - } - ) - - # Run tracing/logging instrumentation - setup_tracing(**TRACING_DETAILS) - setup_instruments(DB_ENGINE) - else: - logger.warning('OpenTelemetry tracing not enabled because endpoint is not set') - -# endregion +TRACING_DETAILS: Optional[dict] = tracing.configure_tracing( + DB_ENGINE, TRACING_ENABLED, inventree_tags +) # Cache configuration GLOBAL_CACHE_ENABLED = is_global_cache_enabled() CACHES = {'default': get_cache_config(GLOBAL_CACHE_ENABLED)} -BACKGROUND_WORKER_TIMEOUT = int( - get_setting('INVENTREE_BACKGROUND_TIMEOUT', 'background.timeout', 90) +# Background task processing with django-q +Q_CLUSTER = worker.get_worker_config( + DB_ENGINE, + global_cache=GLOBAL_CACHE_ENABLED, + sentry_dsn=SENTRY_DSN if SENTRY_ENABLED and SENTRY_DSN else None, + debug=DEBUG, ) -# Set the retry time for background workers to be slightly longer than the worker timeout, to ensure that workers have time to timeout before being retried -BACKGROUND_WORKER_RETRY = max( - int(get_setting('INVENTREE_BACKGROUND_RETRY', 'background.retry', 300)), - BACKGROUND_WORKER_TIMEOUT + 120, -) - -# 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 -) - -# If running with SQLite, limit background worker threads to 1 to prevent database locking issues -if 'sqlite' in DB_ENGINE: - BACKGROUND_WORKER_COUNT = 1 - -BACKGROUND_WORKER_ATTEMPTS = int( - get_setting('INVENTREE_BACKGROUND_MAX_ATTEMPTS', 'background.max_attempts', 5) -) - -# Check if '--sync' was passed in the command line -if '--sync' in sys.argv and '--noreload' in sys.argv and DEBUG: - SYNC_TASKS = True -else: - SYNC_TASKS = False - -# Clean up sys.argv so Django doesn't complain about an unknown argument -if SYNC_TASKS: - sys.argv.remove('--sync') - -# django-q background worker configuration -Q_CLUSTER = { - 'name': 'InvenTree', - 'label': 'Background Tasks', - 'workers': BACKGROUND_WORKER_COUNT, - 'timeout': BACKGROUND_WORKER_TIMEOUT, - 'retry': BACKGROUND_WORKER_RETRY, - 'max_attempts': BACKGROUND_WORKER_ATTEMPTS, - 'save_limit': 1000, - 'queue_limit': 50, - 'catch_up': False, - 'bulk': 10, - 'orm': 'default', - 'cache': 'default', - 'sync': SYNC_TASKS, - 'poll': 1.5, -} - -# Configure django-q sentry integration -if SENTRY_ENABLED and SENTRY_DSN: # pragma: no cover - Q_CLUSTER['error_reporter'] = {'sentry': {'dsn': SENTRY_DSN}} - -if GLOBAL_CACHE_ENABLED: # pragma: no cover - # If using external redis cache, make the cache the broker for Django Q - # as well - Q_CLUSTER['django_redis'] = 'worker' - - SILENCED_SYSTEM_CHECKS = ['templates.E003', 'templates.W003'] # Password validation @@ -976,10 +686,10 @@ INTERNAL_EMAIL_BACKEND = get_setting( ) # SMTP backend -EMAIL_HOST = get_setting('INVENTREE_EMAIL_HOST', 'email.host', '') +EMAIL_HOST = get_setting('INVENTREE_EMAIL_HOST', 'email.host') EMAIL_PORT = get_setting('INVENTREE_EMAIL_PORT', 'email.port', 25, typecast=int) -EMAIL_HOST_USER = get_setting('INVENTREE_EMAIL_USERNAME', 'email.username', '') -EMAIL_HOST_PASSWORD = get_setting('INVENTREE_EMAIL_PASSWORD', 'email.password', '') +EMAIL_HOST_USER = get_setting('INVENTREE_EMAIL_USERNAME', 'email.username') +EMAIL_HOST_PASSWORD = get_setting('INVENTREE_EMAIL_PASSWORD', 'email.password') EMAIL_USE_TLS = get_boolean_setting('INVENTREE_EMAIL_TLS', 'email.tls', False) EMAIL_USE_SSL = get_boolean_setting('INVENTREE_EMAIL_SSL', 'email.ssl', False) # Anymail @@ -1150,16 +860,14 @@ LANGUAGE_COOKIE_SAMESITE = COOKIE_MODE - Otherwise, use the value specified in the configuration file (or env var) """ COOKIE_SECURE = ( - False - if DEBUG - else ( - SESSION_COOKIE_SAMESITE == 'None' - or get_boolean_setting( - 'INVENTREE_SESSION_COOKIE_SECURE', 'cookie.secure', False - ) - ) + get_boolean_setting('INVENTREE_SESSION_COOKIE_SECURE', 'cookie.secure', False) + or SESSION_COOKIE_SAMESITE == 'None' ) +# Override COOKIE_SECURE value in DEBUG mode +if DEBUG: + COOKIE_SECURE = False + CSRF_COOKIE_SECURE = COOKIE_SECURE SESSION_COOKIE_SECURE = COOKIE_SECURE LANGUAGE_COOKIE_SECURE = COOKIE_SECURE diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 973f967086..dcd1457495 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -29,7 +29,6 @@ from maintenance_mode.core import ( from opentelemetry import trace from common.settings import get_global_setting, set_global_setting -from InvenTree.config import get_setting from plugin import registry from .version import isInvenTreeUpToDate @@ -822,7 +821,7 @@ def check_for_migrations(force: bool = False, reload_registry: bool = True) -> b set_pending_migrations(n) # Test if auto-updates are enabled - if not force and not get_setting('INVENTREE_AUTO_UPDATE', 'auto_update'): + if not force and not settings.AUTO_UPDATE: logger.info('Auto-update is disabled - skipping migrations') return False diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 35f7808750..f8041a0a82 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -381,7 +381,16 @@ class ConfigSerializer(serializers.Serializer): """Return the configuration data as a dictionary.""" if not isinstance(instance, str): instance = list(instance.keys())[0] - return {'key': instance, **self.instance.get(instance)} + + data = {'key': instance} + + for k, v in self.instance.get(instance, {}).items(): + if k == 'default_value': + # Skip sensitive default values + continue + data[k] = v + + return data class NotesImageSerializer(InvenTreeModelSerializer): diff --git a/tasks.py b/tasks.py index 37be587a36..64b961fc3e 100644 --- a/tasks.py +++ b/tasks.py @@ -1864,8 +1864,13 @@ def export_definitions(c, basedir: str = ''): """Export various definitions.""" if basedir != '' and basedir.endswith('/') is False: basedir += '/' + base_path = Path(basedir, 'generated').resolve() + if not base_path.exists(): + info(f'Creating export directory: {base_path}') + base_path.mkdir(parents=True, exist_ok=True) + filenames = [ base_path.joinpath('inventree_settings.json'), base_path.joinpath('inventree_tags.yml'), @@ -2298,12 +2303,19 @@ def doc_schema(c): help={ 'address': 'Host and port to run the server on (default: localhost:8080)', 'compile_schema': 'Compile the API schema documentation first (default: False)', + 'export_settings': 'Export settings definitions before starting the server (default: True)', } ) -def docs_server(c, address='localhost:8080', compile_schema=False): +def docs_server( + c, + address='localhost:8080', + compile_schema: bool = False, + export_settings: bool = True, +): """Start a local mkdocs server to view the documentation.""" # Extract settings definitions - export_definitions(c, basedir='docs') + if export_settings: + export_definitions(c, basedir='docs') if compile_schema: doc_schema(c) From d837c8a9100ce06f0a843f40d10e1f9c049d71fc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:48:56 +1000 Subject: [PATCH 18/71] New Crowdin translations by GitHub Action (#11750) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../InvenTree/locale/ar/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/bg/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/cs/LC_MESSAGES/django.po | 116 +- .../InvenTree/locale/da/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/de/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/el/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/en/LC_MESSAGES/django.po | 54 +- .../InvenTree/locale/es/LC_MESSAGES/django.po | 56 +- .../locale/es_MX/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/et/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/fa/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/fi/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/fr/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/he/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/hi/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/hu/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/id/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/it/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/ja/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/ko/LC_MESSAGES/django.po | 4624 ++++++++--------- .../InvenTree/locale/lt/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/lv/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/nl/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/no/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/pl/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/pt/LC_MESSAGES/django.po | 56 +- .../locale/pt_BR/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/ro/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/ru/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/sk/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/sl/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/sr/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/sv/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/th/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/tr/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/uk/LC_MESSAGES/django.po | 56 +- .../InvenTree/locale/vi/LC_MESSAGES/django.po | 56 +- .../locale/zh_Hans/LC_MESSAGES/django.po | 56 +- .../locale/zh_Hant/LC_MESSAGES/django.po | 56 +- src/frontend/src/locales/ar/messages.po | 54 +- src/frontend/src/locales/bg/messages.po | 54 +- src/frontend/src/locales/cs/messages.po | 132 +- src/frontend/src/locales/da/messages.po | 54 +- src/frontend/src/locales/de/messages.po | 54 +- src/frontend/src/locales/el/messages.po | 54 +- src/frontend/src/locales/en/messages.po | 52 +- src/frontend/src/locales/es/messages.po | 54 +- src/frontend/src/locales/es_MX/messages.po | 54 +- src/frontend/src/locales/et/messages.po | 54 +- src/frontend/src/locales/fa/messages.po | 54 +- src/frontend/src/locales/fi/messages.po | 54 +- src/frontend/src/locales/fr/messages.po | 54 +- src/frontend/src/locales/he/messages.po | 54 +- src/frontend/src/locales/hi/messages.po | 54 +- src/frontend/src/locales/hu/messages.po | 54 +- src/frontend/src/locales/id/messages.po | 54 +- src/frontend/src/locales/it/messages.po | 54 +- src/frontend/src/locales/ja/messages.po | 54 +- src/frontend/src/locales/ko/messages.po | 4346 ++++++++-------- src/frontend/src/locales/lt/messages.po | 54 +- src/frontend/src/locales/lv/messages.po | 54 +- src/frontend/src/locales/nl/messages.po | 54 +- src/frontend/src/locales/no/messages.po | 54 +- src/frontend/src/locales/pl/messages.po | 54 +- src/frontend/src/locales/pt/messages.po | 54 +- src/frontend/src/locales/pt_BR/messages.po | 54 +- src/frontend/src/locales/ro/messages.po | 54 +- src/frontend/src/locales/ru/messages.po | 54 +- src/frontend/src/locales/sk/messages.po | 54 +- src/frontend/src/locales/sl/messages.po | 54 +- src/frontend/src/locales/sr/messages.po | 54 +- src/frontend/src/locales/sv/messages.po | 54 +- src/frontend/src/locales/th/messages.po | 54 +- src/frontend/src/locales/tr/messages.po | 54 +- src/frontend/src/locales/uk/messages.po | 54 +- src/frontend/src/locales/vi/messages.po | 54 +- src/frontend/src/locales/zh_Hans/messages.po | 54 +- src/frontend/src/locales/zh_Hant/messages.po | 56 +- 78 files changed, 6643 insertions(+), 6643 deletions(-) diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 9ce15b4574..ef255e233d 100644 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index 4686550dc3..56a1f558ca 100644 --- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Китайски (опростен)" msgid "Chinese (Traditional)" msgstr "Китайски (традиционен)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index 34cf99632c..acf93c2bf0 100644 --- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -23,7 +23,7 @@ msgstr "API endpoint nebyl nalezen" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "Seznam položek musí být k dispozici pro hromadnou operaci" #: InvenTree/api.py:445 msgid "Items must be provided as a list" @@ -165,19 +165,19 @@ msgstr "Data obsahují zakázaný markdown obsah" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "Neplatná URH: žádný název hostitele" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "Neplatná URL: nelze zjistit název hostitele" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL směřuje na soukromou nebo rezervovanou IP adresu" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "Příliš mnoho přesměrování" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -269,7 +269,7 @@ msgstr "Neplatný výběr" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Čínština (zjednodušená)" msgid "Chinese (Traditional)" msgstr "Čínština (tradiční)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Dostupná aktualizace" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Aktualizace pro InvenTree je k dispozici" @@ -718,7 +718,7 @@ msgstr "Na objednávku" #: build/api.py:671 msgid "Build not found" -msgstr "" +msgstr "Sestava nenalezena" #: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 @@ -1849,7 +1849,7 @@ msgstr "Velikost souboru" msgid "File size in bytes" msgstr "Velikost souboru v bytech" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Uveden neplatný typ modelu pro přílohu" @@ -2126,7 +2126,7 @@ msgstr "Parametry" msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Neplatný typ modelu pro daný parametr" @@ -2391,85 +2391,85 @@ msgstr "Indikuje zdali bylo nastavení přepsáno proměnou prostředí" msgid "Override" msgstr "Přepsat" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Je spuštěné" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Čekající úkoly" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Naplánované úlohy" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Neúspěšné úlohy" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID úlohy" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unikátní ID úlohy" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Zamknout" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Čas uzamčení" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Jméno úkolu" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkce" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Název funkce" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumenty úlohy" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumenty klíčových slov" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumenty klíčových slov úlohy" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Název souboru" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:790 +#: common/serializers.py:799 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" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "Uživatel nemá práva vytvářet nebo upravovat parametry pro tento model" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Tento výběr je uzamčen" @@ -2547,19 +2547,19 @@ msgstr "Zobrazovat okno `o aplikaci` pouze superuživatelům" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "Zobrazit banner superuživatele" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "Zobrazit varovný banner v uživatelském rozhraní při přihlášení jako superuživatel" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "Zobrazit banner administrátora" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "Zobrazit varovný banner v uživatelském rozhraní při přihlášení jako administrátor" #: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" @@ -4349,7 +4349,7 @@ msgstr "Množstevní sleva" #: company/serializers.py:488 msgid "Pretty Name" -msgstr "" +msgstr "Hezké jméno" #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" @@ -4843,7 +4843,7 @@ msgstr "Má zásilku" #: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "Zásilka nebyla nalezena" #: order/api.py:1840 order/models.py:577 order/models.py:1973 #: order/models.py:2099 @@ -5014,7 +5014,7 @@ msgstr "Množství musí být kladné" #: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "Sériová čísla nemohou být přiřazena virtuálním dílům" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 #: stock/models.py:1086 stock/serializers.py:1397 @@ -5081,11 +5081,11 @@ msgstr "Množství položky" #: order/models.py:1814 msgid "Line Number" -msgstr "" +msgstr "Číslo linky" #: order/models.py:1815 msgid "Line number for this item (optional)" -msgstr "" +msgstr "Číslo řádku pro tuto položku (nepovinné)" #: order/models.py:1822 msgid "Line item reference" @@ -5907,7 +5907,7 @@ msgstr "Díl nemůže být revize same sebe" #: part/models.py:783 msgid "Revision code must be specified for a part marked as a revision" -msgstr "" +msgstr "Kód revize musí být specifikován pro díl označený jako revize" #: part/models.py:791 msgid "Revisions are only allowed for assembly parts" @@ -7643,7 +7643,7 @@ msgstr "Dodavatel, který funguje jako 'TME'" #: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 #: plugin/serializers.py:275 msgid "Only superuser accounts can administer plugins" -msgstr "" +msgstr "Pouze superuživatelské účty mohou spravovat pluginy" #: plugin/installer.py:243 msgid "Plugin installation is disabled" @@ -7651,11 +7651,11 @@ msgstr "Instalace pluginu je zakázana" #: plugin/installer.py:273 msgid "No package name or URL provided for installation" -msgstr "" +msgstr "Není k dispozici žádný název balíčku nebo URL pro instalaci" #: plugin/installer.py:277 msgid "Invalid characters in package name or URL" -msgstr "" +msgstr "Neplatné znaky v názvu balíčku nebo v URL" #: plugin/installer.py:287 msgid "Installed plugin successfully" @@ -8176,7 +8176,7 @@ msgstr "Popis souboru aktiva" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "Uživatel musí být ověřen pro uložení šablon reportu" #: report/serializers.py:118 msgid "Select report template" @@ -8327,15 +8327,15 @@ msgstr "Žádný výsledek" #: report/templatetags/report.py:166 msgid "Invalid media file path" -msgstr "" +msgstr "Neplatná cesta k media souboru" #: report/templatetags/report.py:185 msgid "Invalid static file path" -msgstr "" +msgstr "Neplatná cesta ke statickému souboru" #: report/templatetags/report.py:287 msgid "Asset file not found" -msgstr "" +msgstr "Soubor aktiva nebyl nalezen" #: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" @@ -8343,7 +8343,7 @@ msgstr "Soubor obrázku nebyl nalezen" #: report/templatetags/report.py:430 msgid "No image file specified" -msgstr "" +msgstr "Nebyl zadán žádný obrázek" #: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" @@ -9628,19 +9628,19 @@ msgstr "Emailová adresa uživatele" #: users/serializers.py:240 msgid "User must be authenticated" -msgstr "" +msgstr "Uživatel musí být autentizován" #: users/serializers.py:249 msgid "Only a superuser can create a token for another user" -msgstr "" +msgstr "Pouze superuživatel může vytvořit token pro jiného uživatele" #: users/serializers.py:329 msgid "Administrator" -msgstr "" +msgstr "Administrátor" #: users/serializers.py:330 msgid "Does this user have administrative permissions" -msgstr "" +msgstr "Má tento uživatel administrativní oprávnění" #: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" @@ -9676,11 +9676,11 @@ msgstr "Přepsat varování o pravidlech pro heslo" #: users/serializers.py:417 msgid "Staff" -msgstr "" +msgstr "Personál" #: users/serializers.py:418 msgid "Does this user have staff permissions" -msgstr "" +msgstr "Má tento uživatel oprávnění personálu" #: users/serializers.py:468 msgid "You do not have permission to create users" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 3c2126264c..cae9326c6d 100644 --- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -269,7 +269,7 @@ msgstr "Ugyldigt valg" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (traditionelt)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Opdatering tilgængelig" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "En opdatering til InvenTree er tilgængelig" @@ -1849,7 +1849,7 @@ msgstr "Filstørrelse" msgid "File size in bytes" msgstr "Filstørrelse i bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index 2e4f4886f2..24a07e0a1d 100644 --- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -269,7 +269,7 @@ msgstr "Ungültige Auswahl" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chinesisch (Vereinfacht)" msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Update verfügbar" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Ein Update für InvenTree ist verfügbar" @@ -1849,7 +1849,7 @@ msgstr "Dateigröße" msgid "File size in bytes" msgstr "Dateigröße in Bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ungültiger Modelltyp für Anhang angegeben" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Wird ausgeführt" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Anstehende Aufgaben" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Fehlgeschlagene Aufgaben" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Aufgabe-ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Eindeutige Aufgaben-ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Sperren" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Sperrzeit" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Aufgabenname" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funktion" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funktionsname" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Parameter" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Aufgaben-Parameter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Schlüsselwort Parameter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Schlüsselwort Parameter für Aufgaben" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Dateiname" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index b76493f493..7232c7d613 100644 --- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -269,7 +269,7 @@ msgstr "Μη έγκυρη επιλογή" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Κινέζικα (απλοποιημένα)" msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Διαθέσιμη ενημέρωση" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Μια ενημέρωση για το InvenTree είναι διαθέσιμη" @@ -1849,7 +1849,7 @@ msgstr "Μέγεθος αρχείου" msgid "File size in bytes" msgstr "Μέγεθος αρχείου σε bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "Δείχνει αν η ρύθμιση παρακάμπτεται από msgid "Override" msgstr "Παράκαμψη" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Εκτελείται" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Εργασίες σε αναμονή" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Προγραμματισμένες εργασίες" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Αποτυχημένες εργασίες" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID εργασίας" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Μοναδικό ID εργασίας" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Κλείδωμα" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Χρόνος κλειδώματος" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Όνομα εργασίας" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Συνάρτηση" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Όνομα συνάρτησης" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Ορίσματα" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Ορίσματα εργασίας" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Ορίσματα λέξεων-κλειδιών" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Ορίσματα λέξεων-κλειδιών της εργασίας" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Όνομα αρχείου" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Τύπος μοντέλου" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Ο χρήστης δεν έχει δικαίωμα να δημιουργήσει ή να επεξεργαστεί συνημμένα για αυτό το μοντέλο" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Η λίστα επιλογών είναι κλειδωμένη" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index 4b3c0acc6b..d1e37c9d76 100644 --- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 12:28+0000\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -270,7 +270,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -537,11 +537,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1850,7 +1850,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2127,7 +2127,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2392,85 +2392,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 10ffcc19ad..1d10f99a91 100644 --- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -269,7 +269,7 @@ msgstr "Selección no válida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Actualización disponible" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Una actualización para InvenTree está disponible" @@ -1849,7 +1849,7 @@ msgstr "Tamaño del archivo" msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Función" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "El usuario no tiene permiso para crear o editar archivos adjuntos para este modelo" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index 4cf7a2dfa2..9be143b44f 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -269,7 +269,7 @@ msgstr "Selección no válida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Tamaño del archivo" msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Función" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index 04f2d20859..d7baa4fe52 100644 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -269,7 +269,7 @@ msgstr "Vigane valik" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Hiina (lihtsustatud)" msgid "Chinese (Traditional)" msgstr "Hiina (traditsiooniline)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Faili suurus" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Ülesande nimi" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funktsioon" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funktsiooni nimi" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumendid" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Ülesande argumendid" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Failinimi" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Mudeli liik" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index caebd96b9e..715e3a4ede 100644 --- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -269,7 +269,7 @@ msgstr "انتخاب نامعتبر" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "چینی (ساده شده)" msgid "Chinese (Traditional)" msgstr "چینی (سنتی)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index d4eb196998..8084760108 100644 --- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -269,7 +269,7 @@ msgstr "Virheellinen valinta" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Tiedostonimi" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 3cc62ea81e..803afef3a7 100644 --- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -269,7 +269,7 @@ msgstr "Choix invalide" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chinois (Simplifié)" msgid "Chinese (Traditional)" msgstr "Chinois (Traditionnel)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Mise à jour disponible" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Une mise à jour pour InvenTree est disponible" @@ -1849,7 +1849,7 @@ msgstr "Taille du fichier" msgid "File size in bytes" msgstr "Taille du fichier en octets" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Type de modèle non valide spécifié pour la pièce jointe" @@ -2126,7 +2126,7 @@ msgstr "Paramètres" msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Type de modèle non valide pour la pièce jointe" @@ -2391,85 +2391,85 @@ msgstr "Indique si le paramètre est écrasé par une variable d'environnement" msgid "Override" msgstr "Écraser" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "En cours d'exécution" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tâches en attente" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tâches planifiées" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tâches échouées" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID de la tâche" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID unique de la tâche" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Verrouillé" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Heure verrouillé" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nom de la tâche" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Fonction" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nom de la fonction" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Arguments" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Arguments tâche" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Mots-clés Arguments" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Mots-clés arguments tâche" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nom du fichier" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Type de modèle" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier des pièces jointes pour ce modèle" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier les paramètres de ce modèle." -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "La liste de sélection est verrouillée" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index cea6193d22..bdc613530f 100644 --- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -269,7 +269,7 @@ msgstr "בחירה שגויה" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "סינית (פשוטה)" msgid "Chinese (Traditional)" msgstr "סינית (מסורתית)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "שם קובץ" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 1fa7a1b5a4..908ad8e3c1 100644 --- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index ea1f5d9cd2..2d827d6845 100644 --- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -269,7 +269,7 @@ msgstr "Érvénytelen választás" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Kínai (egyszerűsített)" msgid "Chinese (Traditional)" msgstr "Kínai (Hagyományos)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Frissítés elérhető" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTree frissítés elérhető" @@ -1850,7 +1850,7 @@ msgstr "Fájl mérete" msgid "File size in bytes" msgstr "Fájlméret bájtban" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "A melléklet model típusa érvénytelen" @@ -2127,7 +2127,7 @@ msgstr "Paraméterek" msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Érvénytelen modelltípus megadva a paraméterhez" @@ -2392,85 +2392,85 @@ msgstr "Ez a beállítás felül van bírálva egy környezeti változó által" msgid "Override" msgstr "Felülbírálás" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Folyamatban" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Folyamatban lévő feladatok" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Ütemezett Feladatok" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Hibás feladatok" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Feladat ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Egyedi feladat ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Zárol" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Zárolási idő" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Feladat neve" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkció" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funkció neve" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Paraméterek" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Feladat paraméterei" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Kulcsszó paraméterek" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Feladat kulcsszó paraméterek" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Fájlnév" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modell típusa" -#: common/serializers.py:790 +#: common/serializers.py:799 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" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "A felhasználónak nincs jogosultsága paraméterek létrehozására vagy szerkesztésére ehhez a modellhez" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Választéklista lezárva" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index 15de8913de..897c2dbf2d 100644 --- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -269,7 +269,7 @@ msgstr "Pilihan tidak valid" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Ukuran Berkas" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nama File" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 77304596b0..1cf05f6e5c 100644 --- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -269,7 +269,7 @@ msgstr "Scelta non valida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Cinese (Semplificato)" msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Aggiornamento disponibile" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "È disponibile un aggiornamento per InvenTree" @@ -1849,7 +1849,7 @@ msgstr "Dimensione file" msgid "File size in bytes" msgstr "Dimensioni file in byte" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo di modello specificato per l'allegato non valido" @@ -2126,7 +2126,7 @@ msgstr "Parametri" msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Tipo di modello specificato per parametro non valido" @@ -2391,85 +2391,85 @@ msgstr "Indica se l'impostazione è sovrascritta da una variabile ambiente" msgid "Override" msgstr "Sovrascrivi" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "In Esecuzione" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Attività in sospeso" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Attività pianificate" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Attività Fallite" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID Attività" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID attività univoco" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Blocco" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Tempo di blocco" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nome attività" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funzione" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nome della funzione" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argomenti" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argomenti attività" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argomenti Parole Chiave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argomenti parole chiave attività" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nome del file" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Tipo di modello" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utente non ha il permesso di creare o modificare allegati per questo modello" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utente non ha il permesso di creare o modificare parametri per questo modello" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista di selezione bloccata" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 16091844df..833b1050b2 100644 --- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -269,7 +269,7 @@ msgstr "無効な選択です" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "中国語 (簡体字)" msgid "Chinese (Traditional)" msgstr "中国語 (繁体字)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "アップデートが利用可能" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTreeの更新版が利用可能になりました" @@ -1849,7 +1849,7 @@ msgstr "ファイルサイズ" msgid "File size in bytes" msgstr "ファイルサイズ(バイト" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "添付ファイルに指定されたモデルタイプが無効です" @@ -2126,7 +2126,7 @@ msgstr "パラメータ" msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "パラメータに対して無効なモデルタイプが指定されています" @@ -2391,85 +2391,85 @@ msgstr "環境変数によって設定が上書きされるかどうかを示し msgid "Override" msgstr "上書き" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "走行中" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "保留タスク" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "スケジュールされたタスク" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "失敗したタスク" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "タスクID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ユニークなタスクID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "ロック" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "ロック時間" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "タスク名" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "関数" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "機能名" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "引数" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "タスク引数" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "キーワード論争" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "タスクキーワード引数" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "ファイル名" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "モデルタイプ" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "このモデルの添付ファイルを作成または編集する権限がありません。" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "ユーザーは、このモデルのパラメータを作成または編集する権限がありません。" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "選択リストがロックされています" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index 7ce41b0292..c1cef67db4 100644 --- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -19,35 +19,35 @@ msgstr "" #: InvenTree/api.py:365 msgid "API endpoint not found" -msgstr "" +msgstr "API 엔드포인트를 찾을 수 없습니다" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "일괄 작업을 위해 항목 목록을 제공해야 합니다" #: InvenTree/api.py:445 msgid "Items must be provided as a list" -msgstr "" +msgstr "항목은 목록 형태로 제공되어야 합니다" #: InvenTree/api.py:453 msgid "Invalid items list provided" -msgstr "" +msgstr "잘못된 항목 목록이 제공되었습니다" #: InvenTree/api.py:458 msgid "All filter must only be used with true" -msgstr "" +msgstr "all 필터는 true와 함께만 사용할 수 있습니다" #: InvenTree/api.py:463 msgid "No items match the provided criteria" -msgstr "" +msgstr "제공된 조건과 일치하는 항목이 없습니다" #: InvenTree/api.py:487 msgid "No data provided" -msgstr "" +msgstr "데이터가 제공되지 않았습니다" #: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "이 필드는 고유해야 합니다." #: InvenTree/api.py:832 msgid "User does not have permission to view this model" @@ -63,38 +63,38 @@ msgstr "이메일 주소 확인" #: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." -msgstr "" +msgstr "매번 동일한 이메일을 입력해야 합니다." #: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "제공된 기본 이메일 주소가 유효하지 않습니다." #: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." -msgstr "" +msgstr "제공된 이메일 도메인이 승인되지 않았습니다." #: InvenTree/conversion.py:240 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "잘못된 단위가 제공되었습니다 ({unit})" #: InvenTree/conversion.py:257 msgid "No value provided" -msgstr "" +msgstr "값이 제공되지 않았습니다" #: InvenTree/conversion.py:284 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "" +msgstr "{original}을(를) {unit}(으)로 변환할 수 없습니다" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" -msgstr "" +msgstr "잘못된 수량이 제공되었습니다" #: InvenTree/exceptions.py:136 msgid "Error details can be found in the admin panel" -msgstr "" +msgstr "오류 상세 내용은 관리자 패널에서 확인할 수 있습니다" #: InvenTree/fields.py:146 msgid "Enter date" @@ -102,7 +102,7 @@ msgstr "날짜 입력" #: InvenTree/fields.py:169 msgid "Invalid decimal value" -msgstr "" +msgstr "잘못된 소수 값" #: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 #: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 @@ -117,67 +117,67 @@ msgstr "메모" #: InvenTree/format.py:166 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "" +msgstr "값 '{name}'이(가) 패턴 형식에 없습니다" #: InvenTree/format.py:177 msgid "Provided value does not match required pattern: " -msgstr "" +msgstr "제공된 값이 요구되는 패턴과 일치하지 않습니다: " #: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" -msgstr "" +msgstr "한 번에 1000개를 초과하여 직렬화할 수 없습니다" #: InvenTree/helpers.py:620 msgid "Empty serial number string" -msgstr "" +msgstr "시리얼 번호 문자열이 비어 있습니다" #: InvenTree/helpers.py:649 msgid "Duplicate serial" -msgstr "" +msgstr "중복된 시리얼" #: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 #: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" -msgstr "" +msgstr "잘못된 그룹: {group}" #: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" +msgstr "그룹 범위 {group}이(가) 허용된 수량({expected_quantity})을 초과합니다" #: InvenTree/helpers.py:778 msgid "No serial numbers found" -msgstr "" +msgstr "시리얼 번호를 찾을 수 없습니다" #: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "고유 시리얼 번호 개수({n})는 수량({q})과 일치해야 합니다" #: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "이 값에서 HTML 태그를 제거하세요" #: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "데이터에 금지된 마크다운 내용이 포함되어 있습니다" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "잘못된 URL: 호스트명이 없습니다" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "잘못된 URL: 호스트명을 확인할 수 없습니다" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL이 사설 또는 예약된 IP 주소를 가리킵니다" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "리디렉션이 너무 많습니다" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -185,15 +185,15 @@ msgstr "연결 오류" #: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" -msgstr "" +msgstr "서버가 잘못된 상태 코드를 반환했습니다" #: InvenTree/helpers_model.py:210 msgid "Exception occurred" -msgstr "" +msgstr "예외가 발생했습니다" #: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "서버가 잘못된 Content-Length 값을 반환했습니다" #: InvenTree/helpers_model.py:223 msgid "Image size is too large" @@ -201,19 +201,19 @@ msgstr "이미지 크기가 너무 큽니다!" #: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" -msgstr "" +msgstr "이미지 다운로드가 최대 크기를 초과했습니다" #: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" -msgstr "" +msgstr "원격 서버가 빈 응답을 반환했습니다" #: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" -msgstr "" +msgstr "제공된 URL은 유효한 이미지 파일이 아닙니다" #: InvenTree/magic_login.py:31 msgid "Log in to the app" -msgstr "" +msgstr "앱에 로그인" #: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" @@ -221,55 +221,55 @@ msgstr "이메일" #: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." -msgstr "" +msgstr "다른 작업을 하기 전에 먼저 2단계 인증을 활성화해야 합니다." #: InvenTree/models.py:114 msgid "Error running plugin validation" -msgstr "" +msgstr "플러그인 유효성 검사 실행 중 오류가 발생했습니다" #: InvenTree/models.py:195 msgid "Metadata must be a python dict object" -msgstr "" +msgstr "메타데이터는 파이썬 dict 객체여야 합니다" #: InvenTree/models.py:201 msgid "Plugin Metadata" -msgstr "" +msgstr "플러그인 메타데이터" #: InvenTree/models.py:202 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "외부 플러그인에서 사용하는 JSON 메타데이터 필드" #: InvenTree/models.py:385 msgid "Improperly formatted pattern" -msgstr "" +msgstr "패턴 형식이 올바르지 않습니다" #: InvenTree/models.py:392 msgid "Unknown format key specified" -msgstr "" +msgstr "알 수 없는 형식 키가 지정되었습니다" #: InvenTree/models.py:398 msgid "Missing required format key" -msgstr "" +msgstr "필수 형식 키가 누락되었습니다" #: InvenTree/models.py:409 msgid "Reference field cannot be empty" -msgstr "" +msgstr "참조(Reference) 필드는 비워둘 수 없습니다" #: InvenTree/models.py:417 msgid "Reference must match required pattern" -msgstr "" +msgstr "참조(Reference)는 요구되는 패턴과 일치해야 합니다" #: InvenTree/models.py:448 msgid "Reference number is too large" -msgstr "" +msgstr "참조 번호가 너무 큽니다" #: InvenTree/models.py:901 msgid "Invalid choice" -msgstr "" +msgstr "잘못된 선택입니다" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -291,15 +291,15 @@ msgstr "설명 (선택 사항)" #: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" -msgstr "" +msgstr "경로" #: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" -msgstr "" +msgstr "같은 상위 항목 아래에는 중복된 이름이 있을 수 없습니다" #: InvenTree/models.py:1233 msgid "Markdown notes (optional)" -msgstr "" +msgstr "마크다운 메모 (선택 사항)" #: InvenTree/models.py:1264 msgid "Barcode Data" @@ -307,19 +307,19 @@ msgstr "바코드 데이터" #: InvenTree/models.py:1265 msgid "Third party barcode data" -msgstr "" +msgstr "서드파티 바코드 데이터" #: InvenTree/models.py:1271 msgid "Barcode Hash" -msgstr "" +msgstr "바코드 해시" #: InvenTree/models.py:1272 msgid "Unique hash of barcode data" -msgstr "" +msgstr "바코드 데이터의 고유 해시" #: InvenTree/models.py:1353 msgid "Existing barcode found" -msgstr "" +msgstr "기존 바코드를 찾았습니다" #: InvenTree/models.py:1453 msgid "Server Error" @@ -327,30 +327,30 @@ msgstr "서버 오류" #: InvenTree/models.py:1454 msgid "An error has been logged by the server." -msgstr "" +msgstr "서버에 오류가 기록되었습니다." #: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" -msgstr "" +msgstr "이미지" #: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" -msgstr "" +msgstr "유효한 숫자여야 합니다" #: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" -msgstr "" +msgstr "통화" #: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" -msgstr "" +msgstr "사용 가능한 옵션에서 통화를 선택하세요" #: InvenTree/serializers.py:756 msgid "This field may not be null." -msgstr "" +msgstr "이 필드는 null일 수 없습니다." #: InvenTree/serializers.py:762 msgid "Invalid value" @@ -358,31 +358,31 @@ msgstr "유효하지 않은 값" #: InvenTree/serializers.py:799 msgid "Remote Image" -msgstr "" +msgstr "원격 이미지" #: InvenTree/serializers.py:800 msgid "URL of remote image file" -msgstr "" +msgstr "원격 이미지 파일의 URL" #: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" -msgstr "" +msgstr "원격 URL에서 이미지 다운로드가 활성화되어 있지 않습니다" #: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" -msgstr "" +msgstr "원격 URL에서 이미지를 다운로드하지 못했습니다" #: InvenTree/serializers.py:908 msgid "Invalid content type format" -msgstr "" +msgstr "콘텐츠 타입 형식이 올바르지 않습니다" #: InvenTree/serializers.py:911 msgid "Content type not found" -msgstr "" +msgstr "콘텐츠 타입을 찾을 수 없습니다" #: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "콘텐츠 타입이 필요한 믹스인 클래스와 일치하지 않습니다" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -536,35 +536,35 @@ msgstr "중국어 (간체)" msgid "Chinese (Traditional)" msgstr "중국어 (번체)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" -msgstr "" +msgstr "업데이트 사용 가능" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" -msgstr "" +msgstr "InvenTree 업데이트가 있습니다" #: InvenTree/validators.py:28 msgid "Invalid physical unit" -msgstr "" +msgstr "잘못된 물리 단위" #: InvenTree/validators.py:34 msgid "Not a valid currency code" -msgstr "" +msgstr "유효한 통화 코드가 아닙니다" #: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" -msgstr "" +msgstr "주문 상태" #: build/api.py:81 build/models.py:277 msgid "Parent Build" -msgstr "" +msgstr "직상위 빌드" #: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 #: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" -msgstr "" +msgstr "변형(Variant) 포함" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 #: build/serializers.py:1213 build/serializers.py:1389 @@ -593,7 +593,7 @@ msgstr "" #: templates/email/part_event_notification.html:15 #: templates/email/stale_stock_notification.html:17 msgid "Part" -msgstr "" +msgstr "부품" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 @@ -603,7 +603,7 @@ msgstr "분류" #: build/api.py:132 build/api.py:136 msgid "Ancestor Build" -msgstr "" +msgstr "상위 계층 빌드" #: build/api.py:153 order/api.py:132 msgid "Assigned to me" @@ -611,47 +611,47 @@ msgstr "나에게 할당 됨" #: build/api.py:168 msgid "Assigned To" -msgstr "" +msgstr "할당 대상" #: build/api.py:203 msgid "Created before" -msgstr "" +msgstr "생성일 이전" #: build/api.py:207 msgid "Created after" -msgstr "" +msgstr "생성일 이후" #: build/api.py:211 msgid "Has start date" -msgstr "" +msgstr "시작일 있음" #: build/api.py:219 msgid "Start date before" -msgstr "" +msgstr "시작일 이전" #: build/api.py:223 msgid "Start date after" -msgstr "" +msgstr "시작일 이후" #: build/api.py:227 msgid "Has target date" -msgstr "" +msgstr "목표일 있음" #: build/api.py:235 msgid "Target date before" -msgstr "" +msgstr "목표일 이전" #: build/api.py:239 msgid "Target date after" -msgstr "" +msgstr "목표일 이후" #: build/api.py:243 msgid "Completed before" -msgstr "" +msgstr "완료일 이전" #: build/api.py:247 msgid "Completed after" -msgstr "" +msgstr "완료일 이후" #: build/api.py:250 order/api.py:237 msgid "Min Date" @@ -663,11 +663,11 @@ msgstr "최대 날짜" #: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" -msgstr "" +msgstr "트리 제외" #: build/api.py:400 msgid "Build must be cancelled before it can be deleted" -msgstr "" +msgstr "빌드를 삭제하려면 먼저 취소해야 합니다" #: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" @@ -681,51 +681,51 @@ msgstr "선택사항" #: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" -msgstr "" +msgstr "조립품" #: build/api.py:453 msgid "Tracked" -msgstr "" +msgstr "추적됨" #: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" -msgstr "" +msgstr "테스트 가능" #: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" -msgstr "" +msgstr "미결 주문" #: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" -msgstr "" +msgstr "할당됨" #: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" -msgstr "" +msgstr "소모됨" #: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" -msgstr "" +msgstr "사용 가능" #: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 #: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 #: part/serializers.py:1792 msgid "On Order" -msgstr "" +msgstr "주문 중" #: build/api.py:671 msgid "Build not found" -msgstr "" +msgstr "빌드를 찾을 수 없습니다" #: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" -msgstr "" +msgstr "작업 지시서" #: build/api.py:955 build/api.py:959 build/serializers.py:367 #: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 @@ -737,51 +737,51 @@ msgstr "" #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" -msgstr "" +msgstr "위치" #: build/api.py:967 part/serializers.py:1381 msgid "Output" -msgstr "" +msgstr "산출물" #: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "" +msgstr "산출물 재고 항목 ID로 필터링합니다. 설치되지 않은 빌드 항목을 찾으려면 'null'을 사용하세요." #: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" -msgstr "" +msgstr "작업 지시서" #: build/models.py:181 msgid "Assembly BOM has not been validated" -msgstr "" +msgstr "조립품 BOM이 검증되지 않았습니다" #: build/models.py:188 msgid "Build order cannot be created for an inactive part" -msgstr "" +msgstr "비활성 부품에 대해서는 작업 지시서를 생성할 수 없습니다" #: build/models.py:195 msgid "Build order cannot be created for an unlocked part" -msgstr "" +msgstr "잠금 해제된 부품에 대해서는 작업 지시서를 생성할 수 없습니다" #: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" -msgstr "" +msgstr "외부 이행은 구매 가능한 부품에 대해서만 가능합니다" #: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "담당 사용자 또는 그룹을 지정해야 합니다" #: build/models.py:225 msgid "Build order part cannot be changed" -msgstr "" +msgstr "작업 지시서 부품은 변경할 수 없습니다" #: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" -msgstr "" +msgstr "목표일은 시작일 이후여야 합니다" #: build/models.py:258 msgid "Build Order Reference" -msgstr "" +msgstr "작업 지시서 참조번호" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 @@ -791,194 +791,194 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:26 #: report/templates/report/inventree_sales_order_report.html:28 msgid "Reference" -msgstr "" +msgstr "참조" #: build/models.py:268 msgid "Brief description of the build (optional)" -msgstr "" +msgstr "빌드에 대한 간단한 설명 (선택 사항)" #: build/models.py:278 msgid "Build Order to which this build is allocated" -msgstr "" +msgstr "이 빌드가 할당된 작업 지시서" #: build/models.py:287 msgid "Select part to build" -msgstr "" +msgstr "빌드할 부품을 선택하세요" #: build/models.py:292 msgid "Sales Order Reference" -msgstr "" +msgstr "판매 주문 참조" #: build/models.py:297 msgid "Sales Order to which this build is allocated" -msgstr "" +msgstr "이 빌드가 할당된 판매 주문" #: build/models.py:302 build/serializers.py:1092 msgid "Source Location" -msgstr "" +msgstr "원본 위치" #: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" +msgstr "이 빌드에 사용할 재고를 가져올 위치를 선택하세요 (비워두면 어떤 재고 위치에서든 가져옵니다)" #: build/models.py:314 msgid "External Build" -msgstr "" +msgstr "외주 생산" #: build/models.py:315 msgid "This build order is fulfilled externally" -msgstr "" +msgstr "이 작업 지시서는 외주로 생산됩니다" #: build/models.py:320 msgid "Destination Location" -msgstr "" +msgstr "대상 위치" #: build/models.py:325 msgid "Select location where the completed items will be stored" -msgstr "" +msgstr "완료된 항목이 보관될 위치를 선택하세요" #: build/models.py:329 msgid "Build Quantity" -msgstr "" +msgstr "빌드 수량" #: build/models.py:332 msgid "Number of stock items to build" -msgstr "" +msgstr "빌드할 재고 항목 수" #: build/models.py:336 msgid "Completed items" -msgstr "" +msgstr "완료된 항목" #: build/models.py:338 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "완료된 재고 항목 수" #: build/models.py:342 msgid "Build Status" -msgstr "" +msgstr "빌드 상태" #: build/models.py:347 msgid "Build status code" -msgstr "" +msgstr "빌드 상태 코드" #: build/models.py:356 build/serializers.py:354 order/serializers.py:861 #: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" -msgstr "" +msgstr "배치 코드" #: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" -msgstr "" +msgstr "이 빌드 산출물의 배치 코드" #: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" -msgstr "" +msgstr "생성일" #: build/models.py:370 msgid "Build start date" -msgstr "" +msgstr "빌드 시작일" #: build/models.py:371 msgid "Scheduled start date for this build order" -msgstr "" +msgstr "이 작업 지시서의 예정 시작일" #: build/models.py:377 msgid "Target completion date" -msgstr "" +msgstr "목표 완료일" #: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "빌드 완료 목표일. 이 날짜 이후에는 빌드가 지연으로 처리됩니다." #: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" -msgstr "" +msgstr "완료일" #: build/models.py:392 msgid "completed by" -msgstr "" +msgstr "완료자" #: build/models.py:401 msgid "Issued by" -msgstr "" +msgstr "발행자" #: build/models.py:402 msgid "User who issued this build order" -msgstr "" +msgstr "이 작업 지시서를 발행한 사용자" #: build/models.py:411 common/models.py:187 order/api.py:182 #: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" -msgstr "" +msgstr "담당" #: build/models.py:412 msgid "User or group responsible for this build order" -msgstr "" +msgstr "이 작업 지시서를 담당하는 사용자 또는 그룹" #: build/models.py:417 stock/models.py:1100 msgid "External Link" -msgstr "" +msgstr "외부 링크" #: build/models.py:419 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" -msgstr "" +msgstr "외부 URL로 연결" #: build/models.py:424 msgid "Build Priority" -msgstr "" +msgstr "빌드 우선순위" #: build/models.py:427 msgid "Priority of this build order" -msgstr "" +msgstr "이 빌드 주문의 우선순위" #: build/models.py:435 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" -msgstr "" +msgstr "프로젝트 코드" #: build/models.py:436 msgid "Project code for this build order" -msgstr "" +msgstr "이 빌드 주문의 프로젝트 코드" #: build/models.py:689 msgid "Cannot complete build order with open child builds" -msgstr "" +msgstr "진행 중인 하위 빌드가 있는 상태에서는 작업 지시서를 완료할 수 없습니다" #: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" -msgstr "" +msgstr "미완료 산출물이 있는 상태에서는 작업 지시서를 완료할 수 없습니다" #: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" -msgstr "" +msgstr "빌드 자재 할당 완료 처리를 위한 작업 실행에 실패했습니다" #: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "작업 지시서 {build}이(가) 완료되었습니다" #: build/models.py:742 msgid "A build order has been completed" -msgstr "" +msgstr "작업 지시서가 완료되었습니다" #: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" -msgstr "" +msgstr "추적 가능한 부품에는 시리얼 번호를 제공해야 합니다" #: build/models.py:1016 build/models.py:1103 msgid "No build output specified" -msgstr "" +msgstr "생산 완제품이 지정되지 않았습니다" #: build/models.py:1019 msgid "Build output is already completed" -msgstr "" +msgstr "생산 완제품이 이미 완료되었습니다" #: build/models.py:1022 msgid "Build output does not match Build Order" -msgstr "" +msgstr "생산 완제품이 작업 지시서와 일치하지 않습니다" #: build/models.py:1110 build/models.py:1216 build/serializers.py:280 #: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 @@ -986,36 +986,36 @@ msgstr "" #: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 #: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "수량은 0보다 커야 합니다" #: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" -msgstr "" +msgstr "수량은 산출물 수량보다 클 수 없습니다" #: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" -msgstr "" +msgstr "생산 완제품이 모든 필수 테스트를 통과하지 못했습니다" #: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" +msgstr "생산 완제품 {serial}이(가) 모든 필수 테스트를 통과하지 못했습니다" #: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "할당된 재고 항목이 아직 생산 중입니다" #: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "할당된 항목이 있는 빌드 산출물은 부분 완료할 수 없습니다" #: build/models.py:1740 msgid "Build Order Line Item" -msgstr "" +msgstr "소요 자재 품목" #: build/models.py:1765 msgid "Build object" -msgstr "" +msgstr "빌드 객체" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 @@ -1040,36 +1040,36 @@ msgstr "수량" #: build/models.py:1778 msgid "Required quantity for build order" -msgstr "" +msgstr "작업 지시서에 필요한 수량" #: build/models.py:1787 msgid "Quantity of consumed stock" -msgstr "" +msgstr "소모된 재고 수량" #: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "마스터 부품이 추적 가능으로 표시되어 있으므로, 빌드 항목은 생산 완제품을 지정해야 합니다" #: build/models.py:1951 msgid "Selected stock item does not match BOM line" -msgstr "" +msgstr "선택한 재고 항목이 BOM 라인과 일치하지 않습니다" #: build/models.py:1970 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "할당 수량은 0보다 커야 합니다" #: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "시리얼이 있는 재고의 수량은 1이어야 합니다" #: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" +msgstr "할당 수량({q})은 사용 가능한 재고 수량({a})을 초과할 수 없습니다" #: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" -msgstr "" +msgstr "재고 항목이 과다 할당되었습니다" #: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 #: order/serializers.py:1620 order/serializers.py:1641 @@ -1077,63 +1077,63 @@ msgstr "" #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" -msgstr "" +msgstr "재고 항목" #: build/models.py:2093 msgid "Source stock item" -msgstr "" +msgstr "원본 재고 항목" #: build/models.py:2103 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "빌드에 할당할 재고 수량" #: build/models.py:2112 msgid "Install into" -msgstr "" +msgstr "설치 대상" #: build/models.py:2113 msgid "Destination stock item" -msgstr "" +msgstr "대상 재고 항목" #: build/serializers.py:115 msgid "Build Level" -msgstr "" +msgstr "빌드 레벨" #: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" -msgstr "" +msgstr "부품명" #: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" -msgstr "" +msgstr "빌드 산출물" #: build/serializers.py:226 msgid "Build output does not match the parent build" -msgstr "" +msgstr "빌드 산출물이 상위 빌드와 일치하지 않습니다" #: build/serializers.py:230 msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "산출물 부품이 빌드 주문 부품과 일치하지 않습니다" #: build/serializers.py:234 msgid "This build output has already been completed" -msgstr "" +msgstr "이 빌드 산출물은 이미 완료되었습니다" #: build/serializers.py:248 msgid "This build output is not fully allocated" -msgstr "" +msgstr "이 빌드 산출물은 완전히 할당되지 않았습니다" #: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" -msgstr "" +msgstr "빌드 산출물 수량을 입력하세요" #: build/serializers.py:338 msgid "Integer quantity required for trackable parts" -msgstr "" +msgstr "추적 가능한 부품에는 정수 수량이 필요합니다" #: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" +msgstr "BOM에 추적 가능한 부품이 포함되어 있으므로 정수 수량이 필요합니다" #: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 #: stock/serializers.py:728 @@ -1142,477 +1142,477 @@ msgstr "시리얼 번호 (일련번호)" #: build/serializers.py:362 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "빌드 산출물의 시리얼 번호를 입력하세요" #: build/serializers.py:368 msgid "Stock location for build output" -msgstr "" +msgstr "빌드 산출물의 재고 위치" #: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" -msgstr "" +msgstr "시리얼 번호 자동 할당" #: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" -msgstr "" +msgstr "일치하는 시리얼 번호로 필요한 항목을 자동으로 할당합니다" #: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" -msgstr "" +msgstr "다음 시리얼 번호는 이미 존재하거나 유효하지 않습니다" #: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" -msgstr "" +msgstr "빌드 산출물 목록을 제공해야 합니다" #: build/serializers.py:493 msgid "Stock location for scrapped outputs" -msgstr "" +msgstr "폐기된 산출물의 재고 위치" #: build/serializers.py:499 msgid "Discard Allocations" -msgstr "" +msgstr "할당 폐기" #: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" -msgstr "" +msgstr "폐기된 산출물에 대한 모든 재고 할당을 폐기합니다" #: build/serializers.py:505 msgid "Reason for scrapping build output(s)" -msgstr "" +msgstr "빌드 산출물 폐기 사유" #: build/serializers.py:563 msgid "Location for completed build outputs" -msgstr "" +msgstr "완료된 빌드 산출물의 위치" #: build/serializers.py:571 msgid "Accept Incomplete Allocation" -msgstr "" +msgstr "불완전한 할당 허용" #: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" -msgstr "" +msgstr "재고가 완전히 할당되지 않았더라도 산출물을 완료합니다" #: build/serializers.py:697 msgid "Consume Allocated Stock" -msgstr "" +msgstr "할당된 재고 소모" #: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" -msgstr "" +msgstr "이 빌드에 이미 할당된 모든 재고를 소모합니다" #: build/serializers.py:704 msgid "Remove Incomplete Outputs" -msgstr "" +msgstr "미완료 산출물 제거" #: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" -msgstr "" +msgstr "완료되지 않은 모든 빌드 산출물을 삭제합니다" #: build/serializers.py:732 msgid "Not permitted" -msgstr "" +msgstr "허용되지 않음" #: build/serializers.py:733 msgid "Accept as consumed by this build order" -msgstr "" +msgstr "이 빌드 주문에 의해 소모된 것으로 수락" #: build/serializers.py:734 msgid "Deallocate before completing this build order" -msgstr "" +msgstr "이 빌드 주문을 완료하기 전에 할당을 해제하세요" #: build/serializers.py:761 msgid "Overallocated Stock" -msgstr "" +msgstr "과다 할당된 재고" #: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" +msgstr "빌드 주문에 추가로 할당된 재고 항목을 어떻게 처리하시겠습니까" #: build/serializers.py:775 msgid "Some stock items have been overallocated" -msgstr "" +msgstr "일부 재고 항목이 과다 할당되었습니다" #: build/serializers.py:780 msgid "Accept Unallocated" -msgstr "" +msgstr "미할당 수락" #: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" +msgstr "재고 항목이 이 빌드 주문에 완전히 할당되지 않았음을 수락합니다" #: build/serializers.py:793 msgid "Required stock has not been fully allocated" -msgstr "" +msgstr "필요한 재고가 완전히 할당되지 않았습니다" #: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" -msgstr "" +msgstr "불완전 수락" #: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" -msgstr "" +msgstr "필요한 개수의 빌드 산출물이 완료되지 않았음을 수락합니다" #: build/serializers.py:811 msgid "Required build quantity has not been completed" -msgstr "" +msgstr "필요한 빌드 수량이 완료되지 않았습니다" #: build/serializers.py:823 msgid "Build order has open child build orders" -msgstr "" +msgstr "작업 지시서에 진행 중인 하위 작업 지시서가 있습니다" #: build/serializers.py:826 msgid "Build order must be in production state" -msgstr "" +msgstr "작업 지시서는 생산 상태여야 합니다" #: build/serializers.py:829 msgid "Build order has incomplete outputs" -msgstr "" +msgstr "작업 지시서에 미완료 산출물이 있습니다" #: build/serializers.py:868 msgid "Build Line" -msgstr "" +msgstr "빌드 라인" #: build/serializers.py:876 msgid "Build output" -msgstr "" +msgstr "생산 완제품" #: build/serializers.py:884 msgid "Build output must point to the same build" -msgstr "" +msgstr "생산 완제품은 동일한 빌드를 가리켜야 합니다" #: build/serializers.py:915 msgid "Build Line Item" -msgstr "" +msgstr "빌드 라인 항목" #: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" -msgstr "" +msgstr "bom_item.part는 빌드 주문과 동일한 부품을 가리켜야 합니다" #: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" -msgstr "" +msgstr "항목은 재고에 있어야 합니다" #: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "" +msgstr "사용 가능한 수량({q})을 초과했습니다" #: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" -msgstr "" +msgstr "추적 부품을 할당하려면 생산 완제품을 지정해야 합니다" #: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" +msgstr "비추적 부품 할당에는 생산 완제품을 지정할 수 없습니다" #: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" -msgstr "" +msgstr "할당 항목을 제공해야 합니다" #: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" +msgstr "부품을 공급할 재고 위치 (비워두면 어떤 위치에서든 가져옵니다)" #: build/serializers.py:1103 msgid "Exclude Location" -msgstr "" +msgstr "위치 제외" #: build/serializers.py:1104 msgid "Exclude stock items from this selected location" -msgstr "" +msgstr "선택한 위치의 재고 항목을 제외합니다" #: build/serializers.py:1109 msgid "Interchangeable Stock" -msgstr "" +msgstr "상호 대체 가능한 재고" #: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" +msgstr "여러 위치에 있는 재고 품목을 서로 대체하여 사용할 수 있습니다" #: build/serializers.py:1115 msgid "Substitute Stock" -msgstr "" +msgstr "대체 재고" #: build/serializers.py:1116 msgid "Allow allocation of substitute parts" -msgstr "" +msgstr "대체 부품 할당을 허용합니다" #: build/serializers.py:1121 msgid "Optional Items" -msgstr "" +msgstr "선택 항목" #: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" -msgstr "" +msgstr "빌드 주문에 선택 BOM 항목을 할당합니다" #: build/serializers.py:1128 msgid "All Items" -msgstr "" +msgstr "모든 항목" #: build/serializers.py:1129 msgid "Untracked Items" -msgstr "" +msgstr "비추적 항목" #: build/serializers.py:1130 msgid "Tracked Items" -msgstr "" +msgstr "추적 항목" #: build/serializers.py:1132 msgid "Item Type" -msgstr "" +msgstr "항목 유형" #: build/serializers.py:1133 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "자동 할당할 항목 유형을 선택하세요" #: build/serializers.py:1187 msgid "BOM Reference" -msgstr "" +msgstr "BOM 참조" #: build/serializers.py:1193 msgid "BOM Part ID" -msgstr "" +msgstr "BOM 부품 ID" #: build/serializers.py:1200 msgid "BOM Part Name" -msgstr "" +msgstr "BOM 부품명" #: build/serializers.py:1252 msgid "Install Into" -msgstr "" +msgstr "설치 대상" #: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" -msgstr "" +msgstr "빌드" #: build/serializers.py:1301 company/models.py:638 order/api.py:322 #: order/api.py:327 order/api.py:554 order/serializers.py:623 #: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" -msgstr "" +msgstr "공급업체 부품" #: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" -msgstr "" +msgstr "할당 수량" #: build/serializers.py:1384 msgid "Build Reference" -msgstr "" +msgstr "빌드 참조" #: build/serializers.py:1394 msgid "Part Category Name" -msgstr "" +msgstr "부품 카테고리 이름" #: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" -msgstr "" +msgstr "추적 가능" #: build/serializers.py:1435 msgid "Inherited" -msgstr "" +msgstr "상속됨" #: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" -msgstr "" +msgstr "변형(Variant) 허용" #: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" -msgstr "" +msgstr "BOM 항목" #: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 #: part/serializers.py:1796 msgid "In Production" -msgstr "" +msgstr "생산 중" #: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" -msgstr "" +msgstr "빌드 예정" #: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" -msgstr "" +msgstr "외부 재고" #: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" -msgstr "" +msgstr "사용 가능 재고" #: build/serializers.py:1536 msgid "Available Substitute Stock" -msgstr "" +msgstr "사용 가능 대체 재고" #: build/serializers.py:1539 msgid "Available Variant Stock" -msgstr "" +msgstr "사용 가능 변형(Variant) 재고" #: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" -msgstr "" +msgstr "소모 수량이 할당 수량을 초과합니다" #: build/serializers.py:1789 msgid "Optional notes for the stock consumption" -msgstr "" +msgstr "재고 소모에 대한 선택 메모" #: build/serializers.py:1806 msgid "Build item must point to the correct build order" -msgstr "" +msgstr "빌드 항목은 올바른 빌드 주문을 가리켜야 합니다" #: build/serializers.py:1811 msgid "Duplicate build item allocation" -msgstr "" +msgstr "빌드 항목 할당이 중복되었습니다" #: build/serializers.py:1829 msgid "Build line must point to the correct build order" -msgstr "" +msgstr "빌드 라인은 올바른 빌드 주문을 가리켜야 합니다" #: build/serializers.py:1834 msgid "Duplicate build line allocation" -msgstr "" +msgstr "빌드 라인 할당이 중복되었습니다" #: build/serializers.py:1846 msgid "At least one item or line must be provided" -msgstr "" +msgstr "최소 하나의 항목 또는 라인을 제공해야 합니다" #: build/status_codes.py:11 generic/states/tests.py:21 #: generic/states/tests.py:131 order/status_codes.py:12 #: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102 msgid "Pending" -msgstr "" +msgstr "대기 중" #: build/status_codes.py:12 msgid "Production" -msgstr "" +msgstr "생산" #: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51 #: order/status_codes.py:81 msgid "On Hold" -msgstr "" +msgstr "보류" #: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53 #: order/status_codes.py:84 msgid "Cancelled" -msgstr "" +msgstr "취소됨" #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" -msgstr "" +msgstr "완료" #: build/tasks.py:218 msgid "Stock required for build order" -msgstr "" +msgstr "빌드 주문에 재고가 필요합니다" #: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" -msgstr "" +msgstr "빌드 주문 {build}에 추가 재고가 필요합니다" #: build/tasks.py:252 msgid "Overdue Build Order" -msgstr "" +msgstr "기한 초과 빌드 주문" #: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "" +msgstr "빌드 주문 {bo}이(가) 기한을 초과했습니다" #: common/api.py:722 msgid "Is Link" -msgstr "" +msgstr "링크 여부" #: common/api.py:730 msgid "Is File" -msgstr "" +msgstr "파일 여부" #: common/api.py:777 msgid "User does not have permission to delete these attachments" -msgstr "" +msgstr "사용자에게 이 첨부파일들을 삭제할 권한이 없습니다" #: common/api.py:790 msgid "User does not have permission to delete this attachment" -msgstr "" +msgstr "사용자에게 이 첨부파일을 삭제할 권한이 없습니다" #: common/currency.py:135 msgid "Invalid currency code" -msgstr "" +msgstr "유효하지 않은 통화 코드" #: common/currency.py:137 msgid "Duplicate currency code" -msgstr "" +msgstr "중복된 통화 코드" #: common/currency.py:142 msgid "No valid currency codes provided" -msgstr "" +msgstr "유효한 통화 코드가 제공되지 않았습니다" #: common/currency.py:159 msgid "No plugin" -msgstr "" +msgstr "플러그인 없음" #: common/filters.py:359 msgid "Project Code Label" -msgstr "" +msgstr "프로젝트 코드 라벨" #: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" -msgstr "" +msgstr "업데이트됨" #: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" -msgstr "" +msgstr "마지막 업데이트 타임스탬프" #: common/models.py:144 msgid "Update By" -msgstr "" +msgstr "업데이트 사용자" #: common/models.py:145 msgid "User who last updated this object" -msgstr "" +msgstr "이 객체를 마지막으로 업데이트한 사용자" #: common/models.py:172 msgid "Unique project code" -msgstr "" +msgstr "고유 프로젝트 코드" #: common/models.py:179 msgid "Project description" -msgstr "" +msgstr "프로젝트 설명" #: common/models.py:188 msgid "User or group responsible for this project" -msgstr "" +msgstr "이 프로젝트의 담당 사용자 또는 그룹" #: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" -msgstr "" +msgstr "설정 키" #: common/models.py:788 msgid "Settings value" -msgstr "" +msgstr "설정 값" #: common/models.py:843 msgid "Chosen value is not a valid option" -msgstr "" +msgstr "선택한 값이 유효한 옵션이 아닙니다" #: common/models.py:859 msgid "Value must be a boolean value" -msgstr "" +msgstr "값은 불리언(Boolean)이어야 합니다" #: common/models.py:867 msgid "Value must be an integer value" -msgstr "" +msgstr "값은 정수여야 합니다" #: common/models.py:875 msgid "Value must be a valid number" -msgstr "" +msgstr "값은 유효한 숫자여야 합니다" #: common/models.py:900 msgid "Value does not pass validation checks" -msgstr "" +msgstr "값이 유효성 검사 기준을 통과하지 못했습니다" #: common/models.py:922 msgid "Key string must be unique" -msgstr "" +msgstr "키 문자열은 고유해야 합니다" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 @@ -1622,111 +1622,111 @@ msgstr "" #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" -msgstr "" +msgstr "사용자" #: common/models.py:1369 msgid "Price break quantity" -msgstr "" +msgstr "가격 구간 수량" #: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" -msgstr "" +msgstr "가격" #: common/models.py:1377 msgid "Unit price at specified quantity" -msgstr "" +msgstr "지정 수량에서의 단가" #: common/models.py:1428 common/models.py:1613 msgid "Endpoint" -msgstr "" +msgstr "엔드포인트" #: common/models.py:1429 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "이 웹훅을 수신하는 엔드포인트" #: common/models.py:1439 msgid "Name for this webhook" -msgstr "" +msgstr "이 웹훅의 이름" #: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 #: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" -msgstr "" +msgstr "활성" #: common/models.py:1443 msgid "Is this webhook active" -msgstr "" +msgstr "이 웹훅이 활성 상태인가요" #: common/models.py:1459 users/models.py:172 msgid "Token" -msgstr "" +msgstr "토큰" #: common/models.py:1460 msgid "Token for access" -msgstr "" +msgstr "접근용 토큰" #: common/models.py:1468 msgid "Secret" -msgstr "" +msgstr "시크릿" #: common/models.py:1469 msgid "Shared secret for HMAC" -msgstr "" +msgstr "HMAC용 공유 시크릿" #: common/models.py:1577 common/models.py:3094 msgid "Message ID" -msgstr "" +msgstr "메시지 ID" #: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" -msgstr "" +msgstr "이 메시지의 고유 식별자" #: common/models.py:1586 msgid "Host" -msgstr "" +msgstr "호스트" #: common/models.py:1587 msgid "Host from which this message was received" -msgstr "" +msgstr "이 메시지를 수신한 호스트" #: common/models.py:1595 msgid "Header" -msgstr "" +msgstr "헤더" #: common/models.py:1596 msgid "Header of this message" -msgstr "" +msgstr "이 메시지의 헤더" #: common/models.py:1603 msgid "Body" -msgstr "" +msgstr "본문" #: common/models.py:1604 msgid "Body of this message" -msgstr "" +msgstr "이 메시지의 본문" #: common/models.py:1614 msgid "Endpoint on which this message was received" -msgstr "" +msgstr "이 메시지를 수신한 엔드포인트" #: common/models.py:1619 msgid "Worked on" -msgstr "" +msgstr "처리됨" #: common/models.py:1620 msgid "Was the work on this message finished?" -msgstr "" +msgstr "이 메시지 처리가 완료되었나요?" #: common/models.py:1746 msgid "Id" -msgstr "" +msgstr "ID" #: common/models.py:1748 msgid "Title" -msgstr "" +msgstr "제목" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 @@ -1734,427 +1734,427 @@ msgstr "" #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" -msgstr "" +msgstr "링크" #: common/models.py:1752 msgid "Published" -msgstr "" +msgstr "게시됨" #: common/models.py:1754 msgid "Author" -msgstr "" +msgstr "작성자" #: common/models.py:1756 msgid "Summary" -msgstr "" +msgstr "요약" #: common/models.py:1759 common/models.py:3061 msgid "Read" -msgstr "" +msgstr "읽음" #: common/models.py:1759 msgid "Was this news item read?" -msgstr "" +msgstr "이 뉴스 항목을 읽었나요?" #: common/models.py:1776 msgid "Image file" -msgstr "" +msgstr "이미지 파일" #: common/models.py:1788 msgid "Target model type for this image" -msgstr "" +msgstr "이 이미지의 대상 모델 유형" #: common/models.py:1792 msgid "Target model ID for this image" -msgstr "" +msgstr "이 이미지의 대상 모델 ID" #: common/models.py:1814 msgid "Custom Unit" -msgstr "" +msgstr "사용자 정의 단위" #: common/models.py:1832 msgid "Unit symbol must be unique" -msgstr "" +msgstr "단위 기호는 고유해야 합니다" #: common/models.py:1847 msgid "Unit name must be a valid identifier" -msgstr "" +msgstr "단위 이름은 유효한 식별자여야 합니다" #: common/models.py:1866 msgid "Unit name" -msgstr "" +msgstr "단위 이름" #: common/models.py:1873 msgid "Symbol" -msgstr "" +msgstr "기호" #: common/models.py:1874 msgid "Optional unit symbol" -msgstr "" +msgstr "선택 단위 기호" #: common/models.py:1880 msgid "Definition" -msgstr "" +msgstr "정의" #: common/models.py:1881 msgid "Unit definition" -msgstr "" +msgstr "단위 정의" #: common/models.py:1941 common/models.py:2004 stock/models.py:3073 #: stock/serializers.py:258 msgid "Attachment" -msgstr "" +msgstr "첨부파일" #: common/models.py:1958 msgid "Missing file" -msgstr "" +msgstr "파일 누락" #: common/models.py:1959 msgid "Missing external link" -msgstr "" +msgstr "외부 링크 누락" #: common/models.py:1996 common/models.py:2542 msgid "Model type" -msgstr "" +msgstr "모델 유형" #: common/models.py:1997 msgid "Target model type for image" -msgstr "" +msgstr "이미지의 대상 모델 유형" #: common/models.py:2005 msgid "Select file to attach" -msgstr "" +msgstr "첨부할 파일을 선택하세요" #: common/models.py:2021 msgid "Comment" -msgstr "" +msgstr "댓글" #: common/models.py:2022 msgid "Attachment comment" -msgstr "" +msgstr "첨부파일 댓글" #: common/models.py:2038 msgid "Upload date" -msgstr "" +msgstr "업로드 날짜" #: common/models.py:2039 msgid "Date the file was uploaded" -msgstr "" +msgstr "파일이 업로드된 날짜" #: common/models.py:2043 msgid "File size" -msgstr "" +msgstr "파일 크기" #: common/models.py:2043 msgid "File size in bytes" -msgstr "" +msgstr "바이트 단위의 파일 크기" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" -msgstr "" +msgstr "첨부파일에 대해 유효하지 않은 모델 유형이 지정되었습니다" #: common/models.py:2102 msgid "Custom State" -msgstr "" +msgstr "사용자 정의 상태" #: common/models.py:2103 msgid "Custom States" -msgstr "" +msgstr "사용자 정의 상태" #: common/models.py:2108 msgid "Reference Status Set" -msgstr "" +msgstr "참조 상태 세트" #: common/models.py:2109 msgid "Status set that is extended with this custom state" -msgstr "" +msgstr "이 사용자 정의 상태로 확장되는 상태 세트" #: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" -msgstr "" +msgstr "논리 키" #: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" -msgstr "" +msgstr "업무 로직에서 이 사용자 정의 상태와 동일한 상태 논리 키" #: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" -msgstr "" +msgstr "값" #: common/models.py:2121 msgid "Numerical value that will be saved in the models database" -msgstr "" +msgstr "모델 데이터베이스에 저장될 숫자 값" #: common/models.py:2127 msgid "Name of the state" -msgstr "" +msgstr "상태 이름" #: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" -msgstr "" +msgstr "라벨" #: common/models.py:2137 msgid "Label that will be displayed in the frontend" -msgstr "" +msgstr "프론트엔드에 표시될 라벨" #: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" -msgstr "" +msgstr "색상" #: common/models.py:2145 msgid "Color that will be displayed in the frontend" -msgstr "" +msgstr "프론트엔드에 표시될 색상" #: common/models.py:2153 msgid "Model" -msgstr "" +msgstr "모델" #: common/models.py:2154 msgid "Model this state is associated with" -msgstr "" +msgstr "이 상태가 연결된 모델" #: common/models.py:2169 msgid "Model must be selected" -msgstr "" +msgstr "모델을 선택해야 합니다" #: common/models.py:2172 msgid "Key must be selected" -msgstr "" +msgstr "키를 선택해야 합니다" #: common/models.py:2175 msgid "Logical key must be selected" -msgstr "" +msgstr "논리 키를 선택해야 합니다" #: common/models.py:2179 msgid "Key must be different from logical key" -msgstr "" +msgstr "키는 논리 키와 달라야 합니다" #: common/models.py:2186 msgid "Valid reference status class must be provided" -msgstr "" +msgstr "유효한 참조 상태 클래스가 제공되어야 합니다" #: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" -msgstr "" +msgstr "키는 참조 상태의 논리 키들과 달라야 합니다" #: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" -msgstr "" +msgstr "논리 키는 참조 상태의 논리 키 목록에 포함되어야 합니다" #: common/models.py:2206 msgid "Name must be different from the names of the reference status" -msgstr "" +msgstr "이름은 참조 상태의 이름들과 달라야 합니다" #: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" -msgstr "" +msgstr "선택 목록" #: common/models.py:2247 msgid "Selection Lists" -msgstr "" +msgstr "선택 목록" #: common/models.py:2252 msgid "Name of the selection list" -msgstr "" +msgstr "선택 목록 이름" #: common/models.py:2259 msgid "Description of the selection list" -msgstr "" +msgstr "선택 목록 설명" #: common/models.py:2265 part/models.py:1287 msgid "Locked" -msgstr "" +msgstr "잠김" #: common/models.py:2266 msgid "Is this selection list locked?" -msgstr "" +msgstr "이 선택 목록이 잠겨 있나요?" #: common/models.py:2272 msgid "Can this selection list be used?" -msgstr "" +msgstr "이 선택 목록을 사용할 수 있나요?" #: common/models.py:2280 msgid "Source Plugin" -msgstr "" +msgstr "소스 플러그인" #: common/models.py:2281 msgid "Plugin which provides the selection list" -msgstr "" +msgstr "선택 목록을 제공하는 플러그인" #: common/models.py:2286 msgid "Source String" -msgstr "" +msgstr "소스 문자열" #: common/models.py:2287 msgid "Optional string identifying the source used for this list" -msgstr "" +msgstr "이 목록에 사용된 소스를 식별하는 선택 문자열" #: common/models.py:2296 msgid "Default Entry" -msgstr "" +msgstr "기본 항목" #: common/models.py:2297 msgid "Default entry for this selection list" -msgstr "" +msgstr "이 선택 목록의 기본 항목" #: common/models.py:2302 common/models.py:3199 msgid "Created" -msgstr "" +msgstr "생성됨" #: common/models.py:2303 msgid "Date and time that the selection list was created" -msgstr "" +msgstr "선택 목록이 생성된 날짜 및 시간" #: common/models.py:2308 msgid "Last Updated" -msgstr "" +msgstr "마지막 업데이트" #: common/models.py:2309 msgid "Date and time that the selection list was last updated" -msgstr "" +msgstr "선택 목록이 마지막으로 업데이트된 날짜 및 시간" #: common/models.py:2371 msgid "Selection List Entry" -msgstr "" +msgstr "선택 목록 항목" #: common/models.py:2372 msgid "Selection List Entries" -msgstr "" +msgstr "선택 목록 항목" #: common/models.py:2382 msgid "Selection list to which this entry belongs" -msgstr "" +msgstr "이 항목이 속한 선택 목록" #: common/models.py:2388 msgid "Value of the selection list entry" -msgstr "" +msgstr "선택 목록 항목의 값" #: common/models.py:2394 msgid "Label for the selection list entry" -msgstr "" +msgstr "선택 목록 항목 라벨" #: common/models.py:2400 msgid "Description of the selection list entry" -msgstr "" +msgstr "선택 목록 항목 설명" #: common/models.py:2407 msgid "Is this selection list entry active?" -msgstr "" +msgstr "이 선택 목록 항목이 활성 상태인가요?" #: common/models.py:2441 msgid "Parameter Template" -msgstr "" +msgstr "매개변수 템플릿" #: common/models.py:2442 msgid "Parameter Templates" -msgstr "" +msgstr "매개변수 템플릿" #: common/models.py:2479 msgid "Checkbox parameters cannot have units" -msgstr "" +msgstr "체크박스 매개변수에는 단위를 지정할 수 없습니다" #: common/models.py:2484 msgid "Checkbox parameters cannot have choices" -msgstr "" +msgstr "체크박스 매개변수에는 선택지를 지정할 수 없습니다" #: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" -msgstr "" +msgstr "선택지는 고유해야 합니다" #: common/models.py:2521 msgid "Parameter template name must be unique" -msgstr "" +msgstr "매개변수 템플릿 이름은 고유해야 합니다" #: common/models.py:2543 msgid "Target model type for this parameter template" -msgstr "" +msgstr "이 매개변수 템플릿의 대상 모델 유형" #: common/models.py:2549 msgid "Parameter Name" -msgstr "" +msgstr "매개변수 이름" #: common/models.py:2555 part/models.py:1240 msgid "Units" -msgstr "" +msgstr "단위" #: common/models.py:2556 msgid "Physical units for this parameter" -msgstr "" +msgstr "이 매개변수의 물리 단위" #: common/models.py:2564 msgid "Parameter description" -msgstr "" +msgstr "매개변수 설명" #: common/models.py:2570 msgid "Checkbox" -msgstr "" +msgstr "체크박스" #: common/models.py:2571 msgid "Is this parameter a checkbox?" -msgstr "" +msgstr "이 매개변수는 체크박스인가요?" #: common/models.py:2576 part/models.py:3754 msgid "Choices" -msgstr "" +msgstr "선택지" #: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" -msgstr "" +msgstr "이 매개변수에 대한 유효한 선택지(쉼표로 구분)" #: common/models.py:2588 msgid "Selection list for this parameter" -msgstr "" +msgstr "이 매개변수의 선택 목록" #: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" -msgstr "" +msgstr "사용" #: common/models.py:2594 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "이 매개변수 템플릿을 사용하나요?" #: common/models.py:2635 msgid "Parameter" -msgstr "" +msgstr "매개변수" #: common/models.py:2636 msgid "Parameters" -msgstr "" +msgstr "매개변수" #: common/models.py:2682 msgid "Invalid choice for parameter value" -msgstr "" +msgstr "매개변수 값에 대한 선택지가 올바르지 않습니다" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "매개변수에 지정된 모델 유형이 올바르지 않습니다" #: common/models.py:2788 msgid "Model ID" -msgstr "" +msgstr "모델 ID" #: common/models.py:2789 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "이 매개변수의 대상 모델 ID" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" -msgstr "" +msgstr "템플릿" #: common/models.py:2799 msgid "Parameter template" -msgstr "" +msgstr "매개변수 템플릿" #: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" -msgstr "" +msgstr "데이터" #: common/models.py:2805 msgid "Parameter Value" -msgstr "" +msgstr "매개변수 값" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 #: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 @@ -2165,441 +2165,441 @@ msgstr "" #: report/templates/report/inventree_stock_location_report.html:105 #: stock/serializers.py:842 msgid "Note" -msgstr "" +msgstr "메모" #: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" -msgstr "" +msgstr "선택적 메모 필드" #: common/models.py:2842 msgid "Barcode Scan" -msgstr "" +msgstr "바코드 스캔" #: common/models.py:2847 msgid "Barcode data" -msgstr "" +msgstr "바코드 데이터" #: common/models.py:2858 msgid "User who scanned the barcode" -msgstr "" +msgstr "바코드를 스캔한 사용자" #: common/models.py:2863 importer/models.py:70 msgid "Timestamp" -msgstr "" +msgstr "타임스탬프" #: common/models.py:2864 msgid "Date and time of the barcode scan" -msgstr "" +msgstr "바코드 스캔 날짜 및 시간" #: common/models.py:2870 msgid "URL endpoint which processed the barcode" -msgstr "" +msgstr "바코드를 처리한 URL 엔드포인트" #: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" -msgstr "" +msgstr "컨텍스트" #: common/models.py:2878 msgid "Context data for the barcode scan" -msgstr "" +msgstr "바코드 스캔의 컨텍스트 데이터" #: common/models.py:2885 msgid "Response" -msgstr "" +msgstr "응답" #: common/models.py:2886 msgid "Response data from the barcode scan" -msgstr "" +msgstr "바코드 스캔의 응답 데이터" #: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" -msgstr "" +msgstr "결과" #: common/models.py:2893 msgid "Was the barcode scan successful?" -msgstr "" +msgstr "바코드 스캔이 성공했나요?" #: common/models.py:2975 msgid "An error occurred" -msgstr "" +msgstr "오류가 발생했습니다" #: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." -msgstr "" +msgstr "INVE-E8: 이메일 로그 삭제가 보호되어 있습니다. 삭제를 허용하려면 INVENTREE_PROTECT_EMAIL_LOG를 False로 설정하세요." #: common/models.py:3043 msgid "Email Message" -msgstr "" +msgstr "이메일 메시지" #: common/models.py:3044 msgid "Email Messages" -msgstr "" +msgstr "이메일 메시지" #: common/models.py:3051 msgid "Announced" -msgstr "" +msgstr "공지됨" #: common/models.py:3053 msgid "Sent" -msgstr "" +msgstr "전송됨" #: common/models.py:3054 msgid "Failed" -msgstr "" +msgstr "실패" #: common/models.py:3057 msgid "Delivered" -msgstr "" +msgstr "전달됨" #: common/models.py:3065 msgid "Confirmed" -msgstr "" +msgstr "확인됨" #: common/models.py:3071 msgid "Inbound" -msgstr "" +msgstr "수신" #: common/models.py:3072 msgid "Outbound" -msgstr "" +msgstr "발신" #: common/models.py:3077 msgid "No Reply" -msgstr "" +msgstr "회신 없음" #: common/models.py:3078 msgid "Track Delivery" -msgstr "" +msgstr "전달 추적" #: common/models.py:3079 msgid "Track Read" -msgstr "" +msgstr "읽음 추적" #: common/models.py:3080 msgid "Track Click" -msgstr "" +msgstr "클릭 추적" #: common/models.py:3083 common/models.py:3186 msgid "Global ID" -msgstr "" +msgstr "전역 ID" #: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" -msgstr "" +msgstr "이 메시지의 식별자(외부 시스템에서 제공될 수 있음)" #: common/models.py:3103 msgid "Thread ID" -msgstr "" +msgstr "스레드 ID" #: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" -msgstr "" +msgstr "이 메시지 스레드의 식별자(외부 시스템에서 제공될 수 있음)" #: common/models.py:3114 msgid "Thread" -msgstr "" +msgstr "스레드" #: common/models.py:3115 msgid "Linked thread for this message" -msgstr "" +msgstr "이 메시지에 연결된 스레드" #: common/models.py:3131 msgid "Priority" -msgstr "" +msgstr "우선순위" #: common/models.py:3173 msgid "Email Thread" -msgstr "" +msgstr "이메일 스레드" #: common/models.py:3174 msgid "Email Threads" -msgstr "" +msgstr "이메일 스레드" #: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" -msgstr "" +msgstr "키" #: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" -msgstr "" +msgstr "이 스레드의 고유 키(스레드 식별에 사용)" #: common/models.py:3187 msgid "Unique identifier for this thread" -msgstr "" +msgstr "이 스레드의 고유 식별자" #: common/models.py:3194 msgid "Started Internal" -msgstr "" +msgstr "내부 시작" #: common/models.py:3195 msgid "Was this thread started internally?" -msgstr "" +msgstr "이 스레드는 내부에서 시작되었나요?" #: common/models.py:3200 msgid "Date and time that the thread was created" -msgstr "" +msgstr "스레드가 생성된 날짜 및 시간" #: common/models.py:3205 msgid "Date and time that the thread was last updated" -msgstr "" +msgstr "스레드가 마지막으로 업데이트된 날짜 및 시간" #: common/notifications.py:57 #, python-brace-format msgid "New {verbose_name}" -msgstr "" +msgstr "새 {verbose_name}" #: common/notifications.py:59 msgid "A new order has been created and assigned to you" -msgstr "" +msgstr "새 주문이 생성되어 귀하에게 할당되었습니다" #: common/notifications.py:65 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "" +msgstr "{verbose_name} 취소됨" #: common/notifications.py:67 msgid "A order that is assigned to you was canceled" -msgstr "" +msgstr "귀하에게 할당된 주문이 취소되었습니다" #: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" -msgstr "" +msgstr "항목 수령됨" #: common/notifications.py:75 msgid "Items have been received against a purchase order" -msgstr "" +msgstr "구매 주문에 대한 항목을 수령했습니다" #: common/notifications.py:82 msgid "Items have been received against a return order" -msgstr "" +msgstr "반품 주문에 대한 항목을 수령했습니다" #: common/serializers.py:125 msgid "Indicates if changing this setting requires confirmation" -msgstr "" +msgstr "이 설정 변경에 확인이 필요한지 여부를 나타냅니다" #: common/serializers.py:139 msgid "This setting requires confirmation before changing. Please confirm the change." -msgstr "" +msgstr "이 설정은 변경 전에 확인이 필요합니다. 변경을 확인해 주세요." #: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" -msgstr "" +msgstr "이 설정이 환경 변수로 재정의되었는지 여부를 나타냅니다" #: common/serializers.py:174 msgid "Override" -msgstr "" +msgstr "재정의" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" -msgstr "" +msgstr "실행 중" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" -msgstr "" +msgstr "대기 중인 작업" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" -msgstr "" +msgstr "예약된 작업" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" -msgstr "" +msgstr "실패한 작업" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" -msgstr "" +msgstr "작업 ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" -msgstr "" +msgstr "고유 작업 ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" -msgstr "" +msgstr "잠금" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" -msgstr "" +msgstr "잠금 시간" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" -msgstr "" +msgstr "작업 이름" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" -msgstr "" +msgstr "함수" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" -msgstr "" +msgstr "함수 이름" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" -msgstr "" +msgstr "인수" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" -msgstr "" +msgstr "작업 인수" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" -msgstr "" +msgstr "키워드 인수" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" -msgstr "" +msgstr "작업 키워드 인수" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" -msgstr "" +msgstr "파일명" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" -msgstr "" +msgstr "모델 유형" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" -msgstr "" +msgstr "이 모델의 첨부파일을 생성하거나 편집할 권한이 없습니다" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "이 모델의 매개변수를 생성하거나 편집할 권한이 없습니다" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" -msgstr "" +msgstr "선택 목록이 잠겨 있습니다" #: common/setting/system.py:97 msgid "No group" -msgstr "" +msgstr "그룹 없음" #: common/setting/system.py:170 msgid "Site URL is locked by configuration" -msgstr "" +msgstr "사이트 URL이 구성에 의해 잠겨 있습니다" #: common/setting/system.py:187 msgid "Restart required" -msgstr "" +msgstr "재시작 필요" #: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" -msgstr "" +msgstr "서버 재시작이 필요한 설정이 변경되었습니다" #: common/setting/system.py:194 msgid "Pending migrations" -msgstr "" +msgstr "대기 중인 마이그레이션" #: common/setting/system.py:195 msgid "Number of pending database migrations" -msgstr "" +msgstr "대기 중인 데이터베이스 마이그레이션 수" #: common/setting/system.py:200 msgid "Active warning codes" -msgstr "" +msgstr "활성 경고 코드" #: common/setting/system.py:201 msgid "A dict of active warning codes" -msgstr "" +msgstr "활성 경고 코드의 딕셔너리" #: common/setting/system.py:207 msgid "Instance ID" -msgstr "" +msgstr "인스턴스 ID" #: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" -msgstr "" +msgstr "이 InvenTree 인스턴스의 고유 식별자" #: common/setting/system.py:213 msgid "Announce ID" -msgstr "" +msgstr "ID 알림" #: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" -msgstr "" +msgstr "서버 상태 정보(인증 없음)에 서버 인스턴스 ID를 알립니다" #: common/setting/system.py:221 msgid "Server Instance Name" -msgstr "" +msgstr "서버 인스턴스 이름" #: common/setting/system.py:223 msgid "String descriptor for the server instance" -msgstr "" +msgstr "서버 인스턴스를 설명하는 문자열" #: common/setting/system.py:227 msgid "Use instance name" -msgstr "" +msgstr "인스턴스 이름 사용" #: common/setting/system.py:228 msgid "Use the instance name in the title-bar" -msgstr "" +msgstr "제목 표시줄에 인스턴스 이름을 사용합니다" #: common/setting/system.py:233 msgid "Restrict showing `about`" -msgstr "" +msgstr "`about` 표시 제한" #: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" -msgstr "" +msgstr "`about` 모달을 슈퍼유저에게만 표시합니다" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "슈퍼유저 배너 표시" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "슈퍼유저로 로그인했을 때 UI에 경고 배너를 표시합니다" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "관리자 배너 표시" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "관리자로 로그인했을 때 UI에 경고 배너를 표시합니다" #: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" -msgstr "" +msgstr "회사명" #: common/setting/system.py:252 msgid "Internal company name" -msgstr "" +msgstr "내부 회사명" #: common/setting/system.py:256 msgid "Base URL" -msgstr "" +msgstr "기본 URL" #: common/setting/system.py:257 msgid "Base URL for server instance" -msgstr "" +msgstr "서버 인스턴스의 기본 URL" #: common/setting/system.py:263 msgid "Default Currency" -msgstr "" +msgstr "기본 통화" #: common/setting/system.py:264 msgid "Select base currency for pricing calculations" -msgstr "" +msgstr "가격 계산에 사용할 기준 통화를 선택합니다" #: common/setting/system.py:270 msgid "Supported Currencies" -msgstr "" +msgstr "지원 통화" #: common/setting/system.py:271 msgid "List of supported currency codes" -msgstr "" +msgstr "지원하는 통화 코드 목록" #: common/setting/system.py:277 msgid "Currency Update Interval" -msgstr "" +msgstr "환율 업데이트 간격" #: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" -msgstr "" +msgstr "환율을 업데이트하는 주기(0으로 설정하면 비활성화)" #: common/setting/system.py:280 common/setting/system.py:320 #: common/setting/system.py:333 common/setting/system.py:341 @@ -2609,1638 +2609,1638 @@ msgstr "" #: common/setting/system.py:1143 common/setting/system.py:1159 #: common/setting/system.py:1176 msgid "days" -msgstr "" +msgstr "일" #: common/setting/system.py:284 msgid "Currency Update Plugin" -msgstr "" +msgstr "환율 업데이트 플러그인" #: common/setting/system.py:285 msgid "Currency update plugin to use" -msgstr "" +msgstr "사용할 환율 업데이트 플러그인" #: common/setting/system.py:290 msgid "Download from URL" -msgstr "" +msgstr "URL에서 다운로드" #: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" -msgstr "" +msgstr "외부 URL에서 원격 이미지 및 파일 다운로드를 허용합니다" #: common/setting/system.py:296 msgid "Download Size Limit" -msgstr "" +msgstr "다운로드 크기 제한" #: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" -msgstr "" +msgstr "원격 이미지의 최대 허용 다운로드 크기" #: common/setting/system.py:303 msgid "User-agent used to download from URL" -msgstr "" +msgstr "URL 다운로드에 사용할 User-Agent" #: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "" +msgstr "외부 URL에서 이미지 및 파일 다운로드에 사용되는 User-Agent를 재정의할 수 있습니다(비워두면 기본값)" #: common/setting/system.py:310 msgid "Strict URL Validation" -msgstr "" +msgstr "엄격한 URL 검증" #: common/setting/system.py:311 msgid "Require schema specification when validating URLs" -msgstr "" +msgstr "URL 검증 시 스키마 지정을 요구합니다" #: common/setting/system.py:316 msgid "Update Check Interval" -msgstr "" +msgstr "업데이트 확인 간격" #: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" -msgstr "" +msgstr "업데이트를 확인하는 주기(0으로 설정하면 비활성화)" #: common/setting/system.py:323 msgid "Automatic Backup" -msgstr "" +msgstr "자동 백업" #: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" -msgstr "" +msgstr "데이터베이스 및 미디어 파일의 자동 백업을 활성화합니다" #: common/setting/system.py:329 msgid "Auto Backup Interval" -msgstr "" +msgstr "자동 백업 간격" #: common/setting/system.py:330 msgid "Specify number of days between automated backup events" -msgstr "" +msgstr "자동 백업 이벤트 사이의 일 수를 지정합니다" #: common/setting/system.py:336 msgid "Task Deletion Interval" -msgstr "" +msgstr "작업 삭제 간격" #: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" -msgstr "" +msgstr "백그라운드 작업 결과는 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:345 msgid "Error Log Deletion Interval" -msgstr "" +msgstr "오류 로그 삭제 간격" #: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" -msgstr "" +msgstr "오류 로그는 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:352 msgid "Notification Deletion Interval" -msgstr "" +msgstr "알림 삭제 간격" #: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" -msgstr "" +msgstr "사용자 알림은 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:361 msgid "Email Deletion Interval" -msgstr "" +msgstr "이메일 삭제 간격" #: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" -msgstr "" +msgstr "이메일 메시지는 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:370 msgid "Protect Email Log" -msgstr "" +msgstr "이메일 로그 보호" #: common/setting/system.py:371 msgid "Prevent deletion of email log entries" -msgstr "" +msgstr "이메일 로그 항목 삭제를 방지합니다" #: common/setting/system.py:376 msgid "Barcode Support" -msgstr "" +msgstr "바코드 지원" #: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" -msgstr "" +msgstr "웹 인터페이스에서 바코드 스캐너 지원을 활성화합니다" #: common/setting/system.py:382 msgid "Store Barcode Results" -msgstr "" +msgstr "바코드 결과 저장" #: common/setting/system.py:383 msgid "Store barcode scan results in the database" -msgstr "" +msgstr "바코드 스캔 결과를 데이터베이스에 저장합니다" #: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" -msgstr "" +msgstr "바코드 스캔 최대 개수" #: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" -msgstr "" +msgstr "저장할 바코드 스캔 결과의 최대 개수" #: common/setting/system.py:394 msgid "Barcode Input Delay" -msgstr "" +msgstr "바코드 입력 지연" #: common/setting/system.py:395 msgid "Barcode input processing delay time" -msgstr "" +msgstr "바코드 입력 처리 지연 시간" #: common/setting/system.py:401 msgid "Barcode Webcam Support" -msgstr "" +msgstr "바코드 웹캠 지원" #: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" -msgstr "" +msgstr "브라우저에서 웹캠을 통한 바코드 스캔을 허용합니다" #: common/setting/system.py:407 msgid "Barcode Show Data" -msgstr "" +msgstr "바코드 데이터 표시" #: common/setting/system.py:408 msgid "Display barcode data in browser as text" -msgstr "" +msgstr "브라우저에 바코드 데이터를 텍스트로 표시합니다" #: common/setting/system.py:413 msgid "Barcode Generation Plugin" -msgstr "" +msgstr "바코드 생성 플러그인" #: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" -msgstr "" +msgstr "내부 바코드 데이터 생성에 사용할 플러그인" #: common/setting/system.py:419 msgid "Part Revisions" -msgstr "" +msgstr "부품 리비전" #: common/setting/system.py:420 msgid "Enable revision field for Part" -msgstr "" +msgstr "부품에 리비전 필드를 활성화합니다" #: common/setting/system.py:425 msgid "Assembly Revision Only" -msgstr "" +msgstr "조립품 리비전만" #: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" -msgstr "" +msgstr "조립 부품에만 리비전을 허용합니다" #: common/setting/system.py:431 msgid "Allow Deletion from Assembly" -msgstr "" +msgstr "조립품에서 삭제 허용" #: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" -msgstr "" +msgstr "조립품에 사용되는 부품의 삭제를 허용합니다" #: common/setting/system.py:437 msgid "IPN Regex" -msgstr "" +msgstr "IPN 정규식" #: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" -msgstr "" +msgstr "부품 IPN과 일치시키기 위한 정규식 패턴" #: common/setting/system.py:441 msgid "Allow Duplicate IPN" -msgstr "" +msgstr "IPN 중복 허용" #: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" -msgstr "" +msgstr "여러 부품이 동일한 IPN을 공유하도록 허용합니다" #: common/setting/system.py:447 msgid "Allow Editing IPN" -msgstr "" +msgstr "IPN 편집 허용" #: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" -msgstr "" +msgstr "부품 편집 중 IPN 값 변경을 허용합니다" #: common/setting/system.py:453 msgid "Copy Part BOM Data" -msgstr "" +msgstr "부품 BOM 데이터 복사" #: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" -msgstr "" +msgstr "부품을 복제할 때 기본으로 BOM 데이터를 복사합니다" #: common/setting/system.py:459 msgid "Copy Part Parameter Data" -msgstr "" +msgstr "부품 매개변수 데이터 복사" #: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" -msgstr "" +msgstr "부품을 복제할 때 기본으로 매개변수 데이터를 복사합니다" #: common/setting/system.py:465 msgid "Copy Part Test Data" -msgstr "" +msgstr "부품 테스트 데이터 복사" #: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" -msgstr "" +msgstr "부품을 복제할 때 기본으로 테스트 데이터를 복사합니다" #: common/setting/system.py:471 msgid "Copy Category Parameter Templates" -msgstr "" +msgstr "카테고리 매개변수 템플릿 복사" #: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" -msgstr "" +msgstr "부품을 생성할 때 카테고리 매개변수 템플릿을 복사합니다" #: common/setting/system.py:478 msgid "Parts are templates by default" -msgstr "" +msgstr "부품은 기본적으로 템플릿입니다" #: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" -msgstr "" +msgstr "부품은 기본적으로 다른 구성요소로 조립할 수 있습니다" #: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 #: part/serializers.py:1771 msgid "Component" -msgstr "" +msgstr "구성요소" #: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" -msgstr "" +msgstr "부품은 기본적으로 하위 구성요소로 사용할 수 있습니다" #: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" -msgstr "" +msgstr "구매 가능" #: common/setting/system.py:496 msgid "Parts are purchaseable by default" -msgstr "" +msgstr "부품은 기본적으로 구매 가능합니다" #: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" -msgstr "" +msgstr "판매 가능" #: common/setting/system.py:502 msgid "Parts are salable by default" -msgstr "" +msgstr "부품은 기본적으로 판매 가능합니다" #: common/setting/system.py:508 msgid "Parts are trackable by default" -msgstr "" +msgstr "부품은 기본적으로 추적 가능합니다" #: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" -msgstr "" +msgstr "가상" #: common/setting/system.py:514 msgid "Parts are virtual by default" -msgstr "" +msgstr "부품은 기본적으로 가상입니다" #: common/setting/system.py:519 msgid "Show related parts" -msgstr "" +msgstr "관련 부품 표시" #: common/setting/system.py:520 msgid "Display related parts for a part" -msgstr "" +msgstr "부품에 대한 관련 부품을 표시합니다" #: common/setting/system.py:525 msgid "Initial Stock Data" -msgstr "" +msgstr "초기 재고 데이터" #: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" -msgstr "" +msgstr "새 부품 추가 시 초기 재고 생성을 허용합니다" #: common/setting/system.py:531 msgid "Initial Supplier Data" -msgstr "" +msgstr "초기 공급업체 데이터" #: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" +msgstr "새 부품 추가 시 초기 공급업체 데이터 생성을 허용합니다" #: common/setting/system.py:539 msgid "Part Name Display Format" -msgstr "" +msgstr "부품명 표시 형식" #: common/setting/system.py:540 msgid "Format to display the part name" -msgstr "" +msgstr "부품명을 표시하는 형식" #: common/setting/system.py:546 msgid "Part Category Default Icon" -msgstr "" +msgstr "부품 카테고리 기본 아이콘" #: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" -msgstr "" +msgstr "부품 카테고리 기본 아이콘(비워두면 아이콘 없음)" #: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" -msgstr "" +msgstr "가격 최소 소수 자릿수" #: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "" +msgstr "가격 데이터를 표시할 때 최소 소수 자릿수" #: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" -msgstr "" +msgstr "가격 최대 소수 자릿수" #: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "" +msgstr "가격 데이터를 표시할 때 최대 소수 자릿수" #: common/setting/system.py:578 msgid "Use Supplier Pricing" -msgstr "" +msgstr "공급업체 가격 사용" #: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" +msgstr "전체 가격 계산에 공급업체 수량별 가격을 포함합니다" #: common/setting/system.py:586 msgid "Purchase History Override" -msgstr "" +msgstr "구매 이력 우선" #: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" +msgstr "과거 구매 주문 가격이 공급업체 수량별 가격보다 우선합니다" #: common/setting/system.py:594 msgid "Use Stock Item Pricing" -msgstr "" +msgstr "재고 항목 가격 사용" #: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" +msgstr "가격 계산에 수동으로 입력한 재고 데이터의 가격을 사용합니다" #: common/setting/system.py:602 msgid "Stock Item Pricing Age" -msgstr "" +msgstr "재고 항목 가격 유효 기간" #: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" +msgstr "가격 계산에서 지정한 일 수보다 오래된 재고 항목을 제외합니다" #: common/setting/system.py:611 msgid "Use Variant Pricing" -msgstr "" +msgstr "변형(Variant) 가격 사용" #: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" -msgstr "" +msgstr "전체 가격 계산에 변형(Variant) 가격을 포함합니다" #: common/setting/system.py:617 msgid "Active Variants Only" -msgstr "" +msgstr "활성 변형만" #: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" -msgstr "" +msgstr "변형(Variant) 가격 계산에 활성 변형 부품만 사용합니다" #: common/setting/system.py:625 msgid "Auto Update Pricing" -msgstr "" +msgstr "가격 자동 업데이트" #: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" -msgstr "" +msgstr "내부 데이터가 변경되면 부품 가격을 자동으로 업데이트" #: common/setting/system.py:633 msgid "Pricing Rebuild Interval" -msgstr "" +msgstr "가격 재구성 간격" #: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" -msgstr "" +msgstr "부품 가격이 자동으로 업데이트되기까지의 일 수" #: common/setting/system.py:640 msgid "Internal Prices" -msgstr "" +msgstr "내부 가격" #: common/setting/system.py:641 msgid "Enable internal prices for parts" -msgstr "" +msgstr "부품에 대해 내부 가격 사용" #: common/setting/system.py:646 msgid "Internal Price Override" -msgstr "" +msgstr "내부 가격 우선 적용" #: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" -msgstr "" +msgstr "가능한 경우 내부 가격이 가격 범위 계산보다 우선합니다" #: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "BOM 수량 0 허용" #: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" -msgstr "" +msgstr "부품의 BOM 항목에 수량 0을 허용합니다. 설정 수량을 사용해 빌드 수량과 무관하게 빌드당 필요한 수량을 정의할 수 있습니다" #: common/setting/system.py:662 msgid "Enable label printing" -msgstr "" +msgstr "라벨 인쇄 사용" #: common/setting/system.py:663 msgid "Enable label printing from the web interface" -msgstr "" +msgstr "웹 인터페이스에서 라벨 인쇄를 사용합니다" #: common/setting/system.py:668 msgid "Label Image DPI" -msgstr "" +msgstr "라벨 이미지 DPI" #: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" +msgstr "라벨 인쇄 플러그인에 제공할 이미지 파일 생성 시 DPI 해상도" #: common/setting/system.py:676 msgid "Enable Reports" -msgstr "" +msgstr "보고서 사용" #: common/setting/system.py:677 msgid "Enable generation of reports" -msgstr "" +msgstr "보고서 생성을 사용합니다" #: common/setting/system.py:682 msgid "Debug Mode" -msgstr "" +msgstr "디버그 모드" #: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" -msgstr "" +msgstr "디버그 모드에서 보고서 생성(HTML 출력)" #: common/setting/system.py:688 msgid "Log Report Errors" -msgstr "" +msgstr "보고서 오류 로그" #: common/setting/system.py:689 msgid "Log errors which occur when generating reports" -msgstr "" +msgstr "보고서 생성 중 발생하는 오류를 기록합니다" #: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:384 msgid "Page Size" -msgstr "" +msgstr "페이지 크기" #: common/setting/system.py:695 msgid "Default page size for PDF reports" -msgstr "" +msgstr "PDF 보고서의 기본 페이지 크기" #: common/setting/system.py:700 msgid "Enforce Parameter Units" -msgstr "" +msgstr "매개변수 단위 강제" #: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" -msgstr "" +msgstr "단위가 제공된 경우, 매개변수 값은 지정된 단위와 일치해야 합니다" #: common/setting/system.py:708 msgid "Globally Unique Serials" -msgstr "" +msgstr "전역 고유 시리얼" #: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" -msgstr "" +msgstr "재고 항목의 시리얼 번호는 전역적으로 고유해야 합니다" #: common/setting/system.py:714 msgid "Delete Depleted Stock" -msgstr "" +msgstr "소진된 재고 삭제" #: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" -msgstr "" +msgstr "재고 항목이 소진되었을 때의 기본 동작을 결정합니다" #: common/setting/system.py:720 msgid "Batch Code Template" -msgstr "" +msgstr "배치 코드 템플릿" #: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" -msgstr "" +msgstr "재고 항목의 기본 배치 코드를 생성하기 위한 템플릿" #: common/setting/system.py:725 msgid "Stock Expiry" -msgstr "" +msgstr "재고 만료" #: common/setting/system.py:726 msgid "Enable stock expiry functionality" -msgstr "" +msgstr "재고 만료 기능 사용" #: common/setting/system.py:731 msgid "Sell Expired Stock" -msgstr "" +msgstr "만료 재고 판매" #: common/setting/system.py:732 msgid "Allow sale of expired stock" -msgstr "" +msgstr "만료된 재고의 판매를 허용합니다" #: common/setting/system.py:737 msgid "Stock Stale Time" -msgstr "" +msgstr "재고 경과 시간" #: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" -msgstr "" +msgstr "만료 전 재고 항목을 오래된 것으로 간주하는 일 수" #: common/setting/system.py:746 msgid "Build Expired Stock" -msgstr "" +msgstr "만료 재고로 빌드" #: common/setting/system.py:747 msgid "Allow building with expired stock" -msgstr "" +msgstr "만료된 재고로 빌드하는 것을 허용합니다" #: common/setting/system.py:752 msgid "Stock Ownership Control" -msgstr "" +msgstr "재고 소유권 제어" #: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" -msgstr "" +msgstr "재고 위치 및 항목에 대한 소유권 제어를 사용합니다" #: common/setting/system.py:758 msgid "Stock Location Default Icon" -msgstr "" +msgstr "재고 위치 기본 아이콘" #: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" -msgstr "" +msgstr "재고 위치 기본 아이콘(비어 있으면 아이콘 없음)" #: common/setting/system.py:764 msgid "Show Installed Stock Items" -msgstr "" +msgstr "설치된 재고 항목 표시" #: common/setting/system.py:765 msgid "Display installed stock items in stock tables" -msgstr "" +msgstr "재고 표에서 설치된 재고 항목을 표시합니다" #: common/setting/system.py:770 msgid "Check BOM when installing items" -msgstr "" +msgstr "항목 설치 시 BOM 확인" #: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" +msgstr "설치된 재고 항목은 상위 부품의 BOM에 존재해야 합니다" #: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" -msgstr "" +msgstr "재고 없음 상태 이동 허용" #: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" +msgstr "재고가 없는 재고 항목을 재고 위치 간에 이동할 수 있도록 허용합니다" #: common/setting/system.py:786 msgid "Build Order Reference Pattern" -msgstr "" +msgstr "작업 지시서 참조번호 패턴" #: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" -msgstr "" +msgstr "작업 지시서 참조번호 필드를 생성하기 위한 필수 패턴" #: common/setting/system.py:792 common/setting/system.py:852 #: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" -msgstr "" +msgstr "책임자 필수" #: common/setting/system.py:793 common/setting/system.py:853 #: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" -msgstr "" +msgstr "각 주문에는 책임자가 지정되어야 합니다" #: common/setting/system.py:798 msgid "Require Active Part" -msgstr "" +msgstr "활성 부품 필수" #: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" -msgstr "" +msgstr "비활성 부품에 대해 작업 지시서 생성을 방지합니다" #: common/setting/system.py:804 msgid "Require Locked Part" -msgstr "" +msgstr "잠긴 부품 필수" #: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" -msgstr "" +msgstr "잠기지 않은 부품에 대해 작업 지시서 생성을 방지합니다" #: common/setting/system.py:810 msgid "Require Valid BOM" -msgstr "" +msgstr "유효한 BOM 필수" #: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" -msgstr "" +msgstr "BOM이 검증되지 않으면 작업 지시서 생성을 방지합니다" #: common/setting/system.py:816 msgid "Require Closed Child Orders" -msgstr "" +msgstr "하위 주문 종료 필수" #: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" -msgstr "" +msgstr "모든 하위 주문이 종료될 때까지 작업 지시서 완료를 방지합니다" #: common/setting/system.py:824 msgid "External Build Orders" -msgstr "" +msgstr "외주 생산 작업 지시서" #: common/setting/system.py:825 msgid "Enable external build order functionality" -msgstr "" +msgstr "외주 생산 작업 지시서 기능 사용" #: common/setting/system.py:830 msgid "Block Until Tests Pass" -msgstr "" +msgstr "테스트 통과 전까지 차단" #: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" +msgstr "필수 테스트가 모두 통과될 때까지 생산 완제품 완료를 방지합니다" #: common/setting/system.py:838 msgid "Enable Return Orders" -msgstr "" +msgstr "반품 주문 사용" #: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" -msgstr "" +msgstr "사용자 인터페이스에서 반품 주문 기능을 사용합니다" #: common/setting/system.py:844 msgid "Return Order Reference Pattern" -msgstr "" +msgstr "반품 주문 참조 패턴" #: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" -msgstr "" +msgstr "반품 주문 참조 필드를 생성하기 위한 필수 패턴" #: common/setting/system.py:858 msgid "Edit Completed Return Orders" -msgstr "" +msgstr "완료된 반품 주문 편집" #: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" -msgstr "" +msgstr "반품 주문이 완료된 후에도 편집을 허용합니다" #: common/setting/system.py:866 msgid "Sales Order Reference Pattern" -msgstr "" +msgstr "판매 주문 참조 패턴" #: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" -msgstr "" +msgstr "판매 주문 참조 필드를 생성하기 위한 필수 패턴" #: common/setting/system.py:878 msgid "Sales Order Default Shipment" -msgstr "" +msgstr "판매 주문 기본 배송" #: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" -msgstr "" +msgstr "판매 주문과 함께 기본 배송 생성 사용" #: common/setting/system.py:884 msgid "Edit Completed Sales Orders" -msgstr "" +msgstr "완료된 판매 주문 편집" #: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" +msgstr "판매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다" #: common/setting/system.py:892 msgid "Shipment Requires Checking" -msgstr "" +msgstr "배송 확인 필요" #: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "항목이 확인될 때까지 배송 완료를 방지합니다" #: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" -msgstr "" +msgstr "배송된 주문을 완료로 표시" #: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" +msgstr "\"배송됨\" 상태를 건너뛰고, 배송된 것으로 표시된 판매 주문을 자동으로 완료 처리합니다" #: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" -msgstr "" +msgstr "구매 주문 참조 패턴" #: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +msgstr "구매 주문 참조 필드를 생성하기 위한 필수 패턴" #: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" -msgstr "" +msgstr "완료된 구매 주문 편집" #: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" +msgstr "구매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다" #: common/setting/system.py:930 msgid "Convert Currency" -msgstr "" +msgstr "통화 변환" #: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" -msgstr "" +msgstr "재고 수령 시 항목 값을 기준 통화로 변환합니다" #: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" -msgstr "" +msgstr "구매 주문 자동 완료" #: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" +msgstr "모든 라인 항목을 수령하면 구매 주문을 자동으로 완료로 표시합니다" #: common/setting/system.py:945 msgid "Enable password forgot" -msgstr "" +msgstr "비밀번호 찾기 사용" #: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "로그인 페이지에서 비밀번호 찾기 기능을 사용합니다" #: common/setting/system.py:951 msgid "Enable registration" -msgstr "" +msgstr "회원가입 사용" #: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" -msgstr "" +msgstr "로그인 페이지에서 사용자 자기 등록(회원가입)을 사용합니다" #: common/setting/system.py:957 msgid "Enable SSO" -msgstr "" +msgstr "SSO 사용" #: common/setting/system.py:958 msgid "Enable SSO on the login pages" -msgstr "" +msgstr "로그인 페이지에서 SSO를 사용합니다" #: common/setting/system.py:963 msgid "Enable SSO registration" -msgstr "" +msgstr "SSO 등록 사용" #: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" +msgstr "로그인 페이지에서 SSO를 통한 자기 등록(회원가입)을 사용합니다" #: common/setting/system.py:971 msgid "Enable SSO group sync" -msgstr "" +msgstr "SSO 그룹 동기화 사용" #: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" +msgstr "IdP에서 제공하는 그룹과 InvenTree 그룹의 동기화를 사용합니다" #: common/setting/system.py:979 msgid "SSO group key" -msgstr "" +msgstr "SSO 그룹 키" #: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" +msgstr "IdP에서 제공하는 groups 클레임 속성의 이름" #: common/setting/system.py:985 msgid "SSO group map" -msgstr "" +msgstr "SSO 그룹 매핑" #: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" +msgstr "SSO 그룹을 로컬 InvenTree 그룹으로 매핑합니다. 로컬 그룹이 없으면 생성됩니다." #: common/setting/system.py:993 msgid "Remove groups outside of SSO" -msgstr "" +msgstr "SSO 외부 그룹 제거" #: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" +msgstr "IdP에서 제공되지 않는 그룹이 사용자에게 할당되어 있으면 제거할지 여부입니다. 이 설정을 비활성화하면 보안 문제가 발생할 수 있습니다" #: common/setting/system.py:1001 msgid "Email required" -msgstr "" +msgstr "이메일 필수" #: common/setting/system.py:1002 msgid "Require user to supply mail on signup" -msgstr "" +msgstr "회원가입 시 이메일 입력을 요구합니다" #: common/setting/system.py:1007 msgid "Auto-fill SSO users" -msgstr "" +msgstr "SSO 사용자 자동 입력" #: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" -msgstr "" +msgstr "SSO 계정 데이터에서 사용자 상세 정보를 자동으로 채웁니다" #: common/setting/system.py:1013 msgid "Mail twice" -msgstr "" +msgstr "이메일 2회 입력" #: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" -msgstr "" +msgstr "회원가입 시 이메일을 두 번 입력하도록 요청합니다" #: common/setting/system.py:1019 msgid "Password twice" -msgstr "" +msgstr "비밀번호 2회 입력" #: common/setting/system.py:1020 msgid "On signup ask users twice for their password" -msgstr "" +msgstr "회원가입 시 비밀번호를 두 번 입력하도록 요청합니다" #: common/setting/system.py:1025 msgid "Allowed domains" -msgstr "" +msgstr "허용된 도메인" #: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" +msgstr "특정 도메인으로 회원가입을 제한합니다(쉼표로 구분, @로 시작)" #: common/setting/system.py:1033 msgid "Group on signup" -msgstr "" +msgstr "회원가입 시 그룹" #: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +msgstr "등록 시 새 사용자가 할당될 그룹입니다. SSO 그룹 동기화가 활성화된 경우, IdP에서 그룹을 할당할 수 없을 때만 이 그룹이 설정됩니다." #: common/setting/system.py:1041 msgid "Enforce MFA" -msgstr "" +msgstr "MFA 강제" #: common/setting/system.py:1042 msgid "Users must use multifactor security." -msgstr "" +msgstr "사용자는 다중 요소 보안을 사용해야 합니다." #: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." -msgstr "" +msgstr "이 설정을 활성화하면 모든 사용자가 다중 요소 인증을 설정해야 합니다. 모든 세션이 즉시 연결 해제됩니다." #: common/setting/system.py:1052 msgid "Check plugins on startup" -msgstr "" +msgstr "시작 시 플러그인 확인" #: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" +msgstr "시작 시 모든 플러그인이 설치되어 있는지 확인합니다(컨테이너 환경에서 사용)" #: common/setting/system.py:1061 msgid "Check for plugin updates" -msgstr "" +msgstr "플러그인 업데이트 확인" #: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" -msgstr "" +msgstr "설치된 플러그인의 업데이트를 주기적으로 확인합니다" #: common/setting/system.py:1068 msgid "Enable URL integration" -msgstr "" +msgstr "URL 통합 사용" #: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" -msgstr "" +msgstr "플러그인이 URL 라우트를 추가할 수 있도록 허용합니다" #: common/setting/system.py:1075 msgid "Enable navigation integration" -msgstr "" +msgstr "내비게이션 통합 사용" #: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" -msgstr "" +msgstr "플러그인이 내비게이션에 통합될 수 있도록 허용합니다" #: common/setting/system.py:1082 msgid "Enable app integration" -msgstr "" +msgstr "앱 통합 사용" #: common/setting/system.py:1083 msgid "Enable plugins to add apps" -msgstr "" +msgstr "플러그인이 앱을 추가할 수 있도록 허용합니다" #: common/setting/system.py:1089 msgid "Enable schedule integration" -msgstr "" +msgstr "스케줄 통합 사용" #: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" -msgstr "" +msgstr "플러그인이 예약 작업을 실행할 수 있도록 허용합니다" #: common/setting/system.py:1096 msgid "Enable event integration" -msgstr "" +msgstr "이벤트 통합 사용" #: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" -msgstr "" +msgstr "플러그인이 내부 이벤트에 응답할 수 있도록 허용합니다" #: common/setting/system.py:1103 msgid "Enable interface integration" -msgstr "" +msgstr "인터페이스 통합 사용" #: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" -msgstr "" +msgstr "플러그인이 사용자 인터페이스에 통합될 수 있도록 허용합니다" #: common/setting/system.py:1110 msgid "Enable mail integration" -msgstr "" +msgstr "메일 통합 사용" #: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" -msgstr "" +msgstr "플러그인이 발신/수신 메일을 처리할 수 있도록 허용합니다" #: common/setting/system.py:1117 msgid "Enable project codes" -msgstr "" +msgstr "프로젝트 코드 사용" #: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" -msgstr "" +msgstr "프로젝트를 추적하기 위한 프로젝트 코드를 사용합니다" #: common/setting/system.py:1123 msgid "Enable Stocktake" -msgstr "" +msgstr "재고 실사 사용" #: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" -msgstr "" +msgstr "과거 재고 수준과 가치를 기록하는 기능을 사용합니다" #: common/setting/system.py:1131 msgid "Exclude External Locations" -msgstr "" +msgstr "외부 위치 제외" #: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "외부 위치의 재고 품목을 재고 실사 계산에서 제외합니다" #: common/setting/system.py:1139 msgid "Automatic Stocktake Period" -msgstr "" +msgstr "자동 재고 실사 주기" #: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "자동 재고 실사 기록 간격(일)" #: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "오래된 재고 실사 항목 삭제" #: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" +msgstr "지정된 일수보다 오래된 재고 실사 항목을 삭제합니다" #: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" -msgstr "" +msgstr "재고 실사 삭제 간격" #: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "재고 실사 항목은 지정된 일수 후 삭제됩니다" #: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "오래된 재고 추적 항목 삭제" #: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" +msgstr "지정된 일수보다 오래된 재고 추적 항목을 삭제합니다" #: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "재고 추적 삭제 간격" #: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "재고 추적 항목은 지정된 일수 후 삭제됩니다" #: common/setting/system.py:1180 msgid "Display Users full names" -msgstr "" +msgstr "사용자 전체 이름 표시" #: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" -msgstr "" +msgstr "사용자 이름 대신 사용자 전체 이름을 표시합니다" #: common/setting/system.py:1186 msgid "Display User Profiles" -msgstr "" +msgstr "사용자 프로필 표시" #: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" -msgstr "" +msgstr "프로필 페이지에 사용자 프로필을 표시합니다" #: common/setting/system.py:1192 msgid "Enable Test Station Data" -msgstr "" +msgstr "테스트 스테이션 데이터 사용" #: common/setting/system.py:1193 msgid "Enable test station data collection for test results" -msgstr "" +msgstr "테스트 결과를 위한 테스트 스테이션 데이터 수집을 사용합니다" #: common/setting/system.py:1198 msgid "Enable Machine Ping" -msgstr "" +msgstr "장비 핑 사용" #: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "등록된 장비의 상태를 확인하기 위해 주기적으로 핑 작업을 수행합니다" #: common/setting/user.py:23 msgid "Inline label display" -msgstr "" +msgstr "인라인 라벨 표시" #: common/setting/user.py:25 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" +msgstr "PDF 라벨을 파일로 다운로드하는 대신 브라우저에서 표시합니다" #: common/setting/user.py:31 msgid "Default label printer" -msgstr "" +msgstr "기본 라벨 프린터" #: common/setting/user.py:32 msgid "Configure which label printer should be selected by default" -msgstr "" +msgstr "기본으로 선택될 라벨 프린터를 설정합니다" #: common/setting/user.py:37 msgid "Inline report display" -msgstr "" +msgstr "인라인 보고서 표시" #: common/setting/user.py:39 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" +msgstr "PDF 보고서를 파일로 다운로드하는 대신 브라우저에서 표시합니다" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "폼 필드의 바코드 스캐너" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "폼 필드에서 바코드 스캐너 입력을 허용합니다" #: common/setting/user.py:51 msgid "Search Parts" -msgstr "" +msgstr "부품 검색" #: common/setting/user.py:52 msgid "Display parts in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 부품을 표시합니다" #: common/setting/user.py:57 msgid "Search Supplier Parts" -msgstr "" +msgstr "공급업체 부품 검색" #: common/setting/user.py:58 msgid "Display supplier parts in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 공급업체 부품을 표시합니다" #: common/setting/user.py:63 msgid "Search Manufacturer Parts" -msgstr "" +msgstr "제조업체 부품 검색" #: common/setting/user.py:64 msgid "Display manufacturer parts in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 제조업체 부품을 표시합니다" #: common/setting/user.py:69 msgid "Hide Inactive Parts" -msgstr "" +msgstr "비활성 부품 숨기기" #: common/setting/user.py:70 msgid "Excluded inactive parts from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 부품을 제외합니다" #: common/setting/user.py:75 msgid "Search Categories" -msgstr "" +msgstr "카테고리 검색" #: common/setting/user.py:76 msgid "Display part categories in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 부품 카테고리를 표시합니다" #: common/setting/user.py:81 msgid "Search Stock" -msgstr "" +msgstr "재고 검색" #: common/setting/user.py:82 msgid "Display stock items in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 재고 품목을 표시합니다" #: common/setting/user.py:87 msgid "Hide Unavailable Stock Items" -msgstr "" +msgstr "사용 불가 재고 품목 숨기기" #: common/setting/user.py:89 msgid "Exclude stock items which are not available from the search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 사용 불가한 재고 품목을 제외합니다" #: common/setting/user.py:95 msgid "Search Locations" -msgstr "" +msgstr "위치 검색" #: common/setting/user.py:96 msgid "Display stock locations in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 재고 위치를 표시합니다" #: common/setting/user.py:101 msgid "Search Companies" -msgstr "" +msgstr "회사 검색" #: common/setting/user.py:102 msgid "Display companies in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 회사를 표시합니다" #: common/setting/user.py:107 msgid "Search Build Orders" -msgstr "" +msgstr "빌드 주문 검색" #: common/setting/user.py:108 msgid "Display build orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 빌드 주문을 표시합니다" #: common/setting/user.py:113 msgid "Search Purchase Orders" -msgstr "" +msgstr "구매 주문 검색" #: common/setting/user.py:114 msgid "Display purchase orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 구매 주문을 표시합니다" #: common/setting/user.py:119 msgid "Exclude Inactive Purchase Orders" -msgstr "" +msgstr "비활성 구매 주문 제외" #: common/setting/user.py:120 msgid "Exclude inactive purchase orders from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 구매 주문을 제외합니다" #: common/setting/user.py:125 msgid "Search Sales Orders" -msgstr "" +msgstr "판매 주문 검색" #: common/setting/user.py:126 msgid "Display sales orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 판매 주문을 표시합니다" #: common/setting/user.py:131 msgid "Exclude Inactive Sales Orders" -msgstr "" +msgstr "비활성 판매 주문 제외" #: common/setting/user.py:132 msgid "Exclude inactive sales orders from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 판매 주문을 제외합니다" #: common/setting/user.py:137 msgid "Search Sales Order Shipments" -msgstr "" +msgstr "판매 주문 배송 검색" #: common/setting/user.py:138 msgid "Display sales order shipments in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 판매 주문 배송을 표시합니다" #: common/setting/user.py:143 msgid "Search Return Orders" -msgstr "" +msgstr "반품 주문 검색" #: common/setting/user.py:144 msgid "Display return orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 반품 주문을 표시합니다" #: common/setting/user.py:149 msgid "Exclude Inactive Return Orders" -msgstr "" +msgstr "비활성 반품 주문 제외" #: common/setting/user.py:150 msgid "Exclude inactive return orders from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 반품 주문을 제외합니다" #: common/setting/user.py:155 msgid "Search Preview Results" -msgstr "" +msgstr "검색 미리보기 결과" #: common/setting/user.py:157 msgid "Number of results to show in each section of the search preview window" -msgstr "" +msgstr "검색 미리보기 창의 각 섹션에 표시할 결과 수" #: common/setting/user.py:163 msgid "Regex Search" -msgstr "" +msgstr "정규식 검색" #: common/setting/user.py:164 msgid "Enable regular expressions in search queries" -msgstr "" +msgstr "검색 쿼리에서 정규식을 사용할 수 있도록 합니다" #: common/setting/user.py:169 msgid "Whole Word Search" -msgstr "" +msgstr "단어 단위 검색" #: common/setting/user.py:170 msgid "Search queries return results for whole word matches" -msgstr "" +msgstr "검색 쿼리가 단어 전체가 일치하는 결과만 반환합니다" #: common/setting/user.py:175 msgid "Search Notes" -msgstr "" +msgstr "노트 검색" #: common/setting/user.py:177 msgid "Search queries return results for matches from the item's notes" -msgstr "" +msgstr "검색 쿼리가 항목의 노트에서 일치하는 결과를 반환합니다" #: common/setting/user.py:183 msgid "Escape Key Closes Forms" -msgstr "" +msgstr "Esc 키로 폼 닫기" #: common/setting/user.py:184 msgid "Use the escape key to close modal forms" -msgstr "" +msgstr "Esc 키를 사용해 모달 폼을 닫습니다" #: common/setting/user.py:189 msgid "Fixed Navbar" -msgstr "" +msgstr "내비게이션 바 고정" #: common/setting/user.py:190 msgid "The navbar position is fixed to the top of the screen" -msgstr "" +msgstr "내비게이션 바를 화면 상단에 고정합니다" #: common/setting/user.py:195 msgid "Fixed Table Headers" -msgstr "" +msgstr "테이블 헤더 고정" #: common/setting/user.py:196 msgid "Table headers are fixed to the top of the table" -msgstr "" +msgstr "테이블 헤더를 테이블 상단에 고정합니다" #: common/setting/user.py:201 msgid "Show Spotlight" -msgstr "" +msgstr "스포트라이트 표시" #: common/setting/user.py:202 msgid "Enable spotlight navigation functionality" -msgstr "" +msgstr "스포트라이트 내비게이션 기능을 사용합니다" #: common/setting/user.py:207 msgid "Navigation Icons" -msgstr "" +msgstr "내비게이션 아이콘" #: common/setting/user.py:208 msgid "Display icons in the navigation bar" -msgstr "" +msgstr "내비게이션 바에 아이콘을 표시합니다" #: common/setting/user.py:213 msgid "Date Format" -msgstr "" +msgstr "날짜 형식" #: common/setting/user.py:214 msgid "Preferred format for displaying dates" -msgstr "" +msgstr "날짜 표시 기본 형식" #: common/setting/user.py:227 msgid "Show Stock History" -msgstr "" +msgstr "재고 기록 표시" #: common/setting/user.py:228 msgid "Display stock history information in the part detail page" -msgstr "" +msgstr "부품 상세 페이지에 재고 기록 정보를 표시합니다" #: common/setting/user.py:233 msgid "Show Last Breadcrumb" -msgstr "" +msgstr "마지막 탐색 경로 표시" #: common/setting/user.py:234 msgid "Show the current page in breadcrumbs" -msgstr "" +msgstr "탐색 경로(브레드크럼)에서 현재 페이지를 표시" #: common/setting/user.py:239 msgid "Show full stock location in tables" -msgstr "" +msgstr "테이블에서 전체 재고 위치 표시" #: common/setting/user.py:241 msgid "Disabled: The full location path is displayed as a hover tooltip. Enabled: The full location path is displayed as plain text." -msgstr "" +msgstr "비활성화: 전체 위치 경로를 마우스오버 툴팁으로 표시합니다. 활성화: 전체 위치 경로를 일반 텍스트로 표시합니다." #: common/setting/user.py:247 msgid "Show full part categories in tables" -msgstr "" +msgstr "테이블에서 전체 부품 카테고리 표시" #: common/setting/user.py:249 msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled: The full category path is displayed as plain text." -msgstr "" +msgstr "비활성화: 전체 카테고리 경로를 마우스오버 툴팁으로 표시합니다. 활성화: 전체 카테고리 경로를 일반 텍스트로 표시합니다." #: common/setting/user.py:255 msgid "Receive error reports" -msgstr "" +msgstr "오류 보고서 수신" #: common/setting/user.py:256 msgid "Receive notifications for system errors" -msgstr "" +msgstr "시스템 오류에 대한 알림을 수신" #: common/setting/user.py:261 msgid "Last used printing machines" -msgstr "" +msgstr "마지막으로 사용한 인쇄 장비" #: common/setting/user.py:262 msgid "Save the last used printing machines for a user" -msgstr "" +msgstr "사용자의 마지막 사용 인쇄 장비를 저장" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "모든 모델" #: common/validators.py:63 msgid "No attachment model type provided" -msgstr "" +msgstr "첨부 모델 유형이 제공되지 않았습니다" #: common/validators.py:69 msgid "Invalid attachment model type" -msgstr "" +msgstr "잘못된 첨부 모델 유형입니다" #: common/validators.py:110 msgid "Minimum places cannot be greater than maximum places" -msgstr "" +msgstr "최소 자리수는 최대 자리수보다 클 수 없습니다" #: common/validators.py:122 msgid "Maximum places cannot be less than minimum places" -msgstr "" +msgstr "최대 자리수는 최소 자리수보다 작을 수 없습니다" #: common/validators.py:133 msgid "An empty domain is not allowed." -msgstr "" +msgstr "빈 도메인은 허용되지 않습니다." #: common/validators.py:135 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" +msgstr "잘못된 도메인 이름: {domain}" #: common/validators.py:151 msgid "Value must be uppercase" -msgstr "" +msgstr "값은 대문자여야 합니다" #: common/validators.py:157 msgid "Value must be a valid variable identifier" -msgstr "" +msgstr "값은 유효한 변수 식별자여야 합니다" #: company/api.py:141 msgid "Part is Active" -msgstr "" +msgstr "부품이 활성화됨" #: company/api.py:145 msgid "Manufacturer is Active" -msgstr "" +msgstr "제조사가 활성화됨" #: company/api.py:252 msgid "Supplier Part is Active" -msgstr "" +msgstr "공급업체 부품이 활성화됨" #: company/api.py:254 msgid "Primary Supplier Part" -msgstr "" +msgstr "기본 공급업체 부품" #: company/api.py:258 msgid "Internal Part is Active" -msgstr "" +msgstr "내부 부품이 활성화됨" #: company/api.py:263 msgid "Supplier is Active" -msgstr "" +msgstr "공급업체가 활성화됨" #: company/api.py:275 company/models.py:535 company/serializers.py:473 #: part/serializers.py:491 msgid "Manufacturer" -msgstr "" +msgstr "제조사" #: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" -msgstr "" +msgstr "회사" #: company/api.py:292 msgid "Has Stock" -msgstr "" +msgstr "재고 있음" #: company/models.py:125 msgid "Companies" -msgstr "" +msgstr "회사" #: company/models.py:153 msgid "Company description" -msgstr "" +msgstr "회사 설명" #: company/models.py:154 msgid "Description of the company" -msgstr "" +msgstr "회사에 대한 설명" #: company/models.py:160 msgid "Website" -msgstr "" +msgstr "웹사이트" #: company/models.py:161 msgid "Company website URL" -msgstr "" +msgstr "회사 웹사이트 URL" #: company/models.py:167 msgid "Phone number" -msgstr "" +msgstr "전화번호" #: company/models.py:169 msgid "Contact phone number" -msgstr "" +msgstr "연락처 전화번호" #: company/models.py:176 msgid "Contact email address" -msgstr "" +msgstr "연락처 이메일 주소" #: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" -msgstr "" +msgstr "담당자" #: company/models.py:183 msgid "Point of contact" -msgstr "" +msgstr "담당자" #: company/models.py:189 msgid "Link to external company information" -msgstr "" +msgstr "외부 회사 정보 링크" #: company/models.py:194 msgid "Is this company active?" -msgstr "" +msgstr "이 회사가 활성 상태인가요?" #: company/models.py:199 msgid "Is customer" -msgstr "" +msgstr "고객 여부" #: company/models.py:200 msgid "Do you sell items to this company?" -msgstr "" +msgstr "이 회사에 품목을 판매하나요?" #: company/models.py:205 msgid "Is supplier" -msgstr "" +msgstr "공급업체 여부" #: company/models.py:206 msgid "Do you purchase items from this company?" -msgstr "" +msgstr "이 회사로부터 품목을 구매하나요?" #: company/models.py:211 msgid "Is manufacturer" -msgstr "" +msgstr "제조사 여부" #: company/models.py:212 msgid "Does this company manufacture parts?" -msgstr "" +msgstr "이 회사가 부품을 제조하나요?" #: company/models.py:220 msgid "Default currency used for this company" -msgstr "" +msgstr "이 회사에서 사용하는 기본 통화" #: company/models.py:227 msgid "Tax ID" -msgstr "" +msgstr "세금 ID" #: company/models.py:228 msgid "Company Tax ID" -msgstr "" +msgstr "회사 세금 ID" #: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" -msgstr "" +msgstr "주소" #: company/models.py:351 msgid "Addresses" -msgstr "" +msgstr "주소" #: company/models.py:405 msgid "Select company" -msgstr "" +msgstr "회사 선택" #: company/models.py:410 msgid "Address title" -msgstr "" +msgstr "주소 제목" #: company/models.py:411 msgid "Title describing the address entry" -msgstr "" +msgstr "주소 항목을 설명하는 제목" #: company/models.py:417 msgid "Primary address" -msgstr "" +msgstr "기본 주소" #: company/models.py:418 msgid "Set as primary address" -msgstr "" +msgstr "기본 주소로 설정" #: company/models.py:423 msgid "Line 1" -msgstr "" +msgstr "주소 1" #: company/models.py:424 msgid "Address line 1" -msgstr "" +msgstr "주소 1" #: company/models.py:430 msgid "Line 2" -msgstr "" +msgstr "주소 2" #: company/models.py:431 msgid "Address line 2" -msgstr "" +msgstr "주소 2" #: company/models.py:437 company/models.py:438 msgid "Postal code" -msgstr "" +msgstr "우편번호" #: company/models.py:444 msgid "City/Region" -msgstr "" +msgstr "도시/지역" #: company/models.py:445 msgid "Postal code city/region" -msgstr "" +msgstr "우편번호 도시/지역" #: company/models.py:451 msgid "State/Province" -msgstr "" +msgstr "주/도" #: company/models.py:452 msgid "State or province" -msgstr "" +msgstr "주 또는 도" #: company/models.py:458 msgid "Country" -msgstr "" +msgstr "국가" #: company/models.py:459 msgid "Address country" -msgstr "" +msgstr "주소 국가" #: company/models.py:465 msgid "Courier shipping notes" -msgstr "" +msgstr "택배 배송 메모" #: company/models.py:466 msgid "Notes for shipping courier" -msgstr "" +msgstr "택배 배송을 위한 메모" #: company/models.py:472 msgid "Internal shipping notes" -msgstr "" +msgstr "내부 배송 메모" #: company/models.py:473 msgid "Shipping notes for internal use" -msgstr "" +msgstr "내부용 배송 메모" #: company/models.py:480 msgid "Link to address information (external)" -msgstr "" +msgstr "주소 정보 링크(외부)" #: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" -msgstr "" +msgstr "제조사 부품" #: company/models.py:524 company/models.py:764 stock/models.py:1032 #: stock/serializers.py:418 msgid "Base Part" -msgstr "" +msgstr "기본 부품" #: company/models.py:526 company/models.py:766 msgid "Select part" -msgstr "" +msgstr "부품 선택" #: company/models.py:536 msgid "Select manufacturer" -msgstr "" +msgstr "제조사 선택" #: company/models.py:542 company/serializers.py:512 order/serializers.py:742 #: part/serializers.py:501 msgid "MPN" -msgstr "" +msgstr "MPN" #: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" -msgstr "" +msgstr "제조사 부품 번호" #: company/models.py:550 msgid "URL for external manufacturer part link" -msgstr "" +msgstr "외부 제조사 부품 링크 URL" #: company/models.py:559 msgid "Manufacturer part description" -msgstr "" +msgstr "제조사 부품 설명" #: company/models.py:691 msgid "Pack units must be compatible with the base part units" -msgstr "" +msgstr "포장 단위는 기본 부품 단위와 호환되어야 합니다" #: company/models.py:698 msgid "Pack units must be greater than zero" -msgstr "" +msgstr "포장 단위는 0보다 커야 합니다" #: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" -msgstr "" +msgstr "연결된 제조사 부품은 동일한 기본 부품을 참조해야 합니다" #: company/models.py:774 company/serializers.py:460 company/serializers.py:495 #: order/models.py:666 part/serializers.py:475 @@ -4248,609 +4248,609 @@ msgstr "" #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" -msgstr "" +msgstr "공급업체" #: company/models.py:775 msgid "Select supplier" -msgstr "" +msgstr "공급업체 선택" #: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" -msgstr "" +msgstr "공급업체 SKU" #: company/models.py:787 msgid "Is this supplier part active?" -msgstr "" +msgstr "이 공급업체 부품이 활성 상태인가요?" #: company/models.py:792 msgid "Primary" -msgstr "" +msgstr "기본" #: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" -msgstr "" +msgstr "연결된 부품의 기본 공급업체 부품인가요?" #: company/models.py:803 msgid "Select manufacturer part" -msgstr "" +msgstr "제조사 부품 선택" #: company/models.py:810 msgid "URL for external supplier part link" -msgstr "" +msgstr "외부 공급업체 부품 링크 URL" #: company/models.py:819 msgid "Supplier part description" -msgstr "" +msgstr "공급업체 부품 설명" #: company/models.py:835 part/models.py:2295 msgid "base cost" -msgstr "" +msgstr "기본 비용" #: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "최소 요금(예: 보관 수수료)" #: company/models.py:843 order/serializers.py:887 stock/models.py:1063 #: stock/serializers.py:1681 msgid "Packaging" -msgstr "" +msgstr "포장" #: company/models.py:844 msgid "Part packaging" -msgstr "" +msgstr "부품 포장" #: company/models.py:849 msgid "Pack Quantity" -msgstr "" +msgstr "포장 수량" #: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" +msgstr "한 포장에 공급되는 총 수량입니다. 단품인 경우 비워 두세요." #: company/models.py:870 part/models.py:2302 msgid "multiple" -msgstr "" +msgstr "배수" #: company/models.py:871 msgid "Order multiple" -msgstr "" +msgstr "주문 배수" #: company/models.py:883 msgid "Quantity available from supplier" -msgstr "" +msgstr "공급업체에서 제공 가능한 수량" #: company/models.py:889 msgid "Availability Updated" -msgstr "" +msgstr "가용성 업데이트됨" #: company/models.py:890 msgid "Date of last update of availability data" -msgstr "" +msgstr "가용성 데이터의 마지막 업데이트 날짜" #: company/models.py:1018 msgid "Supplier Price Break" -msgstr "" +msgstr "공급업체 가격 구간" #: company/serializers.py:191 msgid "Default currency used for this supplier" -msgstr "" +msgstr "이 공급업체에서 사용하는 기본 통화" #: company/serializers.py:229 msgid "Company Name" -msgstr "" +msgstr "회사명" #: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" -msgstr "" +msgstr "재고 있음" #: company/serializers.py:435 msgid "Price Breaks" -msgstr "" +msgstr "가격 구간" #: company/serializers.py:488 msgid "Pretty Name" -msgstr "" +msgstr "표시 이름" #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" -msgstr "" +msgstr "데이터 내보내기 중 오류가 발생했습니다" #: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" -msgstr "" +msgstr "데이터 내보내기 플러그인이 잘못된 데이터 형식을 반환했습니다" #: data_exporter/serializers.py:73 msgid "Export Format" -msgstr "" +msgstr "내보내기 형식" #: data_exporter/serializers.py:74 msgid "Select export file format" -msgstr "" +msgstr "내보내기 파일 형식을 선택하세요" #: data_exporter/serializers.py:81 msgid "Export Plugin" -msgstr "" +msgstr "내보내기 플러그인" #: data_exporter/serializers.py:82 msgid "Select export plugin" -msgstr "" +msgstr "내보내기 플러그인을 선택하세요" #: generic/states/fields.py:146 msgid "Additional status information for this item" -msgstr "" +msgstr "이 항목에 대한 추가 상태 정보" #: generic/states/fields.py:160 msgid "Custom status key" -msgstr "" +msgstr "사용자 정의 상태 키" #: generic/states/serializers.py:26 msgid "Custom" -msgstr "" +msgstr "사용자 정의" #: generic/states/serializers.py:37 msgid "Class" -msgstr "" +msgstr "클래스" #: generic/states/serializers.py:40 msgid "Values" -msgstr "" +msgstr "값" #: generic/states/tests.py:22 order/status_codes.py:13 msgid "Placed" -msgstr "" +msgstr "접수됨" #: generic/states/validators.py:21 msgid "Invalid status code" -msgstr "" +msgstr "잘못된 상태 코드" #: importer/models.py:74 msgid "Data File" -msgstr "" +msgstr "데이터 파일" #: importer/models.py:75 msgid "Data file to import" -msgstr "" +msgstr "가져올 데이터 파일" #: importer/models.py:84 msgid "Columns" -msgstr "" +msgstr "열" #: importer/models.py:91 msgid "Target model type for this import session" -msgstr "" +msgstr "이 가져오기 세션의 대상 모델 유형" #: importer/models.py:97 msgid "Import status" -msgstr "" +msgstr "가져오기 상태" #: importer/models.py:107 msgid "Field Defaults" -msgstr "" +msgstr "필드 기본값" #: importer/models.py:114 msgid "Field Overrides" -msgstr "" +msgstr "필드 재정의" #: importer/models.py:121 msgid "Field Filters" -msgstr "" +msgstr "필드 필터" #: importer/models.py:127 msgid "Update Existing Records" -msgstr "" +msgstr "기존 레코드 업데이트" #: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" -msgstr "" +msgstr "활성화하면 기존 레코드가 새 데이터로 업데이트됩니다" #: importer/models.py:281 msgid "Some required fields have not been mapped" -msgstr "" +msgstr "일부 필수 필드가 매핑되지 않았습니다" #: importer/models.py:388 msgid "ID" -msgstr "" +msgstr "ID" #: importer/models.py:389 msgid "Existing database identifier for the record" -msgstr "" +msgstr "레코드의 기존 데이터베이스 식별자" #: importer/models.py:459 msgid "Column is already mapped to a database field" -msgstr "" +msgstr "열이 이미 데이터베이스 필드에 매핑되어 있습니다" #: importer/models.py:464 msgid "Field is already mapped to a data column" -msgstr "" +msgstr "필드가 이미 데이터 열에 매핑되어 있습니다" #: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" -msgstr "" +msgstr "열 매핑은 유효한 가져오기 세션에 연결되어야 합니다" #: importer/models.py:478 msgid "Column does not exist in the data file" -msgstr "" +msgstr "데이터 파일에 해당 열이 없습니다" #: importer/models.py:485 msgid "Field does not exist in the target model" -msgstr "" +msgstr "대상 모델에 해당 필드가 없습니다" #: importer/models.py:489 msgid "Selected field is read-only" -msgstr "" +msgstr "선택한 필드는 읽기 전용입니다" #: importer/models.py:494 importer/models.py:571 msgid "Import Session" -msgstr "" +msgstr "가져오기 세션" #: importer/models.py:498 msgid "Field" -msgstr "" +msgstr "필드" #: importer/models.py:500 msgid "Column" -msgstr "" +msgstr "열" #: importer/models.py:575 msgid "Row Index" -msgstr "" +msgstr "행 인덱스" #: importer/models.py:578 msgid "Original row data" -msgstr "" +msgstr "원본 행 데이터" #: importer/models.py:583 machine/models.py:111 msgid "Errors" -msgstr "" +msgstr "오류" #: importer/models.py:585 part/serializers.py:1159 msgid "Valid" -msgstr "" +msgstr "유효" #: importer/models.py:846 msgid "ID is required for updating existing records." -msgstr "" +msgstr "기존 레코드를 업데이트하려면 ID가 필요합니다." #: importer/models.py:853 msgid "No record found with the provided ID" -msgstr "" +msgstr "제공된 ID로 레코드를 찾을 수 없습니다" #: importer/models.py:859 msgid "Invalid ID format provided" -msgstr "" +msgstr "잘못된 ID 형식이 제공되었습니다" #: importer/operations.py:31 importer/operations.py:52 msgid "Unsupported data file format" -msgstr "" +msgstr "지원되지 않는 데이터 파일 형식" #: importer/operations.py:43 msgid "Failed to open data file" -msgstr "" +msgstr "데이터 파일을 열지 못했습니다" #: importer/operations.py:54 msgid "Invalid data file dimensions" -msgstr "" +msgstr "잘못된 데이터 파일 크기입니다" #: importer/serializers.py:92 msgid "Invalid field defaults" -msgstr "" +msgstr "잘못된 필드 기본값" #: importer/serializers.py:105 msgid "Invalid field overrides" -msgstr "" +msgstr "잘못된 필드 재정의" #: importer/serializers.py:118 msgid "Invalid field filters" -msgstr "" +msgstr "잘못된 필드 필터" #: importer/serializers.py:177 msgid "Rows" -msgstr "" +msgstr "행" #: importer/serializers.py:178 msgid "List of row IDs to accept" -msgstr "" +msgstr "승인할 행 ID 목록" #: importer/serializers.py:191 msgid "No rows provided" -msgstr "" +msgstr "제공된 행이 없습니다" #: importer/serializers.py:195 msgid "Row does not belong to this session" -msgstr "" +msgstr "행이 이 세션에 속하지 않습니다" #: importer/serializers.py:198 msgid "Row contains invalid data" -msgstr "" +msgstr "행에 잘못된 데이터가 포함되어 있습니다" #: importer/serializers.py:201 msgid "Row has already been completed" -msgstr "" +msgstr "행이 이미 완료되었습니다" #: importer/status_codes.py:13 msgid "Initializing" -msgstr "" +msgstr "초기화 중" #: importer/status_codes.py:18 msgid "Mapping Columns" -msgstr "" +msgstr "열 매핑 중" #: importer/status_codes.py:21 msgid "Importing Data" -msgstr "" +msgstr "데이터 가져오는 중" #: importer/status_codes.py:24 msgid "Processing Data" -msgstr "" +msgstr "데이터 처리 중" #: importer/validators.py:21 msgid "Data file exceeds maximum size limit" -msgstr "" +msgstr "데이터 파일이 최대 크기 제한을 초과합니다" #: importer/validators.py:26 msgid "Data file contains no headers" -msgstr "" +msgstr "데이터 파일에 헤더가 없습니다" #: importer/validators.py:29 msgid "Data file contains too many columns" -msgstr "" +msgstr "데이터 파일에 열이 너무 많습니다" #: importer/validators.py:32 msgid "Data file contains too many rows" -msgstr "" +msgstr "데이터 파일에 행이 너무 많습니다" #: importer/validators.py:53 msgid "Value must be a valid dictionary object" -msgstr "" +msgstr "값은 유효한 사전(dictionary) 객체여야 합니다" #: machine/machine_types/label_printer.py:212 msgid "Copies" -msgstr "" +msgstr "복사본" #: machine/machine_types/label_printer.py:213 msgid "Number of copies to print for each label" -msgstr "" +msgstr "각 라벨에 대해 인쇄할 복사본 수" #: machine/machine_types/label_printer.py:231 msgid "Connected" -msgstr "" +msgstr "연결됨" #: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" -msgstr "" +msgstr "알 수 없음" #: machine/machine_types/label_printer.py:233 msgid "Printing" -msgstr "" +msgstr "인쇄 중" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "경고" #: machine/machine_types/label_printer.py:235 msgid "No media" -msgstr "" +msgstr "미디어 없음" #: machine/machine_types/label_printer.py:236 msgid "Paper jam" -msgstr "" +msgstr "용지 걸림" #: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "" +msgstr "연결 끊김" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "오류" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" -msgstr "" +msgstr "라벨 프린터" #: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." -msgstr "" +msgstr "다양한 항목의 라벨을 직접 인쇄합니다." #: machine/machine_types/label_printer.py:252 msgid "Printer Location" -msgstr "" +msgstr "프린터 위치" #: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" -msgstr "" +msgstr "프린터 범위를 특정 위치로 제한합니다" #: machine/models.py:26 msgid "Name of machine" -msgstr "" +msgstr "장비 이름" #: machine/models.py:30 msgid "Machine Type" -msgstr "" +msgstr "장비 유형" #: machine/models.py:30 msgid "Type of machine" -msgstr "" +msgstr "장비의 유형" #: machine/models.py:35 machine/models.py:147 msgid "Driver" -msgstr "" +msgstr "드라이버" #: machine/models.py:36 msgid "Driver used for the machine" -msgstr "" +msgstr "장비에 사용되는 드라이버" #: machine/models.py:40 msgid "Machines can be disabled" -msgstr "" +msgstr "장비를 비활성화할 수 있습니다" #: machine/models.py:96 msgid "Driver available" -msgstr "" +msgstr "사용 가능한 드라이버" #: machine/models.py:101 msgid "No errors" -msgstr "" +msgstr "오류 없음" #: machine/models.py:106 msgid "Initialized" -msgstr "" +msgstr "초기화됨" #: machine/models.py:118 msgid "Machine status" -msgstr "" +msgstr "장비 상태" #: machine/models.py:146 msgid "Machine" -msgstr "" +msgstr "장비" #: machine/models.py:158 msgid "Machine Config" -msgstr "" +msgstr "장비 구성" #: machine/models.py:163 msgid "Config type" -msgstr "" +msgstr "구성 유형" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "속성 키" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "속성 값" #: machine/serializers.py:30 users/models.py:238 msgid "Group" -msgstr "" +msgstr "그룹" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "속성 그룹" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "유형" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "속성의 유형" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "최대 진행도" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "진행도 유형의 최대값( type=progress 인 경우 필수)" #: order/api.py:128 msgid "Order Reference" -msgstr "" +msgstr "주문 참조" #: order/api.py:156 order/api.py:1218 msgid "Outstanding" -msgstr "" +msgstr "미결" #: order/api.py:172 msgid "Has Project Code" -msgstr "" +msgstr "프로젝트 코드 있음" #: order/api.py:186 order/models.py:493 msgid "Created By" -msgstr "" +msgstr "생성자" #: order/api.py:190 msgid "Created Before" -msgstr "" +msgstr "이전 생성" #: order/api.py:194 msgid "Created After" -msgstr "" +msgstr "이후 생성" #: order/api.py:198 msgid "Has Start Date" -msgstr "" +msgstr "시작일 있음" #: order/api.py:206 msgid "Start Date Before" -msgstr "" +msgstr "시작일 이전" #: order/api.py:210 msgid "Start Date After" -msgstr "" +msgstr "시작일 이후" #: order/api.py:214 msgid "Has Target Date" -msgstr "" +msgstr "목표일 있음" #: order/api.py:222 msgid "Target Date Before" -msgstr "" +msgstr "목표일 이전" #: order/api.py:226 msgid "Target Date After" -msgstr "" +msgstr "목표일 이후" #: order/api.py:230 msgid "Updated Before" -msgstr "" +msgstr "이전 업데이트" #: order/api.py:234 msgid "Updated After" -msgstr "" +msgstr "이후 업데이트" #: order/api.py:285 msgid "Has Pricing" -msgstr "" +msgstr "가격 정보 있음" #: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" -msgstr "" +msgstr "완료일 이전" #: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" -msgstr "" +msgstr "완료일 이후" #: order/api.py:348 order/api.py:352 msgid "External Build Order" -msgstr "" +msgstr "외주 생산 작업 지시서" #: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 #: order/models.py:2098 order/models.py:2150 order/models.py:2331 #: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" -msgstr "" +msgstr "주문" #: order/api.py:541 order/api.py:993 msgid "Order Complete" -msgstr "" +msgstr "주문 완료" #: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" -msgstr "" +msgstr "내부 부품" #: order/api.py:595 msgid "Order Pending" -msgstr "" +msgstr "주문 대기" #: order/api.py:978 msgid "Completed" -msgstr "" +msgstr "완료됨" #: order/api.py:1234 msgid "Has Shipment" -msgstr "" +msgstr "배송 있음" #: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "배송을 찾을 수 없습니다" #: order/api.py:1840 order/models.py:577 order/models.py:1973 #: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" -msgstr "" +msgstr "구매 주문" #: order/api.py:1842 order/models.py:1288 order/models.py:2151 #: order/models.py:2332 order/models.py:2528 @@ -4859,2293 +4859,2293 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:15 #: templates/email/overdue_sales_order.html:15 msgid "Sales Order" -msgstr "" +msgstr "판매 주문" #: order/api.py:1844 order/models.py:2699 order/models.py:3057 #: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" -msgstr "" +msgstr "반품 주문" #: order/models.py:90 #: report/templates/report/inventree_purchase_order_report.html:38 #: report/templates/report/inventree_sales_order_report.html:31 msgid "Total Price" -msgstr "" +msgstr "총액" #: order/models.py:91 msgid "Total price for this order" -msgstr "" +msgstr "이 주문의 총액" #: order/models.py:96 order/serializers.py:61 msgid "Order Currency" -msgstr "" +msgstr "주문 통화" #: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" -msgstr "" +msgstr "이 주문의 통화(비워 두면 회사 기본값 사용)" #: order/models.py:326 msgid "This order is locked and cannot be modified" -msgstr "" +msgstr "이 주문은 잠겨 있어 수정할 수 없습니다" #: order/models.py:380 msgid "Contact does not match selected company" -msgstr "" +msgstr "담당자가 선택한 회사와 일치하지 않습니다" #: order/models.py:387 msgid "Start date must be before target date" -msgstr "" +msgstr "시작일은 목표일보다 이전이어야 합니다" #: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "주소가 선택한 회사와 일치하지 않습니다" #: order/models.py:448 msgid "Order description (optional)" -msgstr "" +msgstr "주문 설명(선택 사항)" #: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" -msgstr "" +msgstr "이 주문의 프로젝트 코드를 선택하세요" #: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" -msgstr "" +msgstr "외부 페이지 링크" #: order/models.py:470 msgid "Start date" -msgstr "" +msgstr "시작일" #: order/models.py:471 msgid "Scheduled start date for this order" -msgstr "" +msgstr "이 주문의 예정 시작일" #: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" -msgstr "" +msgstr "목표일" #: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" +msgstr "주문 배송 예상일입니다. 이 날짜 이후에는 주문이 기한 초과로 표시됩니다." #: order/models.py:499 msgid "Issue Date" -msgstr "" +msgstr "발행일" #: order/models.py:500 msgid "Date order was issued" -msgstr "" +msgstr "주문이 발행된 날짜" #: order/models.py:506 msgid "Updated At" -msgstr "" +msgstr "업데이트 일시" #: order/models.py:515 msgid "User or group responsible for this order" -msgstr "" +msgstr "이 주문을 담당하는 사용자 또는 그룹" #: order/models.py:526 msgid "Point of contact for this order" -msgstr "" +msgstr "이 주문의 연락 담당자" #: order/models.py:536 msgid "Company address for this order" -msgstr "" +msgstr "이 주문의 회사 주소" #: order/models.py:642 order/models.py:1351 msgid "Order reference" -msgstr "" +msgstr "주문 참조" #: order/models.py:651 order/models.py:1375 order/models.py:2789 #: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" -msgstr "" +msgstr "상태" #: order/models.py:652 msgid "Purchase order status" -msgstr "" +msgstr "구매 주문 상태" #: order/models.py:667 msgid "Company from which the items are being ordered" -msgstr "" +msgstr "품목을 주문하는 공급업체" #: order/models.py:678 msgid "Supplier Reference" -msgstr "" +msgstr "공급업체 참조" #: order/models.py:679 msgid "Supplier order reference code" -msgstr "" +msgstr "공급업체 주문 참조 코드" #: order/models.py:688 msgid "received by" -msgstr "" +msgstr "수령자" #: order/models.py:695 order/models.py:2804 msgid "Date order was completed" -msgstr "" +msgstr "주문이 완료된 날짜" #: order/models.py:704 order/models.py:2031 msgid "Destination" -msgstr "" +msgstr "목적지" #: order/models.py:705 order/models.py:2035 msgid "Destination for received items" -msgstr "" +msgstr "수령된 품목의 목적지" #: order/models.py:751 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "부품 공급업체는 구매 주문 공급업체와 일치해야 합니다" #: order/models.py:1021 msgid "Line item does not match purchase order" -msgstr "" +msgstr "라인 항목이 구매 주문과 일치하지 않습니다" #: order/models.py:1024 msgid "Line item is missing a linked part" -msgstr "" +msgstr "라인 항목에 연결된 부품이 없습니다" #: order/models.py:1038 msgid "Quantity must be a positive number" -msgstr "" +msgstr "수량은 양수여야 합니다" #: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "가상 부품에는 일련번호를 할당할 수 없습니다" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 #: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" -msgstr "" +msgstr "고객" #: order/models.py:1363 msgid "Company to which the items are being sold" -msgstr "" +msgstr "품목을 판매하는 대상 회사" #: order/models.py:1376 msgid "Sales order status" -msgstr "" +msgstr "판매 주문 상태" #: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " -msgstr "" +msgstr "고객 참조" #: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" -msgstr "" +msgstr "고객 주문 참조 코드" #: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" -msgstr "" +msgstr "발송일" #: order/models.py:1401 msgid "shipped by" -msgstr "" +msgstr "발송자" #: order/models.py:1452 msgid "Order is already complete" -msgstr "" +msgstr "주문이 이미 완료되었습니다" #: order/models.py:1455 msgid "Order is already cancelled" -msgstr "" +msgstr "주문이 이미 취소되었습니다" #: order/models.py:1459 msgid "Only an open order can be marked as complete" -msgstr "" +msgstr "열린 주문만 완료로 표시할 수 있습니다" #: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" +msgstr "미완료 발송이 있어 주문을 완료할 수 없습니다" #: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" -msgstr "" +msgstr "미완료 할당이 있어 주문을 완료할 수 없습니다" #: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" -msgstr "" +msgstr "미완료 라인 항목이 있어 주문을 완료할 수 없습니다" #: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" -msgstr "" +msgstr "이 주문은 잠겨 있어 수정할 수 없습니다" #: order/models.py:1796 msgid "Item quantity" -msgstr "" +msgstr "품목 수량" #: order/models.py:1814 msgid "Line Number" -msgstr "" +msgstr "라인 번호" #: order/models.py:1815 msgid "Line number for this item (optional)" -msgstr "" +msgstr "이 항목의 라인 번호(선택)" #: order/models.py:1822 msgid "Line item reference" -msgstr "" +msgstr "라인 항목 참조" #: order/models.py:1829 msgid "Line item notes" -msgstr "" +msgstr "라인 항목 메모" #: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" +msgstr "이 라인 항목의 목표일(비워 두면 주문의 목표일을 사용)" #: order/models.py:1874 msgid "Line item description (optional)" -msgstr "" +msgstr "라인 항목 설명(선택)" #: order/models.py:1881 msgid "Additional context for this line" -msgstr "" +msgstr "이 라인의 추가 정보" #: order/models.py:1891 msgid "Unit price" -msgstr "" +msgstr "단가" #: order/models.py:1910 msgid "Purchase Order Line Item" -msgstr "" +msgstr "구매 주문 라인 항목" #: order/models.py:1939 msgid "Supplier part must match supplier" -msgstr "" +msgstr "공급업체 부품은 공급업체와 일치해야 합니다" #: order/models.py:1944 msgid "Build order must be marked as external" -msgstr "" +msgstr "빌드 주문은 외부로 표시되어야 합니다" #: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" -msgstr "" +msgstr "빌드 주문은 조립 부품에만 연결할 수 있습니다" #: order/models.py:1957 msgid "Build order part must match line item part" -msgstr "" +msgstr "빌드 주문 부품은 라인 항목 부품과 일치해야 합니다" #: order/models.py:1992 msgid "Supplier part" -msgstr "" +msgstr "공급업체 부품" #: order/models.py:1999 msgid "Received" -msgstr "" +msgstr "수령됨" #: order/models.py:2000 msgid "Number of items received" -msgstr "" +msgstr "수령된 품목 수" #: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" -msgstr "" +msgstr "구매 가격" #: order/models.py:2009 msgid "Unit purchase price" -msgstr "" +msgstr "단위 구매 가격" #: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" -msgstr "" +msgstr "이 라인 항목으로 이행할 외주 생산 작업 지시서" #: order/models.py:2087 msgid "Purchase Order Extra Line" -msgstr "" +msgstr "구매 주문 추가 라인" #: order/models.py:2116 msgid "Sales Order Line Item" -msgstr "" +msgstr "판매 주문 라인 항목" #: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "판매 가능한 부품만 판매 주문에 할당할 수 있습니다" #: order/models.py:2169 msgid "Sale Price" -msgstr "" +msgstr "판매 가격" #: order/models.py:2170 msgid "Unit sale price" -msgstr "" +msgstr "단위 판매 가격" #: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" -msgstr "" +msgstr "발송됨" #: order/models.py:2180 msgid "Shipped quantity" -msgstr "" +msgstr "발송 수량" #: order/models.py:2292 msgid "Sales Order Shipment" -msgstr "" +msgstr "판매 주문 발송" #: order/models.py:2305 msgid "Shipment address must match the customer" -msgstr "" +msgstr "발송 주소는 고객과 일치해야 합니다" #: order/models.py:2341 msgid "Shipping address for this shipment" -msgstr "" +msgstr "이 발송의 배송지 주소" #: order/models.py:2349 msgid "Date of shipment" -msgstr "" +msgstr "발송 날짜" #: order/models.py:2355 msgid "Delivery Date" -msgstr "" +msgstr "배송일" #: order/models.py:2356 msgid "Date of delivery of shipment" -msgstr "" +msgstr "발송물 배송 날짜" #: order/models.py:2364 msgid "Checked By" -msgstr "" +msgstr "확인자" #: order/models.py:2365 msgid "User who checked this shipment" -msgstr "" +msgstr "이 발송을 확인한 사용자" #: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 #: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" -msgstr "" +msgstr "발송" #: order/models.py:2373 msgid "Shipment number" -msgstr "" +msgstr "발송 번호" #: order/models.py:2381 msgid "Tracking Number" -msgstr "" +msgstr "운송장 번호" #: order/models.py:2382 msgid "Shipment tracking information" -msgstr "" +msgstr "발송 추적 정보" #: order/models.py:2389 msgid "Invoice Number" -msgstr "" +msgstr "송장 번호" #: order/models.py:2390 msgid "Reference number for associated invoice" -msgstr "" +msgstr "연결된 송장의 참조 번호" #: order/models.py:2436 msgid "Shipment has already been sent" -msgstr "" +msgstr "발송이 이미 전송되었습니다" #: order/models.py:2439 msgid "Shipment has no allocated stock items" -msgstr "" +msgstr "발송에 할당된 재고 품목이 없습니다" #: order/models.py:2446 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "발송은 완료하기 전에 확인되어야 합니다" #: order/models.py:2516 msgid "Sales Order Extra Line" -msgstr "" +msgstr "판매 주문 추가 라인" #: order/models.py:2545 msgid "Sales Order Allocation" -msgstr "" +msgstr "판매 주문 할당" #: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" -msgstr "" +msgstr "재고 품목이 할당되지 않았습니다" #: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" -msgstr "" +msgstr "부품이 다른 라인에 재고 품목을 할당할 수 없습니다" #: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "부품이 없는 라인에는 재고를 할당할 수 없습니다" #: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" +msgstr "할당 수량은 재고 수량을 초과할 수 없습니다" #: order/models.py:2599 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "할당 수량은 0보다 커야 합니다" #: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" -msgstr "" +msgstr "일련번호가 있는 재고 품목의 수량은 1이어야 합니다" #: order/models.py:2605 msgid "Sales order does not match shipment" -msgstr "" +msgstr "판매 주문이 발송과 일치하지 않습니다" #: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" -msgstr "" +msgstr "발송이 판매 주문과 일치하지 않습니다" #: order/models.py:2614 msgid "Line" -msgstr "" +msgstr "라인" #: order/models.py:2625 msgid "Sales order shipment reference" -msgstr "" +msgstr "판매 주문 발송 참조" #: order/models.py:2638 order/models.py:3064 msgid "Item" -msgstr "" +msgstr "품목" #: order/models.py:2639 msgid "Select stock item to allocate" -msgstr "" +msgstr "할당할 재고 품목을 선택하세요" #: order/models.py:2648 msgid "Enter stock allocation quantity" -msgstr "" +msgstr "재고 할당 수량을 입력하세요" #: order/models.py:2765 msgid "Return Order reference" -msgstr "" +msgstr "반품 주문 참조" #: order/models.py:2777 msgid "Company from which items are being returned" -msgstr "" +msgstr "품목이 반품되는 회사" #: order/models.py:2790 msgid "Return order status" -msgstr "" +msgstr "반품 주문 상태" #: order/models.py:3022 msgid "Return Order Line Item" -msgstr "" +msgstr "반품 주문 라인 항목" #: order/models.py:3035 msgid "Stock item must be specified" -msgstr "" +msgstr "재고 품목을 지정해야 합니다" #: order/models.py:3039 msgid "Return quantity exceeds stock quantity" -msgstr "" +msgstr "반품 수량이 재고 수량을 초과합니다" #: order/models.py:3044 msgid "Return quantity must be greater than zero" -msgstr "" +msgstr "반품 수량은 0보다 커야 합니다" #: order/models.py:3049 msgid "Invalid quantity for serialized stock item" -msgstr "" +msgstr "일련번호가 있는 재고 품목에 대한 수량이 올바르지 않습니다" #: order/models.py:3065 msgid "Select item to return from customer" -msgstr "" +msgstr "고객에게서 반품받을 품목을 선택하세요" #: order/models.py:3080 msgid "Received Date" -msgstr "" +msgstr "수령일" #: order/models.py:3081 msgid "The date this return item was received" -msgstr "" +msgstr "이 반품 품목을 수령한 날짜" #: order/models.py:3093 msgid "Outcome" -msgstr "" +msgstr "결과" #: order/models.py:3094 msgid "Outcome for this line item" -msgstr "" +msgstr "이 라인 항목의 결과" #: order/models.py:3101 msgid "Cost associated with return or repair for this line item" -msgstr "" +msgstr "이 라인 항목의 반품 또는 수리에 관련된 비용" #: order/models.py:3111 msgid "Return Order Extra Line" -msgstr "" +msgstr "반품 주문 추가 라인" #: order/serializers.py:75 msgid "Order ID" -msgstr "" +msgstr "주문 ID" #: order/serializers.py:75 msgid "ID of the order to duplicate" -msgstr "" +msgstr "복제할 주문의 ID" #: order/serializers.py:81 msgid "Copy Lines" -msgstr "" +msgstr "라인 복사" #: order/serializers.py:82 msgid "Copy line items from the original order" -msgstr "" +msgstr "원본 주문에서 라인 항목을 복사" #: order/serializers.py:88 msgid "Copy Extra Lines" -msgstr "" +msgstr "추가 라인 복사" #: order/serializers.py:89 msgid "Copy extra line items from the original order" -msgstr "" +msgstr "원본 주문에서 추가 라인 항목을 복사" #: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" -msgstr "" +msgstr "매개변수 복사" #: order/serializers.py:96 msgid "Copy order parameters from the original order" -msgstr "" +msgstr "원본 주문에서 주문 매개변수를 복사" #: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" -msgstr "" +msgstr "라인 항목" #: order/serializers.py:116 msgid "Completed Lines" -msgstr "" +msgstr "완료된 라인" #: order/serializers.py:184 msgid "Duplicate Order" -msgstr "" +msgstr "주문 복제" #: order/serializers.py:185 msgid "Specify options for duplicating this order" -msgstr "" +msgstr "이 주문을 복제하기 위한 옵션을 지정하세요" #: order/serializers.py:264 msgid "Invalid order ID" -msgstr "" +msgstr "유효하지 않은 주문 ID" #: order/serializers.py:444 msgid "Supplier Name" -msgstr "" +msgstr "공급업체 이름" #: order/serializers.py:493 msgid "Order cannot be cancelled" -msgstr "" +msgstr "주문을 취소할 수 없습니다" #: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" -msgstr "" +msgstr "미완료 라인 항목이 있어도 주문을 종료할 수 있도록 허용" #: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" -msgstr "" +msgstr "주문에 미완료 라인 항목이 있습니다" #: order/serializers.py:638 msgid "Order is not open" -msgstr "" +msgstr "주문이 열려 있지 않습니다" #: order/serializers.py:676 msgid "Auto Pricing" -msgstr "" +msgstr "자동 가격 책정" #: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" +msgstr "공급업체 부품 데이터를 기반으로 구매 가격을 자동으로 계산" #: order/serializers.py:695 msgid "Purchase price currency" -msgstr "" +msgstr "구매 가격 통화" #: order/serializers.py:726 msgid "Merge Items" -msgstr "" +msgstr "항목 병합" #: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" +msgstr "부품, 목적지, 목표일이 같은 항목을 하나의 라인 항목으로 병합" #: order/serializers.py:735 part/serializers.py:485 msgid "SKU" -msgstr "" +msgstr "SKU" #: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" -msgstr "" +msgstr "내부 부품 번호" #: order/serializers.py:757 msgid "Internal Part Name" -msgstr "" +msgstr "내부 부품 이름" #: order/serializers.py:773 msgid "Supplier part must be specified" -msgstr "" +msgstr "공급업체 부품을 지정해야 합니다" #: order/serializers.py:776 msgid "Purchase order must be specified" -msgstr "" +msgstr "구매 주문을 지정해야 합니다" #: order/serializers.py:784 msgid "Supplier must match purchase order" -msgstr "" +msgstr "공급업체는 구매 주문과 일치해야 합니다" #: order/serializers.py:785 msgid "Purchase order must match supplier" -msgstr "" +msgstr "구매 주문은 공급업체와 일치해야 합니다" #: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" -msgstr "" +msgstr "라인 항목" #: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" -msgstr "" +msgstr "수령 품목의 목적지 위치를 선택하세요" #: order/serializers.py:862 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 배치 코드를 입력하세요" #: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" -msgstr "" +msgstr "만료일" #: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 만료일을 입력하세요" #: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 일련번호를 입력하세요" #: order/serializers.py:888 msgid "Override packaging information for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 포장 정보를 재정의" #: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" -msgstr "" +msgstr "입고 재고 품목에 대한 추가 메모" #: order/serializers.py:903 msgid "Barcode" -msgstr "" +msgstr "바코드" #: order/serializers.py:904 msgid "Scanned barcode" -msgstr "" +msgstr "스캔된 바코드" #: order/serializers.py:920 msgid "Barcode is already in use" -msgstr "" +msgstr "바코드가 이미 사용 중입니다" #: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" -msgstr "" +msgstr "라인 항목을 제공해야 합니다" #: order/serializers.py:1022 msgid "Destination location must be specified" -msgstr "" +msgstr "목적지 위치를 지정해야 합니다" #: order/serializers.py:1029 msgid "Supplied barcode values must be unique" -msgstr "" +msgstr "제공된 바코드 값은 고유해야 합니다" #: order/serializers.py:1154 msgid "Shipments" -msgstr "" +msgstr "발송" #: order/serializers.py:1158 msgid "Completed Shipments" -msgstr "" +msgstr "완료된 발송" #: order/serializers.py:1162 msgid "Allocated Lines" -msgstr "" +msgstr "할당된 라인" #: order/serializers.py:1355 msgid "Sale price currency" -msgstr "" +msgstr "판매 가격 통화" #: order/serializers.py:1402 msgid "Allocated Items" -msgstr "" +msgstr "할당된 품목" #: order/serializers.py:1600 msgid "No shipment details provided" -msgstr "" +msgstr "발송 세부 정보가 제공되지 않았습니다" #: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" -msgstr "" +msgstr "라인 항목이 이 주문과 연결되어 있지 않습니다" #: order/serializers.py:1651 msgid "Quantity must be positive" -msgstr "" +msgstr "수량은 양수여야 합니다" #: order/serializers.py:1788 msgid "Enter serial numbers to allocate" -msgstr "" +msgstr "할당할 일련번호를 입력하세요" #: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" -msgstr "" +msgstr "발송이 이미 발송되었습니다" #: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" -msgstr "" +msgstr "발송이 이 주문과 연결되어 있지 않습니다" #: order/serializers.py:1868 msgid "No match found for the following serial numbers" -msgstr "" +msgstr "다음 일련번호에 대한 일치 항목을 찾을 수 없습니다" #: order/serializers.py:1875 msgid "The following serial numbers are unavailable" -msgstr "" +msgstr "다음 일련번호는 사용할 수 없습니다" #: order/serializers.py:2106 msgid "Return order line item" -msgstr "" +msgstr "반품 주문 라인 항목" #: order/serializers.py:2116 msgid "Line item does not match return order" -msgstr "" +msgstr "라인 항목이 반품 주문과 일치하지 않습니다" #: order/serializers.py:2119 msgid "Line item has already been received" -msgstr "" +msgstr "라인 항목이 이미 수령되었습니다" #: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" -msgstr "" +msgstr "진행 중인 주문에 대해서만 품목을 수령할 수 있습니다" #: order/serializers.py:2232 msgid "Quantity to return" -msgstr "" +msgstr "반품 수량" #: order/serializers.py:2257 msgid "Line price currency" -msgstr "" +msgstr "라인 가격 통화" #: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16 msgid "Lost" -msgstr "" +msgstr "분실" #: order/status_codes.py:18 order/status_codes.py:55 stock/status_codes.py:24 msgid "Returned" -msgstr "" +msgstr "반품됨" #: order/status_codes.py:47 order/status_codes.py:79 msgid "In Progress" -msgstr "" +msgstr "진행 중" #: order/status_codes.py:105 msgid "Return" -msgstr "" +msgstr "반품" #: order/status_codes.py:108 msgid "Repair" -msgstr "" +msgstr "수리" #: order/status_codes.py:111 msgid "Replace" -msgstr "" +msgstr "교체" #: order/status_codes.py:114 msgid "Refund" -msgstr "" +msgstr "환불" #: order/status_codes.py:117 msgid "Reject" -msgstr "" +msgstr "거부" #: order/tasks.py:48 msgid "Overdue Purchase Order" -msgstr "" +msgstr "기한 초과 구매 주문" #: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "" +msgstr "구매 주문 {po}가 이제 기한을 초과했습니다" #: order/tasks.py:118 msgid "Overdue Sales Order" -msgstr "" +msgstr "기한 초과 판매 주문" #: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "" +msgstr "판매 주문 {so}가 이제 기한을 초과했습니다" #: order/tasks.py:185 msgid "Overdue Return Order" -msgstr "" +msgstr "기한 초과 반품 주문" #: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" -msgstr "" +msgstr "반품 주문 {ro}가 이제 기한을 초과했습니다" #: part/api.py:88 msgid "Starred" -msgstr "" +msgstr "즐겨찾기" #: part/api.py:90 msgid "Filter by starred categories" -msgstr "" +msgstr "즐겨찾기 카테고리로 필터" #: part/api.py:107 stock/api.py:287 msgid "Depth" -msgstr "" +msgstr "깊이" #: part/api.py:107 msgid "Filter by category depth" -msgstr "" +msgstr "카테고리 깊이로 필터" #: part/api.py:125 stock/api.py:305 msgid "Top Level" -msgstr "" +msgstr "최상위" #: part/api.py:127 msgid "Filter by top-level categories" -msgstr "" +msgstr "최상위 카테고리로 필터" #: part/api.py:140 stock/api.py:320 msgid "Cascade" -msgstr "" +msgstr "계층 포함" #: part/api.py:142 msgid "Include sub-categories in filtered results" -msgstr "" +msgstr "필터 결과에 하위 카테고리를 포함" #: part/api.py:162 msgid "Parent" -msgstr "" +msgstr "상위" #: part/api.py:164 msgid "Filter by parent category" -msgstr "" +msgstr "상위 카테고리로 필터" #: part/api.py:199 msgid "Exclude sub-categories under the specified category" -msgstr "" +msgstr "지정된 카테고리 아래의 하위 카테고리를 제외" #: part/api.py:424 msgid "Has Results" -msgstr "" +msgstr "결과 있음" #: part/api.py:653 msgid "Is Variant" -msgstr "" +msgstr "변형 여부" #: part/api.py:661 msgid "Is Revision" -msgstr "" +msgstr "리비전 여부" #: part/api.py:671 msgid "Has Revisions" -msgstr "" +msgstr "리비전 있음" #: part/api.py:852 msgid "BOM Valid" -msgstr "" +msgstr "BOM 유효" #: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "카테고리 계층 포함" #: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "참이면 지정된 카테고리의 하위 카테고리에 있는 항목을 포함합니다" #: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "숫자 카테고리 ID 또는 'null' 값으로 필터" #: part/api.py:1280 msgid "Assembly part is active" -msgstr "" +msgstr "조립 부품이 활성 상태" #: part/api.py:1284 msgid "Assembly part is trackable" -msgstr "" +msgstr "조립 부품을 추적할 수 있음" #: part/api.py:1288 msgid "Assembly part is testable" -msgstr "" +msgstr "조립 부품을 테스트할 수 있음" #: part/api.py:1293 msgid "Component part is active" -msgstr "" +msgstr "구성 부품이 활성 상태" #: part/api.py:1297 msgid "Component part is trackable" -msgstr "" +msgstr "구성 부품을 추적할 수 있음" #: part/api.py:1301 msgid "Component part is testable" -msgstr "" +msgstr "구성 부품을 테스트할 수 있음" #: part/api.py:1305 msgid "Component part is an assembly" -msgstr "" +msgstr "구성 부품이 조립품임" #: part/api.py:1309 msgid "Component part is virtual" -msgstr "" +msgstr "구성 부품이 가상 부품임" #: part/api.py:1313 msgid "Has available stock" -msgstr "" +msgstr "사용 가능한 재고 있음" #: part/api.py:1370 msgid "Uses" -msgstr "" +msgstr "사용" #: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" -msgstr "" +msgstr "부품 카테고리" #: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" -msgstr "" +msgstr "부품 카테고리" #: part/models.py:111 part/models.py:1187 msgid "Default Location" -msgstr "" +msgstr "기본 위치" #: part/models.py:112 msgid "Default location for parts in this category" -msgstr "" +msgstr "이 카테고리의 부품 기본 위치" #: part/models.py:117 stock/models.py:204 msgid "Structural" -msgstr "" +msgstr "구조적" #: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" +msgstr "부품은 구조 카테고리에 직접 할당할 수 없지만, 하위 카테고리에 할당할 수 있습니다." #: part/models.py:128 msgid "Default keywords" -msgstr "" +msgstr "기본 키워드" #: part/models.py:129 msgid "Default keywords for parts in this category" -msgstr "" +msgstr "이 카테고리의 부품 기본 키워드" #: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" -msgstr "" +msgstr "아이콘" #: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" -msgstr "" +msgstr "아이콘(선택)" #: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" +msgstr "일부 부품이 이미 이 카테고리에 할당되어 있어 이 부품 카테고리를 구조적으로 만들 수 없습니다!" #: part/models.py:369 msgid "Part Category Parameter Template" -msgstr "" +msgstr "부품 카테고리 매개변수 템플릿" #: part/models.py:425 msgid "Default Value" -msgstr "" +msgstr "기본값" #: part/models.py:426 msgid "Default Parameter Value" -msgstr "" +msgstr "기본 매개변수 값" #: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" -msgstr "" +msgstr "부품" #: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "잠긴 부품의 매개변수는 삭제할 수 없습니다" #: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "잠긴 부품의 매개변수는 수정할 수 없습니다" #: part/models.py:590 msgid "Cannot delete this part as it is locked" -msgstr "" +msgstr "잠겨 있어 이 부품을 삭제할 수 없습니다" #: part/models.py:593 msgid "Cannot delete this part as it is still active" -msgstr "" +msgstr "여전히 활성 상태라 이 부품을 삭제할 수 없습니다" #: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" -msgstr "" +msgstr "조립품에 사용 중이라 이 부품을 삭제할 수 없습니다" #: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "" +msgstr "부품 '{self}'은(는) '{parent}'의 BOM에 사용할 수 없습니다(순환 참조)" #: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "" +msgstr "부품 '{parent}'이(가) '{self}'의 BOM에 사용되고 있습니다(순환 참조)" #: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" -msgstr "" +msgstr "IPN은 정규식 패턴 {pattern}과 일치해야 합니다" #: part/models.py:776 msgid "Part cannot be a revision of itself" -msgstr "" +msgstr "부품은 자기 자신의 개정이 될 수 없습니다" #: part/models.py:783 msgid "Revision code must be specified for a part marked as a revision" -msgstr "" +msgstr "개정으로 표시된 부품에는 개정 코드가 지정되어야 합니다" #: part/models.py:791 msgid "Revisions are only allowed for assembly parts" -msgstr "" +msgstr "개정은 조립 부품에만 허용됩니다" #: part/models.py:798 msgid "Cannot make a revision of a template part" -msgstr "" +msgstr "템플릿 부품의 개정을 만들 수 없습니다" #: part/models.py:804 msgid "Parent part must point to the same template" -msgstr "" +msgstr "상위 부품은 동일한 템플릿을 가리켜야 합니다" #: part/models.py:901 msgid "Stock item with this serial number already exists" -msgstr "" +msgstr "이 일련번호의 재고 항목이 이미 존재합니다" #: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" -msgstr "" +msgstr "부품 설정에서 중복 IPN은 허용되지 않습니다" #: part/models.py:1044 msgid "Duplicate part revision already exists." -msgstr "" +msgstr "중복된 부품 개정이 이미 존재합니다." #: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." -msgstr "" +msgstr "이 이름, IPN 및 개정의 부품이 이미 존재합니다." #: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" -msgstr "" +msgstr "부품은 구조 부품 카테고리에 할당할 수 없습니다!" #: part/models.py:1101 msgid "Part name" -msgstr "" +msgstr "부품 이름" #: part/models.py:1106 msgid "Is Template" -msgstr "" +msgstr "템플릿 여부" #: part/models.py:1107 msgid "Is this part a template part?" -msgstr "" +msgstr "이 부품은 템플릿 부품인가요?" #: part/models.py:1117 msgid "Is this part a variant of another part?" -msgstr "" +msgstr "이 부품은 다른 부품의 변형(Variant)인가요?" #: part/models.py:1118 msgid "Variant Of" -msgstr "" +msgstr "변형 대상" #: part/models.py:1125 msgid "Part description (optional)" -msgstr "" +msgstr "부품 설명(선택)" #: part/models.py:1132 msgid "Keywords" -msgstr "" +msgstr "키워드" #: part/models.py:1133 msgid "Part keywords to improve visibility in search results" -msgstr "" +msgstr "검색 결과에서 가시성을 높이기 위한 부품 키워드" #: part/models.py:1143 msgid "Part category" -msgstr "" +msgstr "부품 카테고리" #: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" -msgstr "" +msgstr "IPN" #: part/models.py:1158 msgid "Part revision or version number" -msgstr "" +msgstr "부품 개정 또는 버전 번호" #: part/models.py:1159 report/models.py:231 msgid "Revision" -msgstr "" +msgstr "개정" #: part/models.py:1168 msgid "Is this part a revision of another part?" -msgstr "" +msgstr "이 부품은 다른 부품의 개정인가요?" #: part/models.py:1169 msgid "Revision Of" -msgstr "" +msgstr "개정 대상" #: part/models.py:1185 msgid "Where is this item normally stored?" -msgstr "" +msgstr "이 항목은 보통 어디에 보관되나요?" #: part/models.py:1222 msgid "Default Expiry" -msgstr "" +msgstr "기본 만료" #: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" -msgstr "" +msgstr "이 부품의 재고 항목 만료 기간(일)" #: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" -msgstr "" +msgstr "최소 재고" #: part/models.py:1232 msgid "Minimum allowed stock level" -msgstr "" +msgstr "허용되는 최소 재고 수준" #: part/models.py:1241 msgid "Units of measure for this part" -msgstr "" +msgstr "이 부품의 측정 단위" #: part/models.py:1248 msgid "Can this part be built from other parts?" -msgstr "" +msgstr "이 부품을 다른 부품으로 조립/제작할 수 있나요?" #: part/models.py:1254 msgid "Can this part be used to build other parts?" -msgstr "" +msgstr "이 부품을 사용해 다른 부품을 제작할 수 있나요?" #: part/models.py:1260 msgid "Does this part have tracking for unique items?" -msgstr "" +msgstr "이 부품에 고유 항목 추적 기능이 있나요?" #: part/models.py:1266 msgid "Can this part have test results recorded against it?" -msgstr "" +msgstr "이 부품에 대한 테스트 결과를 기록할 수 있나요?" #: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" -msgstr "" +msgstr "이 부품을 외부 공급업체에서 구매할 수 있나요?" #: part/models.py:1278 msgid "Can this part be sold to customers?" -msgstr "" +msgstr "이 부품을 고객에게 판매할 수 있나요?" #: part/models.py:1282 msgid "Is this part active?" -msgstr "" +msgstr "이 부품이 활성 상태인가요?" #: part/models.py:1288 msgid "Locked parts cannot be edited" -msgstr "" +msgstr "잠긴 부품은 편집할 수 없습니다" #: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" -msgstr "" +msgstr "소프트웨어 제품이나 라이선스 같은 가상 부품인가요?" #: part/models.py:1299 msgid "BOM Validated" -msgstr "" +msgstr "BOM 검증됨" #: part/models.py:1300 msgid "Is the BOM for this part valid?" -msgstr "" +msgstr "이 부품의 BOM이 유효한가요?" #: part/models.py:1306 msgid "BOM checksum" -msgstr "" +msgstr "BOM 체크섬" #: part/models.py:1307 msgid "Stored BOM checksum" -msgstr "" +msgstr "저장된 BOM 체크섬" #: part/models.py:1315 msgid "BOM checked by" -msgstr "" +msgstr "BOM 검증자" #: part/models.py:1320 msgid "BOM checked date" -msgstr "" +msgstr "BOM 검증 날짜" #: part/models.py:1336 msgid "Creation User" -msgstr "" +msgstr "생성 사용자" #: part/models.py:1346 msgid "Owner responsible for this part" -msgstr "" +msgstr "이 부품의 책임 소유자" #: part/models.py:2303 msgid "Sell multiple" -msgstr "" +msgstr "판매 배수" #: part/models.py:3308 msgid "Currency used to cache pricing calculations" -msgstr "" +msgstr "가격 계산 캐시에 사용되는 통화" #: part/models.py:3324 msgid "Minimum BOM Cost" -msgstr "" +msgstr "최소 BOM 비용" #: part/models.py:3325 msgid "Minimum cost of component parts" -msgstr "" +msgstr "구성 부품의 최소 비용" #: part/models.py:3331 msgid "Maximum BOM Cost" -msgstr "" +msgstr "최대 BOM 비용" #: part/models.py:3332 msgid "Maximum cost of component parts" -msgstr "" +msgstr "구성 부품의 최대 비용" #: part/models.py:3338 msgid "Minimum Purchase Cost" -msgstr "" +msgstr "최소 구매 비용" #: part/models.py:3339 msgid "Minimum historical purchase cost" -msgstr "" +msgstr "과거 구매 비용의 최소값" #: part/models.py:3345 msgid "Maximum Purchase Cost" -msgstr "" +msgstr "최대 구매 비용" #: part/models.py:3346 msgid "Maximum historical purchase cost" -msgstr "" +msgstr "과거 구매 비용의 최대값" #: part/models.py:3352 msgid "Minimum Internal Price" -msgstr "" +msgstr "최소 내부 가격" #: part/models.py:3353 msgid "Minimum cost based on internal price breaks" -msgstr "" +msgstr "내부 가격 구간에 기반한 최소 비용" #: part/models.py:3359 msgid "Maximum Internal Price" -msgstr "" +msgstr "최대 내부 가격" #: part/models.py:3360 msgid "Maximum cost based on internal price breaks" -msgstr "" +msgstr "내부 가격 구간에 기반한 최대 비용" #: part/models.py:3366 msgid "Minimum Supplier Price" -msgstr "" +msgstr "최소 공급업체 가격" #: part/models.py:3367 msgid "Minimum price of part from external suppliers" -msgstr "" +msgstr "외부 공급업체로부터의 최소 가격" #: part/models.py:3373 msgid "Maximum Supplier Price" -msgstr "" +msgstr "최대 공급업체 가격" #: part/models.py:3374 msgid "Maximum price of part from external suppliers" -msgstr "" +msgstr "외부 공급업체로부터의 최대 가격" #: part/models.py:3380 msgid "Minimum Variant Cost" -msgstr "" +msgstr "최소 변형 비용" #: part/models.py:3381 msgid "Calculated minimum cost of variant parts" -msgstr "" +msgstr "변형 부품의 계산된 최소 비용" #: part/models.py:3387 msgid "Maximum Variant Cost" -msgstr "" +msgstr "최대 변형 비용" #: part/models.py:3388 msgid "Calculated maximum cost of variant parts" -msgstr "" +msgstr "변형 부품의 계산된 최대 비용" #: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" -msgstr "" +msgstr "최소 비용" #: part/models.py:3395 msgid "Override minimum cost" -msgstr "" +msgstr "최소 비용 재정의" #: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" -msgstr "" +msgstr "최대 비용" #: part/models.py:3402 msgid "Override maximum cost" -msgstr "" +msgstr "최대 비용 재정의" #: part/models.py:3409 msgid "Calculated overall minimum cost" -msgstr "" +msgstr "계산된 전체 최소 비용" #: part/models.py:3416 msgid "Calculated overall maximum cost" -msgstr "" +msgstr "계산된 전체 최대 비용" #: part/models.py:3422 msgid "Minimum Sale Price" -msgstr "" +msgstr "최소 판매 가격" #: part/models.py:3423 msgid "Minimum sale price based on price breaks" -msgstr "" +msgstr "가격 구간에 기반한 최소 판매 가격" #: part/models.py:3429 msgid "Maximum Sale Price" -msgstr "" +msgstr "최대 판매 가격" #: part/models.py:3430 msgid "Maximum sale price based on price breaks" -msgstr "" +msgstr "가격 구간에 기반한 최대 판매 가격" #: part/models.py:3436 msgid "Minimum Sale Cost" -msgstr "" +msgstr "최소 판매 비용" #: part/models.py:3437 msgid "Minimum historical sale price" -msgstr "" +msgstr "과거 판매 가격의 최소값" #: part/models.py:3443 msgid "Maximum Sale Cost" -msgstr "" +msgstr "최대 판매 비용" #: part/models.py:3444 msgid "Maximum historical sale price" -msgstr "" +msgstr "과거 판매 가격의 최대값" #: part/models.py:3462 msgid "Part for stocktake" -msgstr "" +msgstr "재고 조사 대상 부품" #: part/models.py:3467 msgid "Item Count" -msgstr "" +msgstr "항목 수" #: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" -msgstr "" +msgstr "재고 조사 시점의 개별 재고 항목 수" #: part/models.py:3476 msgid "Total available stock at time of stocktake" -msgstr "" +msgstr "재고 조사 시점의 사용 가능한 총 재고" #: part/models.py:3480 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" -msgstr "" +msgstr "날짜" #: part/models.py:3481 msgid "Date stocktake was performed" -msgstr "" +msgstr "재고 조사가 수행된 날짜" #: part/models.py:3488 msgid "Minimum Stock Cost" -msgstr "" +msgstr "최소 재고 비용" #: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" -msgstr "" +msgstr "보유 재고의 추정 최소 비용" #: part/models.py:3495 msgid "Maximum Stock Cost" -msgstr "" +msgstr "최대 재고 비용" #: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" -msgstr "" +msgstr "보유 재고의 추정 최대 비용" #: part/models.py:3506 msgid "Part Sale Price Break" -msgstr "" +msgstr "부품 판매 가격 구간" #: part/models.py:3620 msgid "Part Test Template" -msgstr "" +msgstr "부품 테스트 템플릿" #: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" +msgstr "템플릿 이름이 올바르지 않습니다 - 영숫자 문자를 최소 1개 포함해야 합니다" #: part/models.py:3678 msgid "Test templates can only be created for testable parts" -msgstr "" +msgstr "테스트 템플릿은 테스트 가능한 부품에만 만들 수 있습니다" #: part/models.py:3692 msgid "Test template with the same key already exists for part" -msgstr "" +msgstr "같은 키의 테스트 템플릿이 이 부품에 이미 존재합니다" #: part/models.py:3709 msgid "Test Name" -msgstr "" +msgstr "테스트 이름" #: part/models.py:3710 msgid "Enter a name for the test" -msgstr "" +msgstr "테스트 이름을 입력하세요" #: part/models.py:3716 msgid "Test Key" -msgstr "" +msgstr "테스트 키" #: part/models.py:3717 msgid "Simplified key for the test" -msgstr "" +msgstr "테스트를 위한 단순화된 키" #: part/models.py:3724 msgid "Test Description" -msgstr "" +msgstr "테스트 설명" #: part/models.py:3725 msgid "Enter description for this test" -msgstr "" +msgstr "이 테스트에 대한 설명을 입력하세요" #: part/models.py:3729 msgid "Is this test enabled?" -msgstr "" +msgstr "이 테스트가 활성화되어 있나요?" #: part/models.py:3734 msgid "Required" -msgstr "" +msgstr "필수" #: part/models.py:3735 msgid "Is this test required to pass?" -msgstr "" +msgstr "이 테스트는 통과가 필수인가요?" #: part/models.py:3740 msgid "Requires Value" -msgstr "" +msgstr "값 필요" #: part/models.py:3741 msgid "Does this test require a value when adding a test result?" -msgstr "" +msgstr "테스트 결과를 추가할 때 값이 필요한가요?" #: part/models.py:3746 msgid "Requires Attachment" -msgstr "" +msgstr "첨부 필요" #: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" -msgstr "" +msgstr "테스트 결과를 추가할 때 파일 첨부가 필요한가요?" #: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" -msgstr "" +msgstr "이 테스트의 유효한 선택지(쉼표로 구분)" #: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" -msgstr "" +msgstr "조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" #: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" +msgstr "변형 조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" #: part/models.py:3966 msgid "Select parent part" -msgstr "" +msgstr "상위 부품을 선택하세요" #: part/models.py:3976 msgid "Sub part" -msgstr "" +msgstr "하위 부품" #: part/models.py:3977 msgid "Select part to be used in BOM" -msgstr "" +msgstr "BOM에 사용할 부품을 선택하세요" #: part/models.py:3988 msgid "BOM quantity for this BOM item" -msgstr "" +msgstr "이 BOM 항목의 BOM 수량" #: part/models.py:3994 msgid "This BOM item is optional" -msgstr "" +msgstr "이 BOM 항목은 선택 사항입니다" #: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" +msgstr "이 BOM 항목은 소모품입니다(제작 주문에서 추적되지 않음)" #: part/models.py:4008 msgid "Setup Quantity" -msgstr "" +msgstr "설정 수량" #: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" -msgstr "" +msgstr "설정 손실을 고려해 제작에 추가로 필요한 수량" #: part/models.py:4017 msgid "Attrition" -msgstr "" +msgstr "손실률" #: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" -msgstr "" +msgstr "제작 손실률 추정치(백분율, 0-100)" #: part/models.py:4030 msgid "Rounding Multiple" -msgstr "" +msgstr "반올림 배수" #: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" -msgstr "" +msgstr "필요 생산 수량을 이 값의 가장 가까운 배수로 올림합니다" #: part/models.py:4040 msgid "BOM item reference" -msgstr "" +msgstr "BOM 항목 참조" #: part/models.py:4048 msgid "BOM item notes" -msgstr "" +msgstr "BOM 항목 메모" #: part/models.py:4054 msgid "Checksum" -msgstr "" +msgstr "체크섬" #: part/models.py:4055 msgid "BOM line checksum" -msgstr "" +msgstr "BOM 라인 체크섬" #: part/models.py:4060 msgid "Validated" -msgstr "" +msgstr "검증됨" #: part/models.py:4061 msgid "This BOM item has been validated" -msgstr "" +msgstr "이 BOM 항목이 검증되었습니다" #: part/models.py:4066 msgid "Gets inherited" -msgstr "" +msgstr "상속됨" #: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" +msgstr "이 BOM 항목은 변형 부품의 BOM에 상속됩니다" #: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" +msgstr "변형 부품의 재고 항목을 이 BOM 항목에 사용할 수 있습니다" #: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" -msgstr "" +msgstr "추적 가능한 부품의 수량은 정수여야 합니다" #: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" -msgstr "" +msgstr "하위 부품을 지정해야 합니다" #: part/models.py:4343 msgid "BOM Item Substitute" -msgstr "" +msgstr "BOM 항목 대체품" #: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" -msgstr "" +msgstr "대체 부품은 기준 부품과 같을 수 없습니다" #: part/models.py:4377 msgid "Parent BOM item" -msgstr "" +msgstr "상위 BOM 항목" #: part/models.py:4385 msgid "Substitute part" -msgstr "" +msgstr "대체 부품" #: part/models.py:4401 msgid "Part 1" -msgstr "" +msgstr "부품 1" #: part/models.py:4409 msgid "Part 2" -msgstr "" +msgstr "부품 2" #: part/models.py:4410 msgid "Select Related Part" -msgstr "" +msgstr "관련 부품 선택" #: part/models.py:4417 msgid "Note for this relationship" -msgstr "" +msgstr "이 관계에 대한 메모" #: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" -msgstr "" +msgstr "부품과 자기 자신 사이에는 부품 관계를 만들 수 없습니다" #: part/models.py:4441 msgid "Duplicate relationship already exists" -msgstr "" +msgstr "중복된 관계가 이미 존재합니다" #: part/serializers.py:109 msgid "Parent Category" -msgstr "" +msgstr "상위 카테고리" #: part/serializers.py:110 msgid "Parent part category" -msgstr "" +msgstr "상위 부품 카테고리" #: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" -msgstr "" +msgstr "하위 카테고리" #: part/serializers.py:209 msgid "Results" -msgstr "" +msgstr "결과" #: part/serializers.py:210 msgid "Number of results recorded against this template" -msgstr "" +msgstr "이 템플릿에 대해 기록된 결과 수" #: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" -msgstr "" +msgstr "이 재고 항목의 구매 통화" #: part/serializers.py:286 msgid "File is not an image" -msgstr "" +msgstr "파일이 이미지가 아닙니다" #: part/serializers.py:396 msgid "Original Part" -msgstr "" +msgstr "원본 부품" #: part/serializers.py:397 msgid "Select original part to duplicate" -msgstr "" +msgstr "복제할 원본 부품을 선택하세요" #: part/serializers.py:402 msgid "Copy Image" -msgstr "" +msgstr "이미지 복사" #: part/serializers.py:403 msgid "Copy image from original part" -msgstr "" +msgstr "원본 부품의 이미지를 복사합니다" #: part/serializers.py:409 msgid "Copy BOM" -msgstr "" +msgstr "BOM 복사" #: part/serializers.py:410 msgid "Copy bill of materials from original part" -msgstr "" +msgstr "원본 부품의 자재 명세서(BOM)를 복사합니다" #: part/serializers.py:417 msgid "Copy parameter data from original part" -msgstr "" +msgstr "원본 부품의 매개변수 데이터를 복사합니다" #: part/serializers.py:423 msgid "Copy Notes" -msgstr "" +msgstr "메모 복사" #: part/serializers.py:424 msgid "Copy notes from original part" -msgstr "" +msgstr "원본 부품의 메모를 복사합니다" #: part/serializers.py:430 msgid "Copy Tests" -msgstr "" +msgstr "테스트 복사" #: part/serializers.py:431 msgid "Copy test templates from original part" -msgstr "" +msgstr "원본 부품의 테스트 템플릿을 복사합니다" #: part/serializers.py:449 msgid "Initial Stock Quantity" -msgstr "" +msgstr "초기 재고 수량" #: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" +msgstr "이 부품의 초기 재고 수량을 지정하세요. 수량이 0이면 재고가 추가되지 않습니다." #: part/serializers.py:458 msgid "Initial Stock Location" -msgstr "" +msgstr "초기 재고 위치" #: part/serializers.py:459 msgid "Specify initial stock location for this Part" -msgstr "" +msgstr "이 부품의 초기 재고 위치를 지정하세요" #: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" -msgstr "" +msgstr "공급업체를 선택하세요(또는 비워 두고 건너뛰기)" #: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" -msgstr "" +msgstr "제조사를 선택하세요(또는 비워 두고 건너뛰기)" #: part/serializers.py:502 msgid "Manufacturer part number" -msgstr "" +msgstr "제조사 부품 번호" #: part/serializers.py:509 msgid "Selected company is not a valid supplier" -msgstr "" +msgstr "선택한 회사는 유효한 공급업체가 아닙니다" #: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" -msgstr "" +msgstr "선택한 회사는 유효한 제조사가 아닙니다" #: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" -msgstr "" +msgstr "이 MPN과 일치하는 제조사 부품이 이미 존재합니다" #: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" -msgstr "" +msgstr "이 SKU와 일치하는 공급업체 부품이 이미 존재합니다" #: part/serializers.py:816 msgid "Category Name" -msgstr "" +msgstr "카테고리 이름" #: part/serializers.py:845 msgid "Building" -msgstr "" +msgstr "제작 중" #: part/serializers.py:846 msgid "Quantity of this part currently being in production" -msgstr "" +msgstr "현재 생산 중인 이 부품의 수량" #: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" -msgstr "" +msgstr "제작 예정인 이 부품의 미완료 수량" #: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" -msgstr "" +msgstr "재고 항목" #: part/serializers.py:877 msgid "Revisions" -msgstr "" +msgstr "개정" #: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" -msgstr "" +msgstr "총 재고" #: part/serializers.py:889 msgid "Unallocated Stock" -msgstr "" +msgstr "미할당 재고" #: part/serializers.py:897 msgid "Variant Stock" -msgstr "" +msgstr "변형 재고" #: part/serializers.py:968 msgid "Duplicate Part" -msgstr "" +msgstr "부품 복제" #: part/serializers.py:969 msgid "Copy initial data from another Part" -msgstr "" +msgstr "다른 부품에서 초기 데이터를 복사합니다" #: part/serializers.py:975 msgid "Initial Stock" -msgstr "" +msgstr "초기 재고" #: part/serializers.py:976 msgid "Create Part with initial stock quantity" -msgstr "" +msgstr "초기 재고 수량과 함께 부품을 생성합니다" #: part/serializers.py:982 msgid "Supplier Information" -msgstr "" +msgstr "공급업체 정보" #: part/serializers.py:983 msgid "Add initial supplier information for this part" -msgstr "" +msgstr "이 부품에 대한 초기 공급업체 정보를 추가합니다" #: part/serializers.py:992 msgid "Copy Category Parameters" -msgstr "" +msgstr "카테고리 매개변수 복사" #: part/serializers.py:993 msgid "Copy parameter templates from selected part category" -msgstr "" +msgstr "선택한 부품 카테고리의 매개변수 템플릿을 복사합니다" #: part/serializers.py:998 msgid "Existing Image" -msgstr "" +msgstr "기존 이미지" #: part/serializers.py:999 msgid "Filename of an existing part image" -msgstr "" +msgstr "기존 부품 이미지의 파일명" #: part/serializers.py:1016 msgid "Image file does not exist" -msgstr "" +msgstr "이미지 파일이 존재하지 않습니다" #: part/serializers.py:1160 msgid "Validate entire Bill of Materials" -msgstr "" +msgstr "전체 자재 명세서(BOM) 검증" #: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" -msgstr "" +msgstr "제작 가능" #: part/serializers.py:1211 msgid "Required for Build Orders" -msgstr "" +msgstr "제작 주문에 필요" #: part/serializers.py:1216 msgid "Allocated to Build Orders" -msgstr "" +msgstr "제작 주문에 할당됨" #: part/serializers.py:1223 msgid "Required for Sales Orders" -msgstr "" +msgstr "판매 주문에 필요" #: part/serializers.py:1227 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "판매 주문에 할당됨" #: part/serializers.py:1287 msgid "Part IPN" -msgstr "" +msgstr "부품 IPN" #: part/serializers.py:1294 msgid "Part Description" -msgstr "" +msgstr "부품 설명" #: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" -msgstr "" +msgstr "재고 조사 정보를 생성할 부품을 선택하세요(및 모든 변형 부품)." #: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" -msgstr "" +msgstr "해당 카테고리(및 하위 카테고리)의 모든 부품을 포함할 카테고리를 선택하세요" #: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" -msgstr "" +msgstr "해당 위치(하위 위치 포함)에 재고가 있는 모든 부품을 포함할 위치를 선택하세요" #: part/serializers.py:1365 msgid "Generate Stocktake Entries" -msgstr "" +msgstr "재고 조사 항목 생성" #: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" -msgstr "" +msgstr "선택한 부품에 대한 재고 조사 항목을 저장합니다" #: part/serializers.py:1373 msgid "Generate Report" -msgstr "" +msgstr "보고서 생성" #: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" -msgstr "" +msgstr "선택한 부품에 대한 재고 조사 보고서를 생성합니다" #: part/serializers.py:1477 msgid "Minimum Price" -msgstr "" +msgstr "최소 가격" #: part/serializers.py:1478 msgid "Override calculated value for minimum price" -msgstr "" +msgstr "계산된 최소 가격 값을 재정의합니다" #: part/serializers.py:1485 msgid "Minimum price currency" -msgstr "" +msgstr "최소 가격 통화" #: part/serializers.py:1492 msgid "Maximum Price" -msgstr "" +msgstr "최대 가격" #: part/serializers.py:1493 msgid "Override calculated value for maximum price" -msgstr "" +msgstr "계산된 최대 가격 값을 재정의합니다" #: part/serializers.py:1500 msgid "Maximum price currency" -msgstr "" +msgstr "최대 가격 통화" #: part/serializers.py:1529 msgid "Update" -msgstr "" +msgstr "업데이트" #: part/serializers.py:1530 msgid "Update pricing for this part" -msgstr "" +msgstr "이 부품의 가격 정보를 업데이트합니다" #: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" -msgstr "" +msgstr "제공된 통화를 {default_currency}(으)로 변환할 수 없습니다" #: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" -msgstr "" +msgstr "최소 가격은 최대 가격보다 클 수 없습니다" #: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" -msgstr "" +msgstr "최대 가격은 최소 가격보다 작을 수 없습니다" #: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" -msgstr "" +msgstr "수량은 0 이상이어야 합니다" #: part/serializers.py:1729 msgid "Select the parent assembly" -msgstr "" +msgstr "상위 조립품을 선택하세요" #: part/serializers.py:1764 msgid "Select the component part" -msgstr "" +msgstr "구성 부품을 선택하세요" #: part/serializers.py:1991 msgid "Select part to copy BOM from" -msgstr "" +msgstr "BOM을 복사할 부품을 선택하세요" #: part/serializers.py:1999 msgid "Remove Existing Data" -msgstr "" +msgstr "기존 데이터 제거" #: part/serializers.py:2000 msgid "Remove existing BOM items before copying" -msgstr "" +msgstr "복사하기 전에 기존 BOM 항목을 제거합니다" #: part/serializers.py:2005 msgid "Include Inherited" -msgstr "" +msgstr "상속 항목 포함" #: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" -msgstr "" +msgstr "템플릿 부품에서 상속된 BOM 항목 포함" #: part/serializers.py:2011 msgid "Skip Invalid Rows" -msgstr "" +msgstr "잘못된 행 건너뛰기" #: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" -msgstr "" +msgstr "이 옵션을 사용하면 잘못된 행을 건너뜁니다" #: part/serializers.py:2017 msgid "Copy Substitute Parts" -msgstr "" +msgstr "대체 부품 복사" #: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" -msgstr "" +msgstr "BOM 항목을 복제할 때 대체 부품도 복사" #: part/tasks.py:42 msgid "Low stock notification" -msgstr "" +msgstr "재고 부족 알림" #: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "" +msgstr "{part.name}의 사용 가능한 재고가 설정된 최소 수준 아래로 떨어졌습니다" #: part/tasks.py:74 msgid "Stale stock notification" -msgstr "" +msgstr "유통기한 임박 재고 알림" #: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" -msgstr "" +msgstr "유통기한이 임박한 재고 항목이 1개 있습니다" #: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" -msgstr "" +msgstr "유통기한이 임박한 재고 항목이 {item_count}개 있습니다" #: part/tasks.py:89 msgid "No expiry date" -msgstr "" +msgstr "유통기한 없음" #: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" -msgstr "" +msgstr "{abs(days_diff)}일 전에 만료됨" #: part/tasks.py:99 msgid "Expires today" -msgstr "" +msgstr "오늘 만료됨" #: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" -msgstr "" +msgstr "{days_until_expiry}일" #: plugin/api.py:80 msgid "Builtin" -msgstr "" +msgstr "내장" #: plugin/api.py:94 msgid "Mandatory" -msgstr "" +msgstr "필수" #: plugin/api.py:109 msgid "Sample" -msgstr "" +msgstr "샘플" #: plugin/api.py:123 plugin/models.py:167 msgid "Installed" -msgstr "" +msgstr "설치됨" #: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" -msgstr "" +msgstr "플러그인이 현재 활성 상태이므로 삭제할 수 없습니다" #: plugin/base/action/api.py:56 msgid "No action specified" -msgstr "" +msgstr "작업이 지정되지 않았습니다" #: plugin/base/action/api.py:70 msgid "No matching action found" -msgstr "" +msgstr "일치하는 작업을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" -msgstr "" +msgstr "바코드 데이터와 일치하는 항목을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" -msgstr "" +msgstr "바코드 데이터와 일치하는 항목을 찾았습니다" #: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" -msgstr "" +msgstr "지원되지 않는 모델입니다" #: plugin/base/barcodes/api.py:259 msgid "Model instance not found" -msgstr "" +msgstr "모델 인스턴스를 찾을 수 없습니다" #: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" -msgstr "" +msgstr "바코드가 기존 항목과 일치합니다" #: plugin/base/barcodes/api.py:419 msgid "No matching part data found" -msgstr "" +msgstr "일치하는 부품 데이터를 찾을 수 없습니다" #: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" -msgstr "" +msgstr "일치하는 공급업체 부품을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" -msgstr "" +msgstr "일치하는 공급업체 부품이 여러 개 있습니다" #: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" -msgstr "" +msgstr "바코드 데이터에 일치하는 플러그인을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" -msgstr "" +msgstr "공급업체 부품과 일치함" #: plugin/base/barcodes/api.py:529 msgid "Item has already been received" -msgstr "" +msgstr "항목이 이미 입고되었습니다" #: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" -msgstr "" +msgstr "공급업체 바코드에 일치하는 플러그인이 없습니다" #: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" -msgstr "" +msgstr "일치하는 라인 항목이 여러 개 있습니다" #: plugin/base/barcodes/api.py:629 msgid "No matching line item found" -msgstr "" +msgstr "일치하는 라인 항목을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:675 msgid "No sales order provided" -msgstr "" +msgstr "판매 주문이 제공되지 않았습니다" #: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" -msgstr "" +msgstr "바코드가 기존 재고 항목과 일치하지 않습니다" #: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" -msgstr "" +msgstr "재고 항목이 라인 항목과 일치하지 않습니다" #: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" -msgstr "" +msgstr "사용 가능한 재고가 부족합니다" #: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" -msgstr "" +msgstr "재고 항목이 판매 주문에 할당되었습니다" #: plugin/base/barcodes/api.py:746 msgid "Not enough information" -msgstr "" +msgstr "정보가 충분하지 않습니다" #: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" -msgstr "" +msgstr "일치하는 항목을 찾았습니다" #: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" -msgstr "" +msgstr "공급업체 부품이 라인 항목과 일치하지 않습니다" #: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" -msgstr "" +msgstr "라인 항목이 이미 완료되었습니다" #: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" -msgstr "" +msgstr "라인 항목을 입고하려면 추가 정보가 필요합니다" #: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" -msgstr "" +msgstr "구매 주문 라인 항목을 입고했습니다" #: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" -msgstr "" +msgstr "라인 항목 입고에 실패했습니다" #: plugin/base/barcodes/serializers.py:53 msgid "Scanned barcode data" -msgstr "" +msgstr "스캔한 바코드 데이터" #: plugin/base/barcodes/serializers.py:62 msgid "Model name to generate barcode for" -msgstr "" +msgstr "바코드를 생성할 모델 이름" #: plugin/base/barcodes/serializers.py:67 msgid "Primary key of model object to generate barcode for" -msgstr "" +msgstr "바코드를 생성할 모델 객체의 기본 키" #: plugin/base/barcodes/serializers.py:137 msgid "Purchase Order to allocate items against" -msgstr "" +msgstr "항목을 할당할 구매 주문" #: plugin/base/barcodes/serializers.py:143 msgid "Purchase order is not open" -msgstr "" +msgstr "구매 주문이 열려 있지 않습니다" #: plugin/base/barcodes/serializers.py:161 msgid "Supplier to receive items from" -msgstr "" +msgstr "항목을 입고할 공급업체" #: plugin/base/barcodes/serializers.py:168 msgid "PurchaseOrder to receive items against" -msgstr "" +msgstr "항목을 입고할 구매 주문" #: plugin/base/barcodes/serializers.py:174 msgid "Purchase order has not been placed" -msgstr "" +msgstr "구매 주문이 발주되지 않았습니다" #: plugin/base/barcodes/serializers.py:182 msgid "Location to receive items into" -msgstr "" +msgstr "항목을 입고할 위치" #: plugin/base/barcodes/serializers.py:188 msgid "Cannot select a structural location" -msgstr "" +msgstr "구조적 위치를 선택할 수 없습니다" #: plugin/base/barcodes/serializers.py:196 msgid "Purchase order line item to receive items against" -msgstr "" +msgstr "항목을 입고할 구매 주문 라인 항목" #: plugin/base/barcodes/serializers.py:202 msgid "Automatically allocate stock items to the purchase order" -msgstr "" +msgstr "구매 주문에 재고 항목을 자동으로 할당" #: plugin/base/barcodes/serializers.py:215 msgid "Sales Order to allocate items against" -msgstr "" +msgstr "항목을 할당할 판매 주문" #: plugin/base/barcodes/serializers.py:221 msgid "Sales order is not open" -msgstr "" +msgstr "판매 주문이 열려 있지 않습니다" #: plugin/base/barcodes/serializers.py:229 msgid "Sales order line item to allocate items against" -msgstr "" +msgstr "항목을 할당할 판매 주문 라인 항목" #: plugin/base/barcodes/serializers.py:236 msgid "Sales order shipment to allocate items against" -msgstr "" +msgstr "항목을 할당할 판매 주문 출하" #: plugin/base/barcodes/serializers.py:242 msgid "Shipment has already been delivered" -msgstr "" +msgstr "출하가 이미 배송되었습니다" #: plugin/base/barcodes/serializers.py:247 msgid "Quantity to allocate" -msgstr "" +msgstr "할당할 수량" #: plugin/base/label/label.py:41 msgid "Label printing failed" -msgstr "" +msgstr "라벨 인쇄에 실패했습니다" #: plugin/base/label/mixins.py:53 msgid "Error rendering label to PDF" -msgstr "" +msgstr "라벨을 PDF로 렌더링하는 중 오류가 발생했습니다" #: plugin/base/label/mixins.py:67 msgid "Error rendering label to HTML" -msgstr "" +msgstr "라벨을 HTML로 렌더링하는 중 오류가 발생했습니다" #: plugin/base/label/mixins.py:144 msgid "No items provided to print" -msgstr "" +msgstr "인쇄할 항목이 제공되지 않았습니다" #: plugin/base/ui/serializers.py:30 msgid "Plugin Name" -msgstr "" +msgstr "플러그인 이름" #: plugin/base/ui/serializers.py:34 msgid "Feature Type" -msgstr "" +msgstr "기능 유형" #: plugin/base/ui/serializers.py:39 msgid "Feature Label" -msgstr "" +msgstr "기능 라벨" #: plugin/base/ui/serializers.py:44 msgid "Feature Title" -msgstr "" +msgstr "기능 제목" #: plugin/base/ui/serializers.py:49 msgid "Feature Description" -msgstr "" +msgstr "기능 설명" #: plugin/base/ui/serializers.py:54 msgid "Feature Icon" -msgstr "" +msgstr "기능 아이콘" #: plugin/base/ui/serializers.py:58 msgid "Feature Options" -msgstr "" +msgstr "기능 옵션" #: plugin/base/ui/serializers.py:61 msgid "Feature Context" -msgstr "" +msgstr "기능 컨텍스트" #: plugin/base/ui/serializers.py:64 msgid "Feature Source (javascript)" -msgstr "" +msgstr "기능 소스(JavaScript)" #: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" -msgstr "" +msgstr "InvenTree 바코드" #: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" -msgstr "" +msgstr "바코드에 대한 기본 지원을 제공합니다" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 @@ -7166,1056 +7166,1056 @@ msgstr "" #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 #: plugin/builtin/suppliers/mouser.py:20 plugin/builtin/suppliers/tme.py:22 msgid "InvenTree contributors" -msgstr "" +msgstr "InvenTree 기여자" #: plugin/builtin/barcodes/inventree_barcode.py:34 msgid "Internal Barcode Format" -msgstr "" +msgstr "내부 바코드 형식" #: plugin/builtin/barcodes/inventree_barcode.py:35 msgid "Select an internal barcode format" -msgstr "" +msgstr "내부 바코드 형식을 선택하세요" #: plugin/builtin/barcodes/inventree_barcode.py:37 msgid "JSON barcodes (human readable)" -msgstr "" +msgstr "JSON 바코드(사람이 읽기 쉬움)" #: plugin/builtin/barcodes/inventree_barcode.py:38 msgid "Short barcodes (space optimized)" -msgstr "" +msgstr "짧은 바코드(공간 최적화)" #: plugin/builtin/barcodes/inventree_barcode.py:43 msgid "Short Barcode Prefix" -msgstr "" +msgstr "짧은 바코드 접두사" #: plugin/builtin/barcodes/inventree_barcode.py:45 msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" +msgstr "짧은 바코드에 사용할 접두사를 사용자 지정합니다. 여러 InvenTree 인스턴스가 있는 환경에서 유용할 수 있습니다" #: plugin/builtin/events/auto_create_builds.py:28 msgid "Auto Create Builds" -msgstr "" +msgstr "빌드 자동 생성" #: plugin/builtin/events/auto_create_builds.py:31 msgid "Automatically create build orders for assemblies" -msgstr "" +msgstr "조립품에 대한 빌드 주문을 자동으로 생성합니다" #: plugin/builtin/events/auto_issue_orders.py:17 msgid "Auto Issue Orders" -msgstr "" +msgstr "주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:20 msgid "Automatically issue orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:30 msgid "Auto Issue Build Orders" -msgstr "" +msgstr "빌드 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:32 msgid "Automatically issue build orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 빌드 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:38 msgid "Auto Issue Purchase Orders" -msgstr "" +msgstr "구매 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:40 msgid "Automatically issue purchase orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 구매 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:46 msgid "Auto Issue Sales Orders" -msgstr "" +msgstr "판매 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:48 msgid "Automatically issue sales orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 판매 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:54 msgid "Auto Issue Return Orders" -msgstr "" +msgstr "반품 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:56 msgid "Automatically issue return orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 반품 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:62 msgid "Issue Backdated Orders" -msgstr "" +msgstr "소급 날짜 주문 발행" #: plugin/builtin/events/auto_issue_orders.py:63 msgid "Automatically issue orders that are backdated" -msgstr "" +msgstr "날짜가 소급된 주문을 자동으로 발행합니다" #: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" -msgstr "" +msgstr "레벨" #: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" -msgstr "" +msgstr "내보낼 레벨 수 - 0으로 설정하면 모든 BOM 레벨을 내보냅니다" #: plugin/builtin/exporter/bom_exporter.py:31 #: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" -msgstr "" +msgstr "총 수량" #: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" -msgstr "" +msgstr "BOM에서 각 부품의 총 수량을 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" -msgstr "" +msgstr "재고 데이터" #: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" -msgstr "" +msgstr "부품 재고 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" -msgstr "" +msgstr "가격 데이터" #: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" -msgstr "" +msgstr "부품 가격 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" -msgstr "" +msgstr "공급업체 데이터" #: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" -msgstr "" +msgstr "공급업체 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" -msgstr "" +msgstr "제조사 데이터" #: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" -msgstr "" +msgstr "제조사 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" -msgstr "" +msgstr "대체품 데이터" #: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" -msgstr "" +msgstr "대체 부품 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" -msgstr "" +msgstr "매개변수 데이터" #: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" -msgstr "" +msgstr "부품 매개변수 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" -msgstr "" +msgstr "다중 레벨 BOM 내보내기" #: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" -msgstr "" +msgstr "다중 레벨 BOM 내보내기를 지원합니다" #: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" -msgstr "" +msgstr "BOM 레벨" #: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" -msgstr "" +msgstr "대체품 {n}" #: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" -msgstr "" +msgstr "공급업체 {n}" #: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" -msgstr "" +msgstr "공급업체 {n} SKU" #: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" -msgstr "" +msgstr "공급업체 {n} MPN" #: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" -msgstr "" +msgstr "제조사 {n}" #: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" -msgstr "" +msgstr "제조사 {n} MPN" #: plugin/builtin/exporter/inventree_exporter.py:14 msgid "InvenTree Generic Exporter" -msgstr "" +msgstr "InvenTree 일반 내보내기" #: plugin/builtin/exporter/inventree_exporter.py:15 msgid "Provides support for exporting data from InvenTree" -msgstr "" +msgstr "InvenTree에서 데이터를 내보내는 기능을 지원합니다" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "비활성 제외" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "비활성 매개변수를 제외합니다" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "매개변수 내보내기" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "모델 매개변수 데이터 내보내기 도구" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" -msgstr "" +msgstr "외부 재고 포함" #: plugin/builtin/exporter/stocktake_exporter.py:26 msgid "Include external stock in the stocktake data" -msgstr "" +msgstr "재고 조사 데이터에 외부 재고를 포함합니다" #: plugin/builtin/exporter/stocktake_exporter.py:31 msgid "Include Variant Items" -msgstr "" +msgstr "변형 항목 포함" #: plugin/builtin/exporter/stocktake_exporter.py:32 msgid "Include part variant stock in pricing calculations" -msgstr "" +msgstr "가격 계산에 부품 변형 재고를 포함합니다" #: plugin/builtin/exporter/stocktake_exporter.py:44 msgid "Part Stocktake Exporter" -msgstr "" +msgstr "부품 재고 조사 내보내기" #: plugin/builtin/exporter/stocktake_exporter.py:45 msgid "Exporter for part stocktake data" -msgstr "" +msgstr "부품 재고 조사 데이터 내보내기 도구" #: plugin/builtin/exporter/stocktake_exporter.py:108 msgid "Minimum Unit Cost" -msgstr "" +msgstr "최소 단가" #: plugin/builtin/exporter/stocktake_exporter.py:109 msgid "Maximum Unit Cost" -msgstr "" +msgstr "최대 단가" #: plugin/builtin/exporter/stocktake_exporter.py:110 msgid "Minimum Total Cost" -msgstr "" +msgstr "최소 총 비용" #: plugin/builtin/exporter/stocktake_exporter.py:111 msgid "Maximum Total Cost" -msgstr "" +msgstr "최대 총 비용" #: plugin/builtin/integration/core_notifications.py:23 msgid "InvenTree UI Notifications" -msgstr "" +msgstr "InvenTree UI 알림" #: plugin/builtin/integration/core_notifications.py:26 msgid "Integrated UI notification methods" -msgstr "" +msgstr "통합 UI 알림 방법" #: plugin/builtin/integration/core_notifications.py:67 msgid "InvenTree Email Notifications" -msgstr "" +msgstr "InvenTree 이메일 알림" #: plugin/builtin/integration/core_notifications.py:70 msgid "Integrated email notification methods" -msgstr "" +msgstr "통합 이메일 알림 방법" #: plugin/builtin/integration/core_notifications.py:75 msgid "Allow email notifications" -msgstr "" +msgstr "이메일 알림 허용" #: plugin/builtin/integration/core_notifications.py:76 msgid "Allow email notifications to be sent to this user" -msgstr "" +msgstr "이 사용자에게 이메일 알림을 보낼 수 있도록 허용합니다" #: plugin/builtin/integration/core_notifications.py:123 msgid "InvenTree Slack Notifications" -msgstr "" +msgstr "InvenTree Slack 알림" #: plugin/builtin/integration/core_notifications.py:126 msgid "Integrated Slack notification methods" -msgstr "" +msgstr "통합 Slack 알림 방법" #: plugin/builtin/integration/core_notifications.py:131 msgid "Slack incoming webhook URL" -msgstr "" +msgstr "Slack 수신 웹훅 URL" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" -msgstr "" +msgstr "Slack 채널로 메시지를 보내는 데 사용되는 URL" #: plugin/builtin/integration/core_notifications.py:162 msgid "Open link" -msgstr "" +msgstr "링크 열기" #: plugin/builtin/integration/currency_exchange.py:22 msgid "InvenTree Currency Exchange" -msgstr "" +msgstr "InvenTree 환율" #: plugin/builtin/integration/currency_exchange.py:23 msgid "Default currency exchange integration" -msgstr "" +msgstr "기본 환율 통합" #: plugin/builtin/integration/machine_types.py:15 msgid "InvenTree Machines" -msgstr "" +msgstr "InvenTree 머신" #: plugin/builtin/integration/machine_types.py:16 msgid "Built-in machine types for InvenTree" -msgstr "" +msgstr "InvenTree용 내장 머신 유형" #: plugin/builtin/integration/part_notifications.py:20 msgid "Part Notifications" -msgstr "" +msgstr "부품 알림" #: plugin/builtin/integration/part_notifications.py:22 msgid "Notify users about part changes" -msgstr "" +msgstr "부품 변경 사항을 사용자에게 알립니다" #: plugin/builtin/integration/part_notifications.py:27 msgid "Send notifications" -msgstr "" +msgstr "알림 보내기" #: plugin/builtin/integration/part_notifications.py:28 msgid "Send notifications for part changes to subscribed users" -msgstr "" +msgstr "구독한 사용자에게 부품 변경 알림을 보냅니다" #: plugin/builtin/integration/part_notifications.py:45 msgid "Changed part notification" -msgstr "" +msgstr "부품 변경 알림" #: plugin/builtin/integration/part_notifications.py:55 #, python-brace-format msgid "The part `{part.name}` has been triggered with a `{part_action}` event" -msgstr "" +msgstr "부품 `{part.name}`에서 `{part_action}` 이벤트가 트리거되었습니다" #: plugin/builtin/labels/inventree_label.py:23 msgid "InvenTree PDF label printer" -msgstr "" +msgstr "InvenTree PDF 라벨 프린터" #: plugin/builtin/labels/inventree_label.py:24 msgid "Provides native support for printing PDF labels" -msgstr "" +msgstr "PDF 라벨 인쇄에 대한 기본 지원을 제공합니다" #: plugin/builtin/labels/inventree_label.py:32 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" -msgstr "" +msgstr "디버그 모드" #: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "" +msgstr "디버그 모드를 활성화하면 PDF 대신 원본 HTML을 반환합니다" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" -msgstr "" +msgstr "InvenTree 머신 라벨 프린터" #: plugin/builtin/labels/inventree_machine.py:62 msgid "Provides support for printing using a machine" -msgstr "" +msgstr "머신을 사용한 인쇄를 지원합니다" #: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" -msgstr "" +msgstr "마지막 사용" #: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" -msgstr "" +msgstr "옵션" #: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" -msgstr "" +msgstr "라벨 시트의 페이지 크기" #: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" -msgstr "" +msgstr "라벨 건너뛰기" #: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" -msgstr "" +msgstr "라벨 시트를 인쇄할 때 이 개수만큼의 라벨을 건너뜁니다" #: plugin/builtin/labels/label_sheet.py:43 msgid "Border" -msgstr "" +msgstr "테두리" #: plugin/builtin/labels/label_sheet.py:44 msgid "Print a border around each label" -msgstr "" +msgstr "각 라벨 주위에 테두리를 인쇄합니다" #: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" -msgstr "" +msgstr "가로" #: plugin/builtin/labels/label_sheet.py:50 msgid "Print the label sheet in landscape mode" -msgstr "" +msgstr "라벨 시트를 가로 모드로 인쇄합니다" #: plugin/builtin/labels/label_sheet.py:55 msgid "Page Margin" -msgstr "" +msgstr "페이지 여백" #: plugin/builtin/labels/label_sheet.py:56 msgid "Margin around the page in mm" -msgstr "" +msgstr "페이지 가장자리 여백(mm)" #: plugin/builtin/labels/label_sheet.py:69 msgid "InvenTree Label Sheet Printer" -msgstr "" +msgstr "InvenTree 라벨 시트 프린터" #: plugin/builtin/labels/label_sheet.py:70 msgid "Arrays multiple labels onto a single sheet" -msgstr "" +msgstr "여러 라벨을 한 장의 시트에 배열합니다" #: plugin/builtin/labels/label_sheet.py:122 msgid "Label is too large for page size" -msgstr "" +msgstr "라벨이 페이지 크기에 비해 너무 큽니다" #: plugin/builtin/labels/label_sheet.py:161 msgid "No labels were generated" -msgstr "" +msgstr "생성된 라벨이 없습니다" #: plugin/builtin/suppliers/digikey.py:17 msgid "Supplier Integration - DigiKey" -msgstr "" +msgstr "공급업체 통합 - DigiKey" #: plugin/builtin/suppliers/digikey.py:18 msgid "Provides support for scanning DigiKey barcodes" -msgstr "" +msgstr "DigiKey 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/digikey.py:27 msgid "The Supplier which acts as 'DigiKey'" -msgstr "" +msgstr "'DigiKey' 역할을 하는 공급업체" #: plugin/builtin/suppliers/lcsc.py:19 msgid "Supplier Integration - LCSC" -msgstr "" +msgstr "공급업체 통합 - LCSC" #: plugin/builtin/suppliers/lcsc.py:20 msgid "Provides support for scanning LCSC barcodes" -msgstr "" +msgstr "LCSC 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/lcsc.py:28 msgid "The Supplier which acts as 'LCSC'" -msgstr "" +msgstr "'LCSC' 역할을 하는 공급업체" #: plugin/builtin/suppliers/mouser.py:17 msgid "Supplier Integration - Mouser" -msgstr "" +msgstr "공급업체 통합 - Mouser" #: plugin/builtin/suppliers/mouser.py:18 msgid "Provides support for scanning Mouser barcodes" -msgstr "" +msgstr "Mouser 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/mouser.py:26 msgid "The Supplier which acts as 'Mouser'" -msgstr "" +msgstr "'Mouser' 역할을 하는 공급업체" #: plugin/builtin/suppliers/tme.py:19 msgid "Supplier Integration - TME" -msgstr "" +msgstr "공급업체 통합 - TME" #: plugin/builtin/suppliers/tme.py:20 msgid "Provides support for scanning TME barcodes" -msgstr "" +msgstr "TME 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/tme.py:28 msgid "The Supplier which acts as 'TME'" -msgstr "" +msgstr "'TME' 역할을 하는 공급업체" #: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 #: plugin/serializers.py:275 msgid "Only superuser accounts can administer plugins" -msgstr "" +msgstr "슈퍼유저 계정만 플러그인을 관리할 수 있습니다" #: plugin/installer.py:243 msgid "Plugin installation is disabled" -msgstr "" +msgstr "플러그인 설치가 비활성화되어 있습니다" #: plugin/installer.py:273 msgid "No package name or URL provided for installation" -msgstr "" +msgstr "설치할 패키지 이름 또는 URL이 제공되지 않았습니다" #: plugin/installer.py:277 msgid "Invalid characters in package name or URL" -msgstr "" +msgstr "패키지 이름 또는 URL에 잘못된 문자가 있습니다" #: plugin/installer.py:287 msgid "Installed plugin successfully" -msgstr "" +msgstr "플러그인을 성공적으로 설치했습니다" #: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" -msgstr "" +msgstr "플러그인을 {path}에 설치했습니다" #: plugin/installer.py:318 msgid "Plugin was not found in registry" -msgstr "" +msgstr "레지스트리에서 플러그인을 찾을 수 없습니다" #: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" -msgstr "" +msgstr "플러그인이 패키지 플러그인이 아닙니다" #: plugin/installer.py:324 msgid "Plugin package name not found" -msgstr "" +msgstr "플러그인 패키지 이름을 찾을 수 없습니다" #: plugin/installer.py:327 msgid "Only staff users can administer plugins" -msgstr "" +msgstr "스태프 사용자만 플러그인을 관리할 수 있습니다" #: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" -msgstr "" +msgstr "플러그인 제거가 비활성화되어 있습니다" #: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" +msgstr "플러그인이 현재 활성 상태이므로 제거할 수 없습니다" #: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" -msgstr "" +msgstr "플러그인이 필수이므로 제거할 수 없습니다" #: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" -msgstr "" +msgstr "플러그인이 샘플 플러그인이므로 제거할 수 없습니다" #: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" -msgstr "" +msgstr "플러그인이 내장 플러그인이므로 제거할 수 없습니다" #: plugin/installer.py:371 msgid "Plugin is not installed" -msgstr "" +msgstr "플러그인이 설치되어 있지 않습니다" #: plugin/installer.py:389 msgid "Plugin installation not found" -msgstr "" +msgstr "플러그인 설치 정보를 찾을 수 없습니다" #: plugin/installer.py:405 msgid "Uninstalled plugin successfully" -msgstr "" +msgstr "플러그인을 성공적으로 제거했습니다" #: plugin/models.py:39 msgid "Plugin Configuration" -msgstr "" +msgstr "플러그인 구성" #: plugin/models.py:40 msgid "Plugin Configurations" -msgstr "" +msgstr "플러그인 구성" #: plugin/models.py:47 msgid "Key of plugin" -msgstr "" +msgstr "플러그인 키" #: plugin/models.py:55 msgid "Name of the plugin" -msgstr "" +msgstr "플러그인 이름" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" -msgstr "" +msgstr "패키지 이름" #: plugin/models.py:64 msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" +msgstr "PIP로 플러그인을 설치한 경우, 설치된 패키지의 이름" #: plugin/models.py:69 msgid "Is the plugin active" -msgstr "" +msgstr "플러그인이 활성 상태인지 여부" #: plugin/models.py:176 msgid "Sample plugin" -msgstr "" +msgstr "샘플 플러그인" #: plugin/models.py:184 msgid "Builtin Plugin" -msgstr "" +msgstr "내장 플러그인" #: plugin/models.py:192 msgid "Mandatory Plugin" -msgstr "" +msgstr "필수 플러그인" #: plugin/models.py:210 msgid "Package Plugin" -msgstr "" +msgstr "패키지 플러그인" #: plugin/models.py:301 plugin/models.py:347 msgid "Plugin" -msgstr "" +msgstr "플러그인" #: plugin/plugin.py:389 msgid "No author found" -msgstr "" +msgstr "작성자를 찾을 수 없습니다" #: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "" +msgstr "플러그인 '{p}'은(는) 현재 InvenTree 버전 {v}와 호환되지 않습니다" #: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" -msgstr "" +msgstr "플러그인은 최소 버전 {v}가 필요합니다" #: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" -msgstr "" +msgstr "플러그인은 최대 버전 {v}까지 지원합니다" #: plugin/samples/integration/sample.py:52 msgid "User Setting 1" -msgstr "" +msgstr "사용자 설정 1" #: plugin/samples/integration/sample.py:53 msgid "A user setting that can be changed by the user" -msgstr "" +msgstr "사용자가 변경할 수 있는 사용자 설정" #: plugin/samples/integration/sample.py:57 msgid "User Setting 2" -msgstr "" +msgstr "사용자 설정 2" #: plugin/samples/integration/sample.py:58 msgid "Another user setting" -msgstr "" +msgstr "또 다른 사용자 설정" #: plugin/samples/integration/sample.py:63 msgid "User Setting 3" -msgstr "" +msgstr "사용자 설정 3" #: plugin/samples/integration/sample.py:64 msgid "A user setting with choices" -msgstr "" +msgstr "선택지가 있는 사용자 설정" #: plugin/samples/integration/sample.py:72 msgid "Enable PO" -msgstr "" +msgstr "구매 주문(PO) 활성화" #: plugin/samples/integration/sample.py:73 msgid "Enable PO functionality in InvenTree interface" -msgstr "" +msgstr "InvenTree 인터페이스에서 구매 주문(PO) 기능을 활성화합니다" #: plugin/samples/integration/sample.py:78 msgid "API Key" -msgstr "" +msgstr "API 키" #: plugin/samples/integration/sample.py:79 msgid "Key required for accessing external API" -msgstr "" +msgstr "외부 API에 접근하기 위한 키" #: plugin/samples/integration/sample.py:83 msgid "Numerical" -msgstr "" +msgstr "숫자" #: plugin/samples/integration/sample.py:84 msgid "A numerical setting" -msgstr "" +msgstr "숫자 설정" #: plugin/samples/integration/sample.py:90 msgid "Choice Setting" -msgstr "" +msgstr "선택 설정" #: plugin/samples/integration/sample.py:91 msgid "A setting with multiple choices" -msgstr "" +msgstr "여러 선택지가 있는 설정" #: plugin/samples/integration/sample_currency_exchange.py:15 msgid "Sample currency exchange plugin" -msgstr "" +msgstr "샘플 환율 플러그인" #: plugin/samples/integration/sample_currency_exchange.py:18 msgid "InvenTree Contributors" -msgstr "" +msgstr "InvenTree 기여자" #: plugin/samples/integration/user_interface_sample.py:27 msgid "Enable Part Panels" -msgstr "" +msgstr "부품 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:28 msgid "Enable custom panels for Part views" -msgstr "" +msgstr "부품 보기용 사용자 정의 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:33 msgid "Enable Purchase Order Panels" -msgstr "" +msgstr "구매 주문 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:34 msgid "Enable custom panels for Purchase Order views" -msgstr "" +msgstr "구매 주문 보기용 사용자 정의 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:39 msgid "Enable Broken Panels" -msgstr "" +msgstr "손상된 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:40 msgid "Enable broken panels for testing" -msgstr "" +msgstr "테스트를 위해 손상된 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:45 msgid "Enable Dynamic Panel" -msgstr "" +msgstr "동적 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:46 msgid "Enable dynamic panels for testing" -msgstr "" +msgstr "테스트를 위해 동적 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:114 msgid "Part Panel" -msgstr "" +msgstr "부품 패널" #: plugin/samples/integration/user_interface_sample.py:149 msgid "Broken Dashboard Item" -msgstr "" +msgstr "손상된 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:151 msgid "This is a broken dashboard item - it will not render!" -msgstr "" +msgstr "이것은 손상된 대시보드 항목입니다. 렌더링되지 않습니다!" #: plugin/samples/integration/user_interface_sample.py:157 msgid "Sample Dashboard Item" -msgstr "" +msgstr "샘플 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:159 msgid "This is a sample dashboard item. It renders a simple string of HTML content." -msgstr "" +msgstr "이것은 샘플 대시보드 항목입니다. 단순한 HTML 문자열 콘텐츠를 렌더링합니다." #: plugin/samples/integration/user_interface_sample.py:165 msgid "Context Dashboard Item" -msgstr "" +msgstr "컨텍스트 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:179 msgid "Admin Dashboard Item" -msgstr "" +msgstr "관리자 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:180 msgid "This is an admin-only dashboard item." -msgstr "" +msgstr "이것은 관리자 전용 대시보드 항목입니다." #: plugin/serializers.py:86 msgid "Source File" -msgstr "" +msgstr "소스 파일" #: plugin/serializers.py:87 msgid "Path to the source file for admin integration" -msgstr "" +msgstr "관리자 통합을 위한 소스 파일 경로" #: plugin/serializers.py:94 msgid "Optional context data for the admin integration" -msgstr "" +msgstr "관리자 통합을 위한 선택적 컨텍스트 데이터" #: plugin/serializers.py:110 msgid "Source URL" -msgstr "" +msgstr "소스 URL" #: plugin/serializers.py:112 msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" +msgstr "패키지 소스입니다. 사용자 정의 레지스트리 또는 VCS 경로가 될 수 있습니다" #: plugin/serializers.py:121 msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" +msgstr "플러그인 패키지 이름입니다. 버전 표기를 포함할 수도 있습니다" #: plugin/serializers.py:128 msgid "Version" -msgstr "" +msgstr "버전" #: plugin/serializers.py:130 msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "" +msgstr "플러그인 버전 지정자입니다. 최신 버전이면 비워 두세요." #: plugin/serializers.py:135 msgid "Confirm plugin installation" -msgstr "" +msgstr "플러그인 설치 확인" #: plugin/serializers.py:137 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" +msgstr "이 플러그인을 현재 인스턴스에 지금 설치합니다. 인스턴스는 유지보수 모드로 전환됩니다." #: plugin/serializers.py:150 msgid "Installation not confirmed" -msgstr "" +msgstr "설치가 확인되지 않았습니다" #: plugin/serializers.py:152 msgid "Either packagename or URL must be provided" -msgstr "" +msgstr "패키지 이름 또는 URL 중 하나는 제공되어야 합니다" #: plugin/serializers.py:191 msgid "Full reload" -msgstr "" +msgstr "전체 다시 로드" #: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" -msgstr "" +msgstr "플러그인 레지스트리를 전체 다시 로드합니다" #: plugin/serializers.py:198 msgid "Force reload" -msgstr "" +msgstr "강제 다시 로드" #: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" +msgstr "이미 로드되어 있더라도 플러그인 레지스트리를 강제로 다시 로드합니다" #: plugin/serializers.py:207 msgid "Collect plugins" -msgstr "" +msgstr "플러그인 수집" #: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" -msgstr "" +msgstr "플러그인을 수집하여 레지스트리에 추가합니다" #: plugin/serializers.py:236 msgid "Activate Plugin" -msgstr "" +msgstr "플러그인 활성화" #: plugin/serializers.py:237 msgid "Activate this plugin" -msgstr "" +msgstr "이 플러그인을 활성화합니다" #: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" -msgstr "" +msgstr "필수 플러그인은 비활성화할 수 없습니다" #: plugin/serializers.py:264 msgid "Delete configuration" -msgstr "" +msgstr "구성 삭제" #: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" -msgstr "" +msgstr "데이터베이스에서 플러그인 구성을 삭제합니다" #: plugin/serializers.py:299 msgid "The user for which this setting applies" -msgstr "" +msgstr "이 설정이 적용될 사용자" #: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" -msgstr "" +msgstr "항목" #: report/api.py:115 msgid "Plugin not found" -msgstr "" +msgstr "플러그인을 찾을 수 없습니다" #: report/api.py:117 msgid "Plugin does not support label printing" -msgstr "" +msgstr "플러그인이 라벨 인쇄를 지원하지 않습니다" #: report/api.py:165 msgid "Invalid label dimensions" -msgstr "" +msgstr "잘못된 라벨 크기입니다" #: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" -msgstr "" +msgstr "템플릿에 유효한 항목이 제공되지 않았습니다" #: report/helpers.py:43 msgid "A4" -msgstr "" +msgstr "A4" #: report/helpers.py:44 msgid "A3" -msgstr "" +msgstr "A3" #: report/helpers.py:45 msgid "Legal" -msgstr "" +msgstr "Legal" #: report/helpers.py:46 msgid "Letter" -msgstr "" +msgstr "Letter" #: report/models.py:128 msgid "Template file with this name already exists" -msgstr "" +msgstr "이 이름의 템플릿 파일이 이미 존재합니다" #: report/models.py:220 msgid "Template name" -msgstr "" +msgstr "템플릿 이름" #: report/models.py:226 msgid "Template description" -msgstr "" +msgstr "템플릿 설명" #: report/models.py:232 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "리비전 번호(자동 증가)" #: report/models.py:238 msgid "Attach to Model on Print" -msgstr "" +msgstr "인쇄 시 모델에 첨부" #: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" -msgstr "" +msgstr "인쇄 시 보고서 출력물을 연결된 모델 인스턴스에 첨부파일로 저장합니다" #: report/models.py:284 msgid "Filename Pattern" -msgstr "" +msgstr "파일명 패턴" #: report/models.py:285 msgid "Pattern for generating filenames" -msgstr "" +msgstr "파일명을 생성하기 위한 패턴" #: report/models.py:290 msgid "Template is enabled" -msgstr "" +msgstr "템플릿이 활성화됨" #: report/models.py:297 msgid "Target model type for template" -msgstr "" +msgstr "템플릿 대상 모델 유형" #: report/models.py:317 msgid "Filters" -msgstr "" +msgstr "필터" #: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +msgstr "템플릿 쿼리 필터(쉼표로 구분된 key=value 쌍 목록)" #: report/models.py:377 report/models.py:673 msgid "Template file" -msgstr "" +msgstr "템플릿 파일" #: report/models.py:385 msgid "Page size for PDF reports" -msgstr "" +msgstr "PDF 보고서 페이지 크기" #: report/models.py:391 msgid "Render report in landscape orientation" -msgstr "" +msgstr "보고서를 가로 방향으로 렌더링" #: report/models.py:396 msgid "Merge" -msgstr "" +msgstr "병합" #: report/models.py:397 msgid "Render a single report against selected items" -msgstr "" +msgstr "선택한 항목에 대해 단일 보고서를 렌더링합니다" #: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" -msgstr "" +msgstr "템플릿 {self.name}에서 생성된 보고서" #: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" -msgstr "" +msgstr "템플릿 구문 오류" #: report/models.py:556 report/models.py:595 msgid "Error rendering report" -msgstr "" +msgstr "보고서 렌더링 오류" #: report/models.py:615 msgid "Error generating report" -msgstr "" +msgstr "보고서 생성 오류" #: report/models.py:647 msgid "Error merging report outputs" -msgstr "" +msgstr "보고서 출력 병합 오류" #: report/models.py:679 msgid "Width [mm]" -msgstr "" +msgstr "너비 [mm]" #: report/models.py:680 msgid "Label width, specified in mm" -msgstr "" +msgstr "라벨 너비(mm)" #: report/models.py:686 msgid "Height [mm]" -msgstr "" +msgstr "높이 [mm]" #: report/models.py:687 msgid "Label height, specified in mm" -msgstr "" +msgstr "라벨 높이(mm)" #: report/models.py:792 msgid "Error printing labels" -msgstr "" +msgstr "라벨 인쇄 오류" #: report/models.py:811 msgid "Snippet" -msgstr "" +msgstr "스니펫" #: report/models.py:812 msgid "Report snippet file" -msgstr "" +msgstr "보고서 스니펫 파일" #: report/models.py:819 msgid "Snippet file description" -msgstr "" +msgstr "스니펫 파일 설명" #: report/models.py:837 msgid "Asset" -msgstr "" +msgstr "자산" #: report/models.py:838 msgid "Report asset file" -msgstr "" +msgstr "보고서 자산 파일" #: report/models.py:845 msgid "Asset file description" -msgstr "" +msgstr "자산 파일 설명" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "보고서 템플릿을 저장하려면 사용자 인증이 필요합니다" #: report/serializers.py:118 msgid "Select report template" -msgstr "" +msgstr "보고서 템플릿 선택" #: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" -msgstr "" +msgstr "보고서에 포함할 항목의 기본 키 목록" #: report/serializers.py:159 msgid "Select label template" -msgstr "" +msgstr "라벨 템플릿 선택" #: report/serializers.py:167 msgid "Printing Plugin" -msgstr "" +msgstr "인쇄 플러그인" #: report/serializers.py:168 msgid "Select plugin to use for label printing" -msgstr "" +msgstr "라벨 인쇄에 사용할 플러그인을 선택하세요" #: report/templates/label/part_label.html:31 #: report/templates/label/stockitem_qr.html:21 #: report/templates/label/stocklocation_qr.html:20 msgid "QR Code" -msgstr "" +msgstr "QR 코드" #: report/templates/label/part_label_code128.html:31 #: report/templates/label/stocklocation_qr_and_text.html:31 msgid "QR code" -msgstr "" +msgstr "QR 코드" #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" -msgstr "" +msgstr "자재 명세서" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "" +msgstr "필요한 자재" #: report/templates/report/inventree_build_order_report.html:98 #: report/templates/report/inventree_purchase_order_report.html:47 @@ -8226,43 +8226,43 @@ msgstr "" #: report/templates/report/inventree_test_report.html:84 #: report/templates/report/inventree_test_report.html:162 msgid "Part image" -msgstr "" +msgstr "부품 이미지" #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" -msgstr "" +msgstr "지급됨" #: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" -msgstr "" +msgstr "필요 대상" #: report/templates/report/inventree_build_order_report.html:152 msgid "Issued By" -msgstr "" +msgstr "지급자" #: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" -msgstr "" +msgstr "공급업체가 삭제되었습니다" #: report/templates/report/inventree_purchase_order_report.html:22 msgid "Order Details" -msgstr "" +msgstr "주문 상세" #: report/templates/report/inventree_purchase_order_report.html:37 #: report/templates/report/inventree_sales_order_report.html:30 msgid "Unit Price" -msgstr "" +msgstr "단가" #: report/templates/report/inventree_purchase_order_report.html:62 #: report/templates/report/inventree_return_order_report.html:48 #: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" -msgstr "" +msgstr "추가 라인 항목" #: report/templates/report/inventree_purchase_order_report.html:79 #: report/templates/report/inventree_sales_order_report.html:72 msgid "Total" -msgstr "" +msgstr "합계" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 @@ -8270,1069 +8270,1069 @@ msgstr "" #: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" -msgstr "" +msgstr "시리얼 번호" #: report/templates/report/inventree_sales_order_shipment_report.html:23 msgid "Allocations" -msgstr "" +msgstr "할당" #: report/templates/report/inventree_sales_order_shipment_report.html:47 #: templates/email/stale_stock_notification.html:20 msgid "Batch" -msgstr "" +msgstr "배치" #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" -msgstr "" +msgstr "재고 위치 항목" #: report/templates/report/inventree_stock_report_merge.html:21 #: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" -msgstr "" +msgstr "재고 품목 테스트 보고서" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 #: stock/serializers.py:655 msgid "Installed Items" -msgstr "" +msgstr "설치된 항목" #: report/templates/report/inventree_stock_report_merge.html:111 #: report/templates/report/inventree_test_report.html:167 msgid "Serial" -msgstr "" +msgstr "시리얼" #: report/templates/report/inventree_test_report.html:97 msgid "Test Results" -msgstr "" +msgstr "테스트 결과" #: report/templates/report/inventree_test_report.html:102 msgid "Test" -msgstr "" +msgstr "테스트" #: report/templates/report/inventree_test_report.html:129 msgid "Pass" -msgstr "" +msgstr "통과" #: report/templates/report/inventree_test_report.html:131 msgid "Fail" -msgstr "" +msgstr "실패" #: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" -msgstr "" +msgstr "결과 없음(필수)" #: report/templates/report/inventree_test_report.html:140 msgid "No result" -msgstr "" +msgstr "결과 없음" #: report/templatetags/report.py:166 msgid "Invalid media file path" -msgstr "" +msgstr "잘못된 미디어 파일 경로" #: report/templatetags/report.py:185 msgid "Invalid static file path" -msgstr "" +msgstr "잘못된 정적 파일 경로" #: report/templatetags/report.py:287 msgid "Asset file not found" -msgstr "" +msgstr "자산 파일을 찾을 수 없습니다" #: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" -msgstr "" +msgstr "이미지 파일을 찾을 수 없습니다" #: report/templatetags/report.py:430 msgid "No image file specified" -msgstr "" +msgstr "이미지 파일이 지정되지 않았습니다" #: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" -msgstr "" +msgstr "part_image 태그에는 Part 인스턴스가 필요합니다" #: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" -msgstr "" +msgstr "company_image 태그에는 Company 인스턴스가 필요합니다" #: stock/api.py:287 msgid "Filter by location depth" -msgstr "" +msgstr "위치 깊이로 필터" #: stock/api.py:307 msgid "Filter by top-level locations" -msgstr "" +msgstr "최상위 위치로 필터" #: stock/api.py:322 msgid "Include sub-locations in filtered results" -msgstr "" +msgstr "필터 결과에 하위 위치를 포함합니다" #: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" -msgstr "" +msgstr "상위 위치" #: stock/api.py:344 msgid "Filter by parent location" -msgstr "" +msgstr "상위 위치로 필터" #: stock/api.py:604 msgid "Part name (case insensitive)" -msgstr "" +msgstr "부품명(대소문자 구분 없음)" #: stock/api.py:610 msgid "Part name contains (case insensitive)" -msgstr "" +msgstr "부품명 포함(대소문자 구분 없음)" #: stock/api.py:616 msgid "Part name (regex)" -msgstr "" +msgstr "부품명(정규식)" #: stock/api.py:621 msgid "Part IPN (case insensitive)" -msgstr "" +msgstr "부품 IPN(대소문자 구분 없음)" #: stock/api.py:627 msgid "Part IPN contains (case insensitive)" -msgstr "" +msgstr "부품 IPN 포함(대소문자 구분 없음)" #: stock/api.py:633 msgid "Part IPN (regex)" -msgstr "" +msgstr "부품 IPN(정규식)" #: stock/api.py:645 msgid "Minimum stock" -msgstr "" +msgstr "최소 재고" #: stock/api.py:649 msgid "Maximum stock" -msgstr "" +msgstr "최대 재고" #: stock/api.py:652 msgid "Status Code" -msgstr "" +msgstr "상태 코드" #: stock/api.py:692 msgid "External Location" -msgstr "" +msgstr "외부 위치" #: stock/api.py:791 msgid "Consumed by Build Order" -msgstr "" +msgstr "작업 지시서에서 소비됨" #: stock/api.py:801 msgid "Installed in other stock item" -msgstr "" +msgstr "다른 재고 품목에 설치됨" #: stock/api.py:890 msgid "Part Tree" -msgstr "" +msgstr "부품 트리" #: stock/api.py:912 msgid "Updated before" -msgstr "" +msgstr "업데이트 날짜 이전" #: stock/api.py:916 msgid "Updated after" -msgstr "" +msgstr "업데이트 날짜 이후" #: stock/api.py:920 msgid "Stocktake Before" -msgstr "" +msgstr "재고조사 날짜 이전" #: stock/api.py:924 msgid "Stocktake After" -msgstr "" +msgstr "재고조사 날짜 이후" #: stock/api.py:929 msgid "Expiry date before" -msgstr "" +msgstr "유효기간 날짜 이전" #: stock/api.py:933 msgid "Expiry date after" -msgstr "" +msgstr "유효기간 날짜 이후" #: stock/api.py:936 stock/serializers.py:660 msgid "Stale" -msgstr "" +msgstr "장기 재고" #: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "제외할 재고 품목 PK를 제공하면 해당 품목과 모든 하위 항목을 제외합니다" #: stock/api.py:980 msgid "Cascade Locations" -msgstr "" +msgstr "위치 계단식 적용" #: stock/api.py:981 msgid "If true, include items in child locations of the given location" -msgstr "" +msgstr "true이면 지정한 위치의 하위 위치에 있는 항목을 포함합니다" #: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" -msgstr "" +msgstr "숫자 Location ID 또는 'null' 리터럴로 필터" #: stock/api.py:1087 msgid "Quantity is required" -msgstr "" +msgstr "수량이 필요합니다" #: stock/api.py:1092 msgid "Valid part must be supplied" -msgstr "" +msgstr "유효한 부품을 제공해야 합니다" #: stock/api.py:1123 msgid "The given supplier part does not exist" -msgstr "" +msgstr "지정한 공급업체 부품이 존재하지 않습니다" #: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" +msgstr "공급업체 부품에 포장 단위가 정의되어 있지만 use_pack_size 플래그가 설정되지 않았습니다" #: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" +msgstr "추적 불가능한 부품에는 시리얼 번호를 제공할 수 없습니다" #: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "설치된 항목 포함" #: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "true이면 지정한 재고 품목 아래에 설치된 항목의 테스트 결과를 포함합니다" #: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "숫자 재고 품목 ID로 필터" #: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "ID가 {id}인 재고 품목이 존재하지 않습니다" #: stock/api.py:1516 msgid "Include Part Variants" -msgstr "" +msgstr "부품 변형 포함" #: stock/api.py:1546 msgid "Date after" -msgstr "" +msgstr "날짜 이후" #: stock/api.py:1550 msgid "Date before" -msgstr "" +msgstr "날짜 이전" #: stock/models.py:73 msgid "Stock Location type" -msgstr "" +msgstr "재고 위치 유형" #: stock/models.py:74 msgid "Stock Location types" -msgstr "" +msgstr "재고 위치 유형" #: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" +msgstr "아이콘이 설정되지 않은 모든 위치에 대한 기본 아이콘(선택)" #: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" -msgstr "" +msgstr "재고 위치" #: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" -msgstr "" +msgstr "재고 위치" #: stock/models.py:197 stock/models.py:1217 msgid "Owner" -msgstr "" +msgstr "소유자" #: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" -msgstr "" +msgstr "소유자 선택" #: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" +msgstr "재고 품목은 구조적 재고 위치에 직접 배치할 수 없으며, 하위 위치에 배치할 수 있습니다." #: stock/models.py:213 users/models.py:497 msgid "External" -msgstr "" +msgstr "외부" #: stock/models.py:214 msgid "This is an external stock location" -msgstr "" +msgstr "외부 재고 위치입니다" #: stock/models.py:220 msgid "Location type" -msgstr "" +msgstr "위치 유형" #: stock/models.py:224 msgid "Stock location type of this location" -msgstr "" +msgstr "이 위치의 재고 위치 유형" #: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" +msgstr "일부 재고 품목이 이미 이 위치에 있으므로 이 재고 위치를 구조적 위치로 만들 수 없습니다!" #: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" -msgstr "" +msgstr "{field}이(가) 존재하지 않습니다" #: stock/models.py:598 msgid "Part must be specified" -msgstr "" +msgstr "부품을 지정해야 합니다" #: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" -msgstr "" +msgstr "재고 품목은 구조적 재고 위치에 배치할 수 없습니다!" #: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" -msgstr "" +msgstr "가상 부품에 대해 재고 품목을 생성할 수 없습니다" #: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" -msgstr "" +msgstr "부품 유형('{self.supplier_part.part}')은(는) {self.part}여야 합니다" #: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" -msgstr "" +msgstr "시리얼 번호가 있는 품목의 수량은 1이어야 합니다" #: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" +msgstr "수량이 1보다 크면 시리얼 번호를 설정할 수 없습니다" #: stock/models.py:990 msgid "Item cannot belong to itself" -msgstr "" +msgstr "항목은 자기 자신에 속할 수 없습니다" #: stock/models.py:995 msgid "Item must have a build reference if is_building=True" -msgstr "" +msgstr "is_building=True인 경우 항목에는 제조 참조가 있어야 합니다" #: stock/models.py:1008 msgid "Build reference does not point to the same part object" -msgstr "" +msgstr "제조 참조가 동일한 부품 객체를 가리키지 않습니다" #: stock/models.py:1022 msgid "Parent Stock Item" -msgstr "" +msgstr "상위 재고 품목" #: stock/models.py:1034 msgid "Base part" -msgstr "" +msgstr "기본 부품" #: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" -msgstr "" +msgstr "이 재고 품목에 맞는 공급업체 부품을 선택하세요" #: stock/models.py:1056 msgid "Where is this stock item located?" -msgstr "" +msgstr "이 재고 품목은 어디에 있습니까?" #: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" -msgstr "" +msgstr "이 재고 품목이 보관된 포장재" #: stock/models.py:1070 msgid "Installed In" -msgstr "" +msgstr "설치 위치" #: stock/models.py:1075 msgid "Is this item installed in another item?" -msgstr "" +msgstr "이 항목이 다른 항목에 설치되어 있습니까?" #: stock/models.py:1094 msgid "Serial number for this item" -msgstr "" +msgstr "이 항목의 시리얼 번호" #: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" -msgstr "" +msgstr "이 재고 품목의 배치 코드" #: stock/models.py:1116 msgid "Stock Quantity" -msgstr "" +msgstr "재고 수량" #: stock/models.py:1126 msgid "Source Build" -msgstr "" +msgstr "원본 제조" #: stock/models.py:1129 msgid "Build for this stock item" -msgstr "" +msgstr "이 재고 품목의 제조" #: stock/models.py:1136 msgid "Consumed By" -msgstr "" +msgstr "소비한 대상" #: stock/models.py:1139 msgid "Build order which consumed this stock item" -msgstr "" +msgstr "이 재고 품목을 소비한 제조 주문" #: stock/models.py:1148 msgid "Source Purchase Order" -msgstr "" +msgstr "원본 구매 주문" #: stock/models.py:1152 msgid "Purchase order for this stock item" -msgstr "" +msgstr "이 재고 품목의 구매 주문" #: stock/models.py:1158 msgid "Destination Sales Order" -msgstr "" +msgstr "대상 판매 주문" #: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" +msgstr "재고 품목의 유효기간입니다. 이 날짜 이후 재고는 만료로 간주됩니다" #: stock/models.py:1187 msgid "Delete on deplete" -msgstr "" +msgstr "소진 시 삭제" #: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "재고가 소진되면 이 재고 품목을 삭제합니다" #: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" -msgstr "" +msgstr "구매 시점의 단위 구매 가격" #: stock/models.py:1240 msgid "Converted to part" -msgstr "" +msgstr "부품으로 변환됨" #: stock/models.py:1442 msgid "Quantity exceeds available stock" -msgstr "" +msgstr "수량이 사용 가능한 재고를 초과합니다" #: stock/models.py:1893 msgid "Part is not set as trackable" -msgstr "" +msgstr "부품이 추적으로 설정되어 있지 않습니다" #: stock/models.py:1899 msgid "Quantity must be integer" -msgstr "" +msgstr "수량은 정수여야 합니다" #: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" +msgstr "수량은 사용 가능한 재고 수량({self.quantity})을 초과할 수 없습니다" #: stock/models.py:1913 msgid "Serial numbers must be provided as a list" -msgstr "" +msgstr "시리얼 번호는 목록으로 제공되어야 합니다" #: stock/models.py:1918 msgid "Quantity does not match serial numbers" -msgstr "" +msgstr "수량이 시리얼 번호와 일치하지 않습니다" #: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "구조적 위치에 재고를 할당할 수 없습니다" #: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" -msgstr "" +msgstr "테스트 템플릿이 존재하지 않습니다" #: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" -msgstr "" +msgstr "재고 품목이 판매 주문에 할당되었습니다" #: stock/models.py:2075 msgid "Stock item is installed in another item" -msgstr "" +msgstr "재고 품목이 다른 품목에 설치되어 있습니다" #: stock/models.py:2078 msgid "Stock item contains other items" -msgstr "" +msgstr "재고 품목에 다른 품목이 포함되어 있습니다" #: stock/models.py:2081 msgid "Stock item has been assigned to a customer" -msgstr "" +msgstr "재고 품목이 고객에게 할당되었습니다" #: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" -msgstr "" +msgstr "재고 품목이 현재 생산 중입니다" #: stock/models.py:2087 msgid "Serialized stock cannot be merged" -msgstr "" +msgstr "시리얼 추적 재고는 병합할 수 없습니다" #: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" -msgstr "" +msgstr "중복 재고 품목" #: stock/models.py:2098 msgid "Stock items must refer to the same part" -msgstr "" +msgstr "재고 품목은 동일한 부품을 참조해야 합니다" #: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" -msgstr "" +msgstr "재고 항목은 동일한 공급업체 부품을 참조해야 합니다" #: stock/models.py:2111 msgid "Stock status codes must match" -msgstr "" +msgstr "재고 상태 코드는 일치해야 합니다" #: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" -msgstr "" +msgstr "재고에 없으므로 재고 항목을 이동할 수 없습니다" #: stock/models.py:2905 msgid "Stock Item Tracking" -msgstr "" +msgstr "재고 항목 추적" #: stock/models.py:2955 msgid "Entry notes" -msgstr "" +msgstr "항목 메모" #: stock/models.py:2995 msgid "Stock Item Test Result" -msgstr "" +msgstr "재고 항목 테스트 결과" #: stock/models.py:3026 msgid "Value must be provided for this test" -msgstr "" +msgstr "이 테스트에는 값을 제공해야 합니다" #: stock/models.py:3030 msgid "Attachment must be uploaded for this test" -msgstr "" +msgstr "이 테스트에는 첨부 파일을 업로드해야 합니다" #: stock/models.py:3035 msgid "Invalid value for this test" -msgstr "" +msgstr "이 테스트의 값이 올바르지 않습니다" #: stock/models.py:3059 msgid "Test result" -msgstr "" +msgstr "테스트 결과" #: stock/models.py:3066 msgid "Test output value" -msgstr "" +msgstr "테스트 출력 값" #: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" -msgstr "" +msgstr "테스트 결과 첨부 파일" #: stock/models.py:3078 msgid "Test notes" -msgstr "" +msgstr "테스트 메모" #: stock/models.py:3086 msgid "Test station" -msgstr "" +msgstr "테스트 스테이션" #: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" -msgstr "" +msgstr "테스트가 수행된 테스트 스테이션의 식별자" #: stock/models.py:3093 msgid "Started" -msgstr "" +msgstr "시작됨" #: stock/models.py:3094 msgid "The timestamp of the test start" -msgstr "" +msgstr "테스트 시작 시각" #: stock/models.py:3100 msgid "Finished" -msgstr "" +msgstr "완료됨" #: stock/models.py:3101 msgid "The timestamp of the test finish" -msgstr "" +msgstr "테스트 종료 시각" #: stock/serializers.py:85 msgid "Generated batch code" -msgstr "" +msgstr "생성된 배치 코드" #: stock/serializers.py:94 msgid "Select build order" -msgstr "" +msgstr "제조 주문 선택" #: stock/serializers.py:103 msgid "Select stock item to generate batch code for" -msgstr "" +msgstr "배치 코드를 생성할 재고 항목을 선택하세요" #: stock/serializers.py:112 msgid "Select location to generate batch code for" -msgstr "" +msgstr "배치 코드를 생성할 위치를 선택하세요" #: stock/serializers.py:121 msgid "Select part to generate batch code for" -msgstr "" +msgstr "배치 코드를 생성할 부품을 선택하세요" #: stock/serializers.py:130 msgid "Select purchase order" -msgstr "" +msgstr "구매 주문 선택" #: stock/serializers.py:137 msgid "Enter quantity for batch code" -msgstr "" +msgstr "배치 코드 수량을 입력하세요" #: stock/serializers.py:163 msgid "Generated serial number" -msgstr "" +msgstr "생성된 일련 번호" #: stock/serializers.py:173 msgid "Select part to generate serial number for" -msgstr "" +msgstr "일련 번호를 생성할 부품을 선택하세요" #: stock/serializers.py:181 msgid "Quantity of serial numbers to generate" -msgstr "" +msgstr "생성할 일련 번호 수량" #: stock/serializers.py:246 msgid "Test template for this result" -msgstr "" +msgstr "이 결과의 테스트 템플릿" #: stock/serializers.py:289 msgid "No matching test found for this part" -msgstr "" +msgstr "이 부품에 일치하는 테스트를 찾을 수 없습니다" #: stock/serializers.py:293 msgid "Template ID or test name must be provided" -msgstr "" +msgstr "템플릿 ID 또는 테스트 이름을 제공해야 합니다" #: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" -msgstr "" +msgstr "테스트 종료 시각은 테스트 시작 시각보다 빠를 수 없습니다" #: stock/serializers.py:427 msgid "Parent Item" -msgstr "" +msgstr "상위 항목" #: stock/serializers.py:428 msgid "Parent stock item" -msgstr "" +msgstr "상위 재고 항목" #: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "" +msgstr "추가 시 포장 단위 사용: 입력한 수량은 포장 개수입니다" #: stock/serializers.py:456 msgid "Use pack size" -msgstr "" +msgstr "포장 단위 사용" #: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" -msgstr "" +msgstr "새 항목의 일련 번호를 입력하세요" #: stock/serializers.py:571 msgid "Supplier Part Number" -msgstr "" +msgstr "공급업체 부품 번호" #: stock/serializers.py:652 users/models.py:187 msgid "Expired" -msgstr "" +msgstr "만료됨" #: stock/serializers.py:658 msgid "Child Items" -msgstr "" +msgstr "하위 항목" #: stock/serializers.py:662 msgid "Tracking Items" -msgstr "" +msgstr "추적 항목" #: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" -msgstr "" +msgstr "이 재고 항목의 구매 가격(단위 또는 포장 기준)" #: stock/serializers.py:706 msgid "Enter number of stock items to serialize" -msgstr "" +msgstr "일련 번호를 부여할 재고 항목 수를 입력하세요" #: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 #: stock/serializers.py:933 msgid "No stock item provided" -msgstr "" +msgstr "재고 항목이 제공되지 않았습니다" #: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "" +msgstr "수량은 사용 가능한 재고 수량({q})을(를) 초과할 수 없습니다" #: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 #: stock/serializers.py:1864 msgid "Destination stock location" -msgstr "" +msgstr "대상 재고 위치" #: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" -msgstr "" +msgstr "이 부품에는 일련 번호를 할당할 수 없습니다" #: stock/serializers.py:780 msgid "Serial numbers already exist" -msgstr "" +msgstr "일련 번호가 이미 존재합니다" #: stock/serializers.py:830 msgid "Select stock item to install" -msgstr "" +msgstr "설치할 재고 항목을 선택하세요" #: stock/serializers.py:837 msgid "Quantity to Install" -msgstr "" +msgstr "설치 수량" #: stock/serializers.py:838 msgid "Enter the quantity of items to install" -msgstr "" +msgstr "설치할 항목 수량을 입력하세요" #: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" -msgstr "" +msgstr "거래 메모 추가(선택 사항)" #: stock/serializers.py:851 msgid "Quantity to install must be at least 1" -msgstr "" +msgstr "설치 수량은 최소 1이어야 합니다" #: stock/serializers.py:859 msgid "Stock item is unavailable" -msgstr "" +msgstr "재고 항목을 사용할 수 없습니다" #: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" -msgstr "" +msgstr "선택한 부품이 BOM(자재 명세서)에 없습니다" #: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" -msgstr "" +msgstr "설치 수량은 사용 가능한 수량을 초과할 수 없습니다" #: stock/serializers.py:918 msgid "Destination location for uninstalled item" -msgstr "" +msgstr "미설치 항목의 대상 위치" #: stock/serializers.py:956 msgid "Select part to convert stock item into" -msgstr "" +msgstr "재고 항목을 변환할 부품을 선택하세요" #: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" -msgstr "" +msgstr "선택한 부품은 변환에 사용할 수 없는 옵션입니다" #: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" +msgstr "공급업체 부품이 할당된 재고 항목은 변환할 수 없습니다" #: stock/serializers.py:1020 msgid "Stock item status code" -msgstr "" +msgstr "재고 항목 상태 코드" #: stock/serializers.py:1049 msgid "Select stock items to change status" -msgstr "" +msgstr "상태를 변경할 재고 항목을 선택하세요" #: stock/serializers.py:1055 msgid "No stock items selected" -msgstr "" +msgstr "선택된 재고 항목이 없습니다" #: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" -msgstr "" +msgstr "하위 위치" #: stock/serializers.py:1228 msgid "Parent stock location" -msgstr "" +msgstr "상위 재고 위치" #: stock/serializers.py:1366 msgid "Part must be salable" -msgstr "" +msgstr "부품은 판매 가능해야 합니다" #: stock/serializers.py:1370 msgid "Item is allocated to a sales order" -msgstr "" +msgstr "항목이 판매 주문에 할당되어 있습니다" #: stock/serializers.py:1374 msgid "Item is allocated to a build order" -msgstr "" +msgstr "항목이 제조 주문에 할당되어 있습니다" #: stock/serializers.py:1398 msgid "Customer to assign stock items" -msgstr "" +msgstr "재고 항목을 할당할 고객" #: stock/serializers.py:1404 msgid "Selected company is not a customer" -msgstr "" +msgstr "선택한 회사는 고객이 아닙니다" #: stock/serializers.py:1412 msgid "Stock assignment notes" -msgstr "" +msgstr "재고 할당 메모" #: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" -msgstr "" +msgstr "재고 항목 목록을 제공해야 합니다" #: stock/serializers.py:1501 msgid "Stock merging notes" -msgstr "" +msgstr "재고 병합 메모" #: stock/serializers.py:1506 msgid "Allow mismatched suppliers" -msgstr "" +msgstr "공급업체 불일치 허용" #: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" +msgstr "공급업체 부품이 다른 재고 항목의 병합을 허용합니다" #: stock/serializers.py:1512 msgid "Allow mismatched status" -msgstr "" +msgstr "상태 불일치 허용" #: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" -msgstr "" +msgstr "상태 코드가 다른 재고 항목의 병합을 허용합니다" #: stock/serializers.py:1523 msgid "At least two stock items must be provided" -msgstr "" +msgstr "최소 두 개의 재고 항목을 제공해야 합니다" #: stock/serializers.py:1590 msgid "No Change" -msgstr "" +msgstr "변경 없음" #: stock/serializers.py:1628 msgid "StockItem primary key value" -msgstr "" +msgstr "재고 항목 기본 키 값" #: stock/serializers.py:1641 msgid "Stock item is not in stock" -msgstr "" +msgstr "재고 항목이 재고에 없습니다" #: stock/serializers.py:1644 msgid "Stock item is already in stock" -msgstr "" +msgstr "재고 항목이 이미 재고에 있습니다" #: stock/serializers.py:1658 msgid "Quantity must not be negative" -msgstr "" +msgstr "수량은 음수일 수 없습니다" #: stock/serializers.py:1700 msgid "Stock transaction notes" -msgstr "" +msgstr "재고 거래 메모" #: stock/serializers.py:1870 msgid "Merge into existing stock" -msgstr "" +msgstr "기존 재고로 병합" #: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" -msgstr "" +msgstr "가능하면 반품된 항목을 기존 재고 항목에 병합합니다" #: stock/serializers.py:1914 msgid "Next Serial Number" -msgstr "" +msgstr "다음 일련 번호" #: stock/serializers.py:1920 msgid "Previous Serial Number" -msgstr "" +msgstr "이전 일련 번호" #: stock/status_codes.py:11 msgid "OK" -msgstr "" +msgstr "정상" #: stock/status_codes.py:12 msgid "Attention needed" -msgstr "" +msgstr "주의 필요" #: stock/status_codes.py:13 msgid "Damaged" -msgstr "" +msgstr "손상됨" #: stock/status_codes.py:14 msgid "Destroyed" -msgstr "" +msgstr "폐기됨" #: stock/status_codes.py:15 msgid "Rejected" -msgstr "" +msgstr "거부됨" #: stock/status_codes.py:19 msgid "Quarantined" -msgstr "" +msgstr "격리됨" #: stock/status_codes.py:44 msgid "Legacy stock tracking entry" -msgstr "" +msgstr "레거시 재고 추적 항목" #: stock/status_codes.py:46 msgid "Stock item created" -msgstr "" +msgstr "재고 항목 생성됨" #: stock/status_codes.py:49 msgid "Edited stock item" -msgstr "" +msgstr "재고 항목 수정됨" #: stock/status_codes.py:50 msgid "Assigned serial number" -msgstr "" +msgstr "일련 번호 할당됨" #: stock/status_codes.py:53 msgid "Stock counted" -msgstr "" +msgstr "재고 실사됨" #: stock/status_codes.py:54 msgid "Stock manually added" -msgstr "" +msgstr "재고 수동 추가됨" #: stock/status_codes.py:55 msgid "Stock manually removed" -msgstr "" +msgstr "재고 수동 제거됨" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "재고 항목 일련번호화됨" #: stock/status_codes.py:58 msgid "Returned to stock" -msgstr "" +msgstr "재고로 반품됨" #: stock/status_codes.py:61 msgid "Location changed" -msgstr "" +msgstr "위치 변경됨" #: stock/status_codes.py:62 msgid "Stock updated" -msgstr "" +msgstr "재고 업데이트됨" #: stock/status_codes.py:65 msgid "Installed into assembly" -msgstr "" +msgstr "조립품에 설치됨" #: stock/status_codes.py:66 msgid "Removed from assembly" -msgstr "" +msgstr "조립품에서 제거됨" #: stock/status_codes.py:68 msgid "Installed component item" -msgstr "" +msgstr "구성품 항목 설치됨" #: stock/status_codes.py:69 msgid "Removed component item" -msgstr "" +msgstr "구성품 항목 제거됨" #: stock/status_codes.py:72 msgid "Split from parent item" -msgstr "" +msgstr "상위 항목에서 분리됨" #: stock/status_codes.py:73 msgid "Split child item" -msgstr "" +msgstr "하위 항목 분리됨" #: stock/status_codes.py:76 msgid "Merged stock items" -msgstr "" +msgstr "재고 항목 병합됨" #: stock/status_codes.py:79 msgid "Converted to variant" -msgstr "" +msgstr "변형(Variant)으로 변환됨" #: stock/status_codes.py:82 msgid "Build order output created" -msgstr "" +msgstr "제조 주문 출력 생성됨" #: stock/status_codes.py:83 msgid "Build order output completed" -msgstr "" +msgstr "제조 주문 출력 완료됨" #: stock/status_codes.py:84 msgid "Build order output rejected" -msgstr "" +msgstr "제조 주문 출력 거부됨" #: stock/status_codes.py:85 msgid "Consumed by build order" -msgstr "" +msgstr "제조 주문에서 소모됨" #: stock/status_codes.py:88 msgid "Shipped against Sales Order" -msgstr "" +msgstr "판매 주문으로 출하됨" #: stock/status_codes.py:91 msgid "Received against Purchase Order" -msgstr "" +msgstr "구매 주문으로 입고됨" #: stock/status_codes.py:94 msgid "Returned against Return Order" -msgstr "" +msgstr "반품 주문으로 반품됨" #: stock/status_codes.py:97 msgid "Sent to customer" -msgstr "" +msgstr "고객에게 발송됨" #: stock/status_codes.py:98 msgid "Returned from customer" -msgstr "" +msgstr "고객으로부터 반품됨" #: templates/403.html:6 templates/403.html:10 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "" +msgstr "권한이 없습니다" #: templates/403.html:11 msgid "You do not have permission to view this page." -msgstr "" +msgstr "이 페이지를 볼 권한이 없습니다." #: templates/403_csrf.html:11 msgid "Authentication Failure" -msgstr "" +msgstr "인증 실패" #: templates/403_csrf.html:12 msgid "You have been logged out from InvenTree." -msgstr "" +msgstr "InvenTree에서 로그아웃되었습니다." #: templates/404.html:6 templates/404.html:10 msgid "Page Not Found" -msgstr "" +msgstr "페이지를 찾을 수 없음" #: templates/404.html:11 msgid "The requested page does not exist" -msgstr "" +msgstr "요청한 페이지가 존재하지 않습니다" #: templates/500.html:6 templates/500.html:10 msgid "Internal Server Error" -msgstr "" +msgstr "내부 서버 오류" #: templates/500.html:11 #, python-format msgid "The %(inventree_title)s server raised an internal error" -msgstr "" +msgstr "%(inventree_title)s 서버에서 내부 오류가 발생했습니다" #: templates/500.html:12 msgid "Refer to the error log in the admin interface for further details" -msgstr "" +msgstr "자세한 내용은 관리자 인터페이스의 오류 로그를 확인하세요" #: templates/503.html:11 templates/503.html:15 msgid "Site is in Maintenance" -msgstr "" +msgstr "사이트 점검 중" #: templates/503.html:17 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" +msgstr "현재 사이트가 점검 중이며 곧 다시 이용할 수 있습니다!" #: templates/base.html:51 msgid "Server Restart Required" -msgstr "" +msgstr "서버 재시작 필요" #: templates/base.html:54 msgid "A configuration option has been changed which requires a server restart" -msgstr "" +msgstr "재시작이 필요한 설정 옵션이 변경되었습니다" #: templates/base.html:54 templates/base.html:64 msgid "Contact your system administrator for further information" -msgstr "" +msgstr "자세한 내용은 시스템 관리자에게 문의하세요" #: templates/base.html:61 msgid "Pending Database Migrations" -msgstr "" +msgstr "대기 중인 데이터베이스 마이그레이션" #: templates/base.html:64 msgid "There are pending database migrations which require attention" -msgstr "" +msgstr "주의가 필요한 대기 중인 데이터베이스 마이그레이션이 있습니다" #: templates/config_error.html:6 templates/config_error.html:10 msgid "Configuration Error" -msgstr "" +msgstr "구성 오류" #: templates/config_error.html:11 #, python-format msgid "The %(inventree_title)s server raised a configuration error" -msgstr "" +msgstr "%(inventree_title)s 서버에서 구성 오류가 발생했습니다" #: templates/email/build_order_completed.html:9 #: templates/email/canceled_order_assigned.html:9 @@ -9344,357 +9344,357 @@ msgstr "" #: templates/email/purchase_order_received.html:9 #: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" -msgstr "" +msgstr "이 주문을 보려면 다음 링크를 클릭하세요" #: templates/email/build_order_required_stock.html:7 msgid "Stock is required for the following build order" -msgstr "" +msgstr "다음 제조 주문에 재고가 필요합니다" #: templates/email/build_order_required_stock.html:8 #, python-format msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "" +msgstr "제조 주문 %(build)s - %(part)s %(quantity)s개 제조 중" #: templates/email/build_order_required_stock.html:10 msgid "Click on the following link to view this build order" -msgstr "" +msgstr "이 제조 주문을 보려면 다음 링크를 클릭하세요" #: templates/email/build_order_required_stock.html:14 msgid "The following parts are low on required stock" -msgstr "" +msgstr "다음 부품의 필요 재고가 부족합니다" #: templates/email/build_order_required_stock.html:18 msgid "Required Quantity" -msgstr "" +msgstr "필요 수량" #: templates/email/build_order_required_stock.html:38 #: templates/email/low_stock_notification.html:30 msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "" +msgstr "이 부품에 대한 알림을 구독하고 있어 이 이메일을 받고 있습니다 " #: templates/email/low_stock_notification.html:9 #: templates/email/part_event_notification.html:9 msgid "Click on the following link to view this part" -msgstr "" +msgstr "이 부품을 보려면 다음 링크를 클릭하세요" #: templates/email/low_stock_notification.html:18 #: templates/email/part_event_notification.html:19 msgid "Minimum Quantity" -msgstr "" +msgstr "최소 수량" #: templates/email/part_event_notification.html:32 msgid "You are receiving this email because you are subscribed to notifications for this part or a category that it is part of " -msgstr "" +msgstr "이 부품 또는 이 부품이 속한 카테고리에 대한 알림을 구독하고 있어 이 이메일을 받고 있습니다 " #: templates/email/stale_stock_notification.html:10 msgid "The following stock items are approaching their expiry dates:" -msgstr "" +msgstr "다음 재고 항목의 유효기간이 곧 만료됩니다:" #: templates/email/stale_stock_notification.html:23 msgid "Days Until Expiry" -msgstr "" +msgstr "만료까지 남은 일수" #: templates/email/stale_stock_notification.html:57 msgid "You are receiving this email because you are subscribed to notifications for these parts" -msgstr "" +msgstr "이 부품들에 대한 알림을 구독하고 있어 이 이메일을 받고 있습니다" #: users/admin.py:101 msgid "Users" -msgstr "" +msgstr "사용자" #: users/admin.py:102 msgid "Select which users are assigned to this group" -msgstr "" +msgstr "이 그룹에 할당할 사용자를 선택하세요" #: users/admin.py:137 msgid "Personal info" -msgstr "" +msgstr "개인 정보" #: users/admin.py:139 msgid "Permissions" -msgstr "" +msgstr "권한" #: users/admin.py:142 msgid "Important dates" -msgstr "" +msgstr "중요 날짜" #: users/authentication.py:30 users/models.py:151 msgid "Token has been revoked" -msgstr "" +msgstr "토큰이 취소되었습니다" #: users/authentication.py:33 msgid "Token has expired" -msgstr "" +msgstr "토큰이 만료되었습니다" #: users/models.py:94 msgid "API Token" -msgstr "" +msgstr "API 토큰" #: users/models.py:95 msgid "API Tokens" -msgstr "" +msgstr "API 토큰" #: users/models.py:131 msgid "Token Name" -msgstr "" +msgstr "토큰 이름" #: users/models.py:132 msgid "Custom token name" -msgstr "" +msgstr "사용자 지정 토큰 이름" #: users/models.py:138 msgid "Token expiry date" -msgstr "" +msgstr "토큰 만료일" #: users/models.py:146 msgid "Last Seen" -msgstr "" +msgstr "마지막 사용" #: users/models.py:147 msgid "Last time the token was used" -msgstr "" +msgstr "토큰이 마지막으로 사용된 시간" #: users/models.py:151 msgid "Revoked" -msgstr "" +msgstr "취소됨" #: users/models.py:229 msgid "Permission set" -msgstr "" +msgstr "권한 세트" #: users/models.py:242 msgid "View" -msgstr "" +msgstr "보기" #: users/models.py:242 msgid "Permission to view items" -msgstr "" +msgstr "항목을 볼 권한" #: users/models.py:246 msgid "Add" -msgstr "" +msgstr "추가" #: users/models.py:246 msgid "Permission to add items" -msgstr "" +msgstr "항목을 추가할 권한" #: users/models.py:250 msgid "Change" -msgstr "" +msgstr "변경" #: users/models.py:252 msgid "Permissions to edit items" -msgstr "" +msgstr "항목을 수정할 권한" #: users/models.py:256 msgid "Delete" -msgstr "" +msgstr "삭제" #: users/models.py:258 msgid "Permission to delete items" -msgstr "" +msgstr "항목을 삭제할 권한" #: users/models.py:495 msgid "Bot" -msgstr "" +msgstr "봇" #: users/models.py:496 msgid "Internal" -msgstr "" +msgstr "내부" #: users/models.py:498 msgid "Guest" -msgstr "" +msgstr "게스트" #: users/models.py:507 msgid "Language" -msgstr "" +msgstr "언어" #: users/models.py:508 msgid "Preferred language for the user" -msgstr "" +msgstr "사용자의 선호 언어" #: users/models.py:513 msgid "Theme" -msgstr "" +msgstr "테마" #: users/models.py:514 msgid "Settings for the web UI as JSON - do not edit manually!" -msgstr "" +msgstr "웹 UI 설정(JSON) - 수동으로 편집하지 마세요!" #: users/models.py:519 msgid "Widgets" -msgstr "" +msgstr "위젯" #: users/models.py:521 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" -msgstr "" +msgstr "대시보드 위젯 설정(JSON) - 수동으로 편집하지 마세요!" #: users/models.py:528 msgid "Display Name" -msgstr "" +msgstr "표시 이름" #: users/models.py:529 msgid "Chosen display name for the user" -msgstr "" +msgstr "사용자가 선택한 표시 이름" #: users/models.py:535 msgid "Position" -msgstr "" +msgstr "직책" #: users/models.py:536 msgid "Main job title or position" -msgstr "" +msgstr "주요 직함 또는 직책" #: users/models.py:543 msgid "User status message" -msgstr "" +msgstr "사용자 상태 메시지" #: users/models.py:550 msgid "User location information" -msgstr "" +msgstr "사용자 위치 정보" #: users/models.py:555 msgid "User is actively using the system" -msgstr "" +msgstr "사용자가 시스템을 사용 중입니다" #: users/models.py:562 msgid "Preferred contact information for the user" -msgstr "" +msgstr "사용자가 선호하는 연락처 정보" #: users/models.py:568 msgid "User Type" -msgstr "" +msgstr "사용자 유형" #: users/models.py:569 msgid "Which type of user is this?" -msgstr "" +msgstr "어떤 유형의 사용자입니까?" #: users/models.py:575 msgid "Organisation" -msgstr "" +msgstr "조직" #: users/models.py:576 msgid "Users primary organisation/affiliation" -msgstr "" +msgstr "사용자의 기본 조직/소속" #: users/models.py:584 msgid "Primary Group" -msgstr "" +msgstr "기본 그룹" #: users/models.py:585 msgid "Primary group for the user" -msgstr "" +msgstr "사용자의 기본 그룹" #: users/ruleset.py:26 msgid "Admin" -msgstr "" +msgstr "관리자" #: users/ruleset.py:32 msgid "Purchase Orders" -msgstr "" +msgstr "구매 주문" #: users/ruleset.py:33 msgid "Sales Orders" -msgstr "" +msgstr "판매 주문" #: users/ruleset.py:34 msgid "Return Orders" -msgstr "" +msgstr "반품 주문" #: users/serializers.py:186 msgid "Username" -msgstr "" +msgstr "사용자 이름" #: users/serializers.py:189 msgid "First Name" -msgstr "" +msgstr "이름" #: users/serializers.py:189 msgid "First name of the user" -msgstr "" +msgstr "사용자의 이름" #: users/serializers.py:193 msgid "Last Name" -msgstr "" +msgstr "성" #: users/serializers.py:193 msgid "Last name of the user" -msgstr "" +msgstr "사용자의 성" #: users/serializers.py:197 msgid "Email address of the user" -msgstr "" +msgstr "사용자의 이메일 주소" #: users/serializers.py:240 msgid "User must be authenticated" -msgstr "" +msgstr "사용자가 인증되어야 합니다" #: users/serializers.py:249 msgid "Only a superuser can create a token for another user" -msgstr "" +msgstr "슈퍼유저만 다른 사용자의 토큰을 만들 수 있습니다" #: users/serializers.py:329 msgid "Administrator" -msgstr "" +msgstr "관리자" #: users/serializers.py:330 msgid "Does this user have administrative permissions" -msgstr "" +msgstr "이 사용자에게 관리자 권한이 있습니까" #: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" -msgstr "" +msgstr "슈퍼유저" #: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" -msgstr "" +msgstr "이 사용자는 슈퍼유저입니까" #: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" -msgstr "" +msgstr "이 사용자 계정이 활성 상태입니까" #: users/serializers.py:351 msgid "Only a superuser can adjust this field" -msgstr "" +msgstr "슈퍼유저만 이 필드를 조정할 수 있습니다" #: users/serializers.py:379 msgid "Password" -msgstr "" +msgstr "비밀번호" #: users/serializers.py:380 msgid "Password for the user" -msgstr "" +msgstr "사용자의 비밀번호" #: users/serializers.py:386 msgid "Override warning" -msgstr "" +msgstr "경고 무시" #: users/serializers.py:387 msgid "Override the warning about password rules" -msgstr "" +msgstr "비밀번호 규칙에 대한 경고를 무시합니다" #: users/serializers.py:417 msgid "Staff" -msgstr "" +msgstr "스태프" #: users/serializers.py:418 msgid "Does this user have staff permissions" -msgstr "" +msgstr "이 사용자에게 스태프 권한이 있습니까" #: users/serializers.py:468 msgid "You do not have permission to create users" -msgstr "" +msgstr "사용자를 생성할 권한이 없습니다" #: users/serializers.py:489 msgid "Your account has been created." -msgstr "" +msgstr "계정이 생성되었습니다." #: users/serializers.py:491 msgid "Please use the password reset function to login" -msgstr "" +msgstr "로그인하려면 비밀번호 재설정 기능을 사용하세요" #: users/serializers.py:497 msgid "Welcome to InvenTree" -msgstr "" +msgstr "InvenTree에 오신 것을 환영합니다" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index dad03aa1ed..1748d98d6d 100644 --- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -269,7 +269,7 @@ msgstr "Neteisingas pasirinkimas" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Kinų (supaprastinta)" msgid "Chinese (Traditional)" msgstr "Kinų (tradicinė)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Failo dydis" msgid "File size in bytes" msgstr "Failo dydis baitais" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Netinkamas modelio tipas priedui" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "Nurodo, ar nustatymą pakeičia aplinkos kintamasis" msgid "Override" msgstr "Nepaisyti" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Vykdoma" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Laukiančios užduotys" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Suplanuotos užduotys" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Nepavykusios užduotys" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Užduoties ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unikalus užduoties ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Užraktas" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Užrakto laikas" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Užduoties pavadinimas" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funkcijos pavadinimas" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentai" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Užduoties argumentai" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Rakto argumentai" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Užduoties rakto argumentai" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Failo pavadinimas" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelio tipas" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Vartotojas neturi leidimo kurti ar redaguoti šio modelio priedų" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Pasirinkimų sąrašas yra užrakintas" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index 5644d12970..bfd0d048c7 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 7c76c77f53..94812a6f16 100644 --- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -269,7 +269,7 @@ msgstr "Ongeldige keuze" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chinees (vereenvoudigd)" msgid "Chinese (Traditional)" msgstr "Chinees (traditioneel)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Update beschikbaar" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Een update voor Inventree is beschikbaar" @@ -1849,7 +1849,7 @@ msgstr "Bestandsgrootte" msgid "File size in bytes" msgstr "Bestandsgrootte in bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ongeldig modeltype opgegeven voor bijlage" @@ -2126,7 +2126,7 @@ msgstr "Parameters" msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Ongeldig modeltype opgegeven voor parameter" @@ -2391,85 +2391,85 @@ msgstr "Geeft aan of de instelling overschreven wordt door een omgevingsvariabel msgid "Override" msgstr "Overschrijven" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Is actief" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Openstaande taken" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Geplande taken" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Mislukte taken" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Taak ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unieke taak ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Vergrendel" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Tijdstip van vergrendeling" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Naam van de taak" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Functie" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Functie naam" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenten" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Taak argumenten" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Trefwoord argumenten" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Taak trefwoord argumenten" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Bestandsnaam" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Model type" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Gebruiker heeft geen toestemming om bijlagen voor dit model te maken of te bewerken" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "Gebruiker heeft geen toestemming om parameters voor dit model te maken of te bewerken" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lijst met selecties is vergrendeld" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index f94fd138d1..0844cce8f3 100644 --- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -269,7 +269,7 @@ msgstr "Ugyldig valg" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (tradisjonell)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Filstørrelse" msgid "File size in bytes" msgstr "Filstørrelse i byte" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ugyldig modelltype spesifisert for vedlegg" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Kjører" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Ventende oppgaver" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Planlagte oppgaver" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Mislykkede oppgaver" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Oppgave-ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unik oppgave-ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Lås" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Låsetidspunkt" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Oppgavenavn" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funksjon" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funksjonsnavn" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenter" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Oppgaveargumenter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Nøkkelordargumenter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Nøkkelordargumenter for oppgave" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltype" -#: common/serializers.py:790 +#: common/serializers.py:799 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" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index 17489fd479..abaaa80f1e 100644 --- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -269,7 +269,7 @@ msgstr "Błędny wybór" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "chiński (uproszczony)" msgid "Chinese (Traditional)" msgstr "chiński (tradycyjny)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Dostępna aktualizacja" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Dostępna jest aktualizacja dla InvenTree" @@ -1849,7 +1849,7 @@ msgstr "Rozmiar pliku" msgid "File size in bytes" msgstr "Rozmiar pliku w bajtach" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "Nadpisz" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Jest uruchomiony" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Oczekujce zadania" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Zaplanowane zadania" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Zadania zakończone błędem" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID zadania" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unikalny identyfikator zadania" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Blokada" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Czas blokady" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nazwa zadania" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkcja" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nazwa funkcji" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumenty zadania" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nazwa pliku" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Użytkownik nie ma uprawnień do tworzenia lub edytowania załączników dla tego modelu" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista wyboru jest zablokowana" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 45cc2002cc..29d2b4a536 100644 --- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -269,7 +269,7 @@ msgstr "Escolha inválida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chinês (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (Tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Executando" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Tempo de bloqueio" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Função" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index 2d84ccc249..473a4394de 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -269,7 +269,7 @@ msgstr "Escolha inválida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chinês (simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Atualização disponível" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Uma atualização para o InvenTree está disponível" @@ -1849,7 +1849,7 @@ msgstr "Tamanho do arquivo" msgid "File size in bytes" msgstr "Tamanho do arquivo em bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Categoria de modelo especificado inválido para anexo" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "É indicado se a configuração é substituída por uma variável de amb msgid "Override" msgstr "Substituir" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Está em execução" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Congelar tempo" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Função" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Categoria de Modelo" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Usuário não tem permissão para criar ou editar anexos para este modelo" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista de seleção bloqueada" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index ffc3bb6e8d..b92125d40b 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -269,7 +269,7 @@ msgstr "Alegere invalidă" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Chineză (simplificată)" msgid "Chinese (Traditional)" msgstr "Chineză (tradițională)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Actualizare disponibilă" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "O actualizare pentru InvenTree este disponibilă" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Numele acțiunii" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nume funcție" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nume fișier" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 5c1e2fec73..8073b73f0f 100644 --- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -269,7 +269,7 @@ msgstr "Неверный выбор" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Китайский (Упрощенный)" msgid "Chinese (Traditional)" msgstr "Китайский (Традиционный)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Доступно обновление" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Доступно обновление для InvenTree" @@ -1849,7 +1849,7 @@ msgstr "Размер файла" msgid "File size in bytes" msgstr "Размер файла в байтах" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Указан недопустимый тип модели для вложения" @@ -2126,7 +2126,7 @@ msgstr "Параметры" msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Указан неверный тип модели для параметра" @@ -2391,85 +2391,85 @@ msgstr "Указывает, переопределена ли настройка msgid "Override" msgstr "Переопределить" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Запущен" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Ожидающие задачи" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Запланированные задания" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Невыполненные Задачи" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Код задачи" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Уникальный ID задачи" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Заблокировать" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Время блокировки" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Название задачи" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Функция" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Имя функции" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Аргументы" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Аргументы задачи" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Именованные аргументы" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Именованные аргументы задачи" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Имя файла" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Тип модели" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Пользователь не имеет разрешения создавать или редактировать вложения для этой модели" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "У пользователя нет разрешения на создание или редактирование параметров для этой модели" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Список выбора заблокирован" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 4046cce3ab..cbda4bbfa1 100644 --- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index f360e1829a..0b16bdbc65 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -269,7 +269,7 @@ msgstr "Nedovoljena izbira" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Kitajščina (poenostavljena)" msgid "Chinese (Traditional)" msgstr "Kitajščina (tradicionalno)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index 7bea5a31c2..3cf27a2e4b 100644 --- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -269,7 +269,7 @@ msgstr "Nevažeći izvor" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Kineski (Uprošćeni)" msgid "Chinese (Traditional)" msgstr "Kineski (Tradicionalni)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Veličina datoteke" msgid "File size in bytes" msgstr "Veličina datoteke u bajtovima" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Određen je neispravan tip modela za prilog" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Pokrenuto je" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Čekaju se zadaci" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Planirani zadaci" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Propali zadaci" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID zadatka" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Jedinstveni ID zadatka" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Zaključaj" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Vreme zaključavanja" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Naziv zadatka" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Ime funkcije" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenti" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumenti zadatka" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Ključne reči argumenata" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Ključne reči argumenata zadatka" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Tip modela" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Korisnik nema dozvolu da napravi ili izmeni priloge za ovaj model" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista odabira je zaključana" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index a6f5f51af4..990f0e731f 100644 --- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -269,7 +269,7 @@ msgstr "Ogiltigt val" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Kinesiska (Förenklad)" msgid "Chinese (Traditional)" msgstr "Kinesiska (Traditionell)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Filstorlek" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Väntande uppgifter" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Misslyckade uppgifter" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Uppgifts-ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Lås" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Uppgiftsnamn" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funktion" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funktionsnamn" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argument" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Filnamn" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 566654c435..9ac51a853f 100644 --- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "ชื่อไฟล์" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index eff0d927a4..847c9bc4b1 100644 --- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -269,7 +269,7 @@ msgstr "Geçersiz seçim" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Çince (Basitleştirilmiş)" msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Güncelleme mevcut" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTree için güncelleme mevcut" @@ -1849,7 +1849,7 @@ msgstr "Dosya Boyutu" msgid "File size in bytes" msgstr "Bayt cinsinden dosya boyutu" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ek için belirtilen model türü geçersiz" @@ -2126,7 +2126,7 @@ msgstr "Parametreler" msgid "Invalid choice for parameter value" msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Parametre için belirtilen model türü geçersiz" @@ -2391,85 +2391,85 @@ msgstr "Ayarın bir ortam değişkeni tarafından üstüne yazılıp yazılmadı msgid "Override" msgstr "Üstüne Yaz" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Çalışıyor" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Bekleyen Görevler" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Planlanan Görevler" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Başarısız Görevler" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Görev ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Benzersiz Görev ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Kilit" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Kilit Zamanı" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Görev Adı" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Fonksiyon" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Fonksiyon Adı" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argümanlar" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Görev Argümanları" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Anahtar Argümanlar" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Anahtar görev argümanları" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Dosya adı" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Model Tipi" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Kullanıcının bu model için ek oluşturma veya düzenleme izni yok" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "Kullanıcı bu model için parametre oluşturma veya düzenleme iznine sahip değil" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Seçim listesi kilitli" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index 47ab3153f3..7ad5da86d5 100644 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Китайська (спрощена)" msgid "Chinese (Traditional)" msgstr "Китайська (Традиційна)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "Розмір файлу" msgid "File size in bytes" msgstr "Розмір файлу в байтах" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 6cbee1047a..0d92420b68 100644 --- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -269,7 +269,7 @@ msgstr "Lựa chọn sai" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "Tiếng Trung (Giản thể)" msgid "Chinese (Traditional)" msgstr "Tiếng Trung (Phồn thể)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -1849,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Đang chạy" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Công việc chờ xử lý" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tác vụ theo lịch" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tác vụ thất bại" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID tác vụ" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID tác vụ duy nhất" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Khoá" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Thời gian khóa" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Tên công việc" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Chức năng" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Tên chức năng" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Đối số" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Đối số công việc" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Đối số từ khóa" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Đối số từ khóa công việc" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Tên tập tin" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index f81f6a3b19..e6e6c13d9d 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -269,7 +269,7 @@ msgstr "无效选项" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "中文 (简体)" msgid "Chinese (Traditional)" msgstr "中文 (繁体)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTree有可用更新" @@ -1849,7 +1849,7 @@ msgstr "文件大小" msgid "File size in bytes" msgstr "文件大小,以字节为单位" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "为附件指定的模型类型无效" @@ -2126,7 +2126,7 @@ msgstr "参数" msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "为附件指定的模型类型无效" @@ -2391,85 +2391,85 @@ msgstr "表示设置是否被环境变量覆盖" msgid "Override" msgstr "覆盖" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "正在运行" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "等待完成的任务" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "预定的任务" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "失败的任务" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "任务ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "唯一任务ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "锁定" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "锁定时间" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "任务名称" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "功能" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "功能名称" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "参数" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "任务参数" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "关键字参数" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "任务关键词参数" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "文件名" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "模型类型" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户无权为此模式创建或编辑附件" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "用户没有权限为此模型创建或编辑参数" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "选择列表已锁定" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po index e922a94d44..8086aac27f 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 00:32+0000\n" -"PO-Revision-Date: 2026-04-13 00:35\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -269,7 +269,7 @@ msgstr "無效的選項" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -536,11 +536,11 @@ msgstr "中文 (簡體)" msgid "Chinese (Traditional)" msgstr "中文 (繁體)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "有新的 InvenTree 更新可用" @@ -1849,7 +1849,7 @@ msgstr "文件大小" msgid "File size in bytes" msgstr "文件大小,以字節為單位" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "為附件指定的模型類型無效" @@ -2126,7 +2126,7 @@ msgstr "參數集" msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2752 common/serializers.py:883 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2391,85 +2391,85 @@ msgstr "表示此設定是否被環境變數覆蓋" msgid "Override" msgstr "覆蓋" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "正在運行" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "等待完成的任務" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "預定的任務" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "失敗的任務" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "任務ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "唯一任務ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "鎖定" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "鎖定時間" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "任務名稱" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "功能" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "功能名稱" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "參數" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "任務參數" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "關鍵字參數" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "任務關鍵詞參數" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "檔案名稱" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:905 importer/models.py:90 report/api.py:41 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 #: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "模型類型" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户無權為此模式創建或編輯附件" -#: common/serializers.py:886 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:961 common/serializers.py:1064 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "選擇列表已鎖定" diff --git a/src/frontend/src/locales/ar/messages.po b/src/frontend/src/locales/ar/messages.po index 4cb7c02317..79ffe50e21 100644 --- a/src/frontend/src/locales/ar/messages.po +++ b/src/frontend/src/locales/ar/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ar\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/bg/messages.po b/src/frontend/src/locales/bg/messages.po index 9bd1db7bc8..4cf2bc72c1 100644 --- a/src/frontend/src/locales/bg/messages.po +++ b/src/frontend/src/locales/bg/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: bg\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/cs/messages.po b/src/frontend/src/locales/cs/messages.po index 3d333f4a0d..fe52c52665 100644 --- a/src/frontend/src/locales/cs/messages.po +++ b/src/frontend/src/locales/cs/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: cs\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Czech\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" @@ -568,11 +568,11 @@ msgstr "Výběrová pole" #: lib/enums/ModelInformation.tsx:291 msgid "Selection Entry" -msgstr "" +msgstr "Výběr záznamu" #: lib/enums/ModelInformation.tsx:292 msgid "Selection Entries" -msgstr "" +msgstr "Výběr záznamů" #: lib/enums/ModelInformation.tsx:298 #: src/components/barcodes/BarcodeInput.tsx:114 @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -927,11 +927,11 @@ msgstr "Odběr aktualizován" #: src/components/buttons/StarredToggleButton.tsx:38 msgid "Subscription removed" -msgstr "" +msgstr "Odběr odstraněn" #: src/components/buttons/StarredToggleButton.tsx:38 msgid "Subscription added" -msgstr "" +msgstr "Odběr přidán" #: src/components/buttons/StarredToggleButton.tsx:57 #~ msgid "Unsubscribe from part" @@ -1309,7 +1309,7 @@ msgstr "Superuser" #: src/tables/settings/UserTable.tsx:285 #: src/tables/settings/UserTable.tsx:406 msgid "Administrator" -msgstr "" +msgstr "Administrátor" #: src/components/details/Details.tsx:130 #: src/pages/core/UserDetail.tsx:87 @@ -1352,11 +1352,11 @@ msgstr "Odstranit" #: src/components/details/DetailsImage.tsx:88 msgid "Image removed" -msgstr "" +msgstr "Obrázek odstraněn" #: src/components/details/DetailsImage.tsx:89 msgid "The image has been removed successfully" -msgstr "" +msgstr "Obrázek byl úspěšně odstraněn" #: src/components/details/DetailsImage.tsx:115 #~ msgid "Drag and drop to upload" @@ -1364,7 +1364,7 @@ msgstr "" #: src/components/details/DetailsImage.tsx:157 msgid "Drag and drop to upload, or paste an image from the clipboard" -msgstr "" +msgstr "Přetažením nahrajete nebo vložte obrázek ze schránky" #: src/components/details/DetailsImage.tsx:162 msgid "Click to select file(s)" @@ -1694,12 +1694,12 @@ msgstr "Přihlášení se nezdařilo" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Zkontrolujte vstup a zkuste to znovu." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "E-mail byl doručen úspěšně" @@ -2093,7 +2093,7 @@ msgstr "Zpracovávání dat" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Vyskytla se chyba" @@ -2309,7 +2309,7 @@ msgstr "Zvolit jazyk" #: src/components/items/OnlyStaff.tsx:11 msgid "This information is only available for administrative users" -msgstr "" +msgstr "Tyto informace jsou k dispozici pouze pro administrativní uživatele" #: src/components/items/Placeholder.tsx:14 #~ msgid "This feature/button/site is a placeholder for a feature that is not implemented, only partial or intended for testing." @@ -2651,15 +2651,15 @@ msgstr "Notifikace" #: src/components/nav/Header.tsx:231 msgid "Superuser Mode" -msgstr "" +msgstr "Režim superuživatele" #: src/components/nav/Header.tsx:231 msgid "Admin Mode" -msgstr "" +msgstr "Režim administrátora" #: src/components/nav/Header.tsx:237 msgid "The current user has elevated privileges and should not be used for regular usage." -msgstr "" +msgstr "Aktuální uživatel má vyšší oprávnění a neměl by být používán pro běžné používání." #: src/components/nav/Layout.tsx:144 msgid "Nothing found..." @@ -4312,15 +4312,15 @@ msgstr "Spravovat pluginy InvenTree" #: src/defaults/defaultHostList.tsx:10 msgid "Local Server" -msgstr "" +msgstr "Místní server" #: src/defaults/defaultHostList.tsx:12 msgid "InvenTree Demo" -msgstr "" +msgstr "Demo InvenTree" #: src/defaults/defaultHostList.tsx:14 msgid "Current Server" -msgstr "" +msgstr "Aktuální server" #: src/defaults/links.tsx:17 #~ msgid "GitHub" @@ -4800,7 +4800,7 @@ msgstr "Virtuální díl" #: src/forms/PurchaseOrderForms.tsx:538 msgid "This part is virtual, no physical stock will be received." -msgstr "" +msgstr "Tento díl je virtuální, žádné fyzické zásoby nebudou přijaty." #: src/forms/PurchaseOrderForms.tsx:566 #~ msgid "Serial numbers" @@ -4973,11 +4973,11 @@ msgstr "Zásilka označená jako nezkontrolována" #: src/forms/SalesOrderForms.tsx:273 msgid "Completing shipment" -msgstr "" +msgstr "Dokončování zásilky" #: src/forms/SalesOrderForms.tsx:274 msgid "Shipment completed successfully" -msgstr "" +msgstr "Zásilka byla úspěšně dokončena" #: src/forms/SalesOrderForms.tsx:281 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 @@ -5262,7 +5262,7 @@ msgstr "Interní chyba serveru" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Odhlášen(a)" @@ -5290,81 +5290,81 @@ msgstr "MFA přihlášení úspěšné" msgid "MFA details were automatically provided in the browser" msgstr "Údaje o MFA byly automaticky poskytnuty v prohlížeči" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Úspěšně odhlášen/a" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Jazyk změněn" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Váš aktivní jazyk byl změněn podle nastavení Vašeho profilu" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Motiv změněn" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Váš aktivní jazyk byl změněn podle nastavení Vašeho profilu" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Zkontrolujte doručenou poštu pro odkaz pro obnovení. Funguje to pouze v případě, že máte účet. Zkontrolujte také ve spamu." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Obnovení selhalo" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Již přihlášeno!" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Vyskytl se konflikt relací na serveru pro tento prohlížeč, prosím nejdřív se odhlašte." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Přihlášen" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Úspěšně přihlášen/a" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Nepodařilo se nastavit MFA" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "Nastavení MFA bylo úspěšné" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "MFA přes TOTP bylo úspěšně nastaveno; budete se muset znovu přihlásit." -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Nastavení hesla" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Heslo bylo úspěšně nastaveno. Nyní se můžete přihlásit s novým heslem" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Heslo nelze změnit" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "Dvě pole s hesly se neshodují" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Heslo bylo změněno" @@ -6865,7 +6865,7 @@ msgstr "Připojit k modelu" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:32 msgid "Background worker running" -msgstr "" +msgstr "Pracovník na pozadí běží" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:35 #~ msgid "Background Worker Not Running" @@ -7683,7 +7683,7 @@ msgstr "Údaje o uživateli" #: src/pages/core/UserDetail.tsx:206 msgid "Normal user" -msgstr "" +msgstr "Běžný uživatel" #: src/pages/core/UserDetail.tsx:206 #~ msgid "Basic user" @@ -7783,11 +7783,11 @@ msgstr "Přidělení prodejní objednávky" #: src/pages/part/PartDetail.tsx:177 msgid "Validating BOM" -msgstr "" +msgstr "Ověřování kusovníku" #: src/pages/part/PartDetail.tsx:178 msgid "BOM validated" -msgstr "" +msgstr "Kusovník ověřen" #: src/pages/part/PartDetail.tsx:187 #~ msgid "Bill of materials scheduled for validation" @@ -8838,19 +8838,19 @@ msgstr "Chyba při skenování skladové položky" #: src/pages/stock/LocationDetail.tsx:384 msgid "Scan in stock items" -msgstr "" +msgstr "Skenovat skladové položky" #: src/pages/stock/LocationDetail.tsx:386 msgid "Scan item into this location" -msgstr "" +msgstr "Skenovat položku do tohoto umístění" #: src/pages/stock/LocationDetail.tsx:390 msgid "Scan in container" -msgstr "" +msgstr "Skenovat v kontejneru" #: src/pages/stock/LocationDetail.tsx:392 msgid "Scan container into this location" -msgstr "" +msgstr "Skenovat kontejner do tohoto umístění" #: src/pages/stock/StockDetail.tsx:147 msgid "Base Part" @@ -9135,7 +9135,7 @@ msgstr "Přidělené řádky" #: src/tables/ColumnRenderers.tsx:774 msgid "Line Item" -msgstr "" +msgstr "Řádková položka" #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" @@ -9882,12 +9882,12 @@ msgstr "Jste si jisti, že chcete odstranit tuto přiřazenou skladovou zásobu #: src/tables/build/BuildAllocatedStockTable.tsx:199 #: src/tables/build/BuildLineTable.tsx:690 msgid "Consuming allocated stock" -msgstr "" +msgstr "Spotřebovat přidělené zásoby" #: src/tables/build/BuildAllocatedStockTable.tsx:200 #: src/tables/build/BuildLineTable.tsx:691 msgid "Stock consumed successfully" -msgstr "" +msgstr "Zásoby byly úspěšně spotřebovány" #: src/tables/build/BuildAllocatedStockTable.tsx:260 msgid "Consume" @@ -9995,12 +9995,12 @@ msgstr "Vytvořit výrobní příkaz" #: src/tables/build/BuildLineTable.tsx:577 #: src/tables/build/BuildOutputTable.tsx:223 msgid "Allocating stock to build order" -msgstr "" +msgstr "Přidělování zásob k sestavě" #: src/tables/build/BuildLineTable.tsx:578 #: src/tables/build/BuildOutputTable.tsx:224 msgid "Stock allocation complete" -msgstr "" +msgstr "Přidělování zásob dokončeno" #: src/tables/build/BuildLineTable.tsx:585 #~ msgid "Auto allocation in progress" @@ -11188,11 +11188,11 @@ msgstr "Šablony dílu nelze upravit, díl je uzamčen" #: src/tables/part/PartThumbTable.tsx:123 msgid "Image updated" -msgstr "" +msgstr "Obrázek aktualizován" #: src/tables/part/PartThumbTable.tsx:124 msgid "The image has been updated successfully" -msgstr "" +msgstr "Obrázek byl úspěšně aktualizován" #: src/tables/part/PartThumbTable.tsx:233 msgid "Select" @@ -11693,7 +11693,7 @@ msgstr "Přiřadit sériová čísla" #: src/tables/sales/SalesOrderLineItemTable.tsx:297 msgid "Stock allocated successfully" -msgstr "" +msgstr "Zásoby byly úspěšně přiděleny" #: src/tables/sales/SalesOrderLineItemTable.tsx:341 msgid "Show lines which are fully allocated" @@ -11725,7 +11725,7 @@ msgstr "Vytvořit zásilku" #: src/tables/sales/SalesOrderShipmentTable.tsx:80 msgid "Shipment created" -msgstr "" +msgstr "Zásilka vytvořena" #: src/tables/sales/SalesOrderShipmentTable.tsx:159 msgid "Items" @@ -12172,7 +12172,7 @@ msgstr "Při načítání podrobností šablony došlo k chybě" #: src/tables/settings/TemplateTable.tsx:272 msgid "Filename" -msgstr "" +msgstr "Název souboru" #: src/tables/settings/TemplateTable.tsx:295 msgid "Modify" @@ -12241,7 +12241,7 @@ msgstr "Určuje, zda má být tento uživatel považován za aktivního. Zrušte #: src/tables/settings/UserTable.tsx:183 msgid "Is Administrator" -msgstr "" +msgstr "Je administrátor" #: src/tables/settings/UserTable.tsx:183 #~ msgid "Is Staff" @@ -12313,7 +12313,7 @@ msgstr "Zobrazit aktivní uživatele" #: src/tables/settings/UserTable.tsx:407 msgid "Show administrators" -msgstr "" +msgstr "Zobrazit administrátory" #: src/tables/settings/UserTable.tsx:412 msgid "Show superusers" @@ -12524,7 +12524,7 @@ msgstr "Zobrazit zásoby na externích lokacích" #: src/tables/stock/StockItemTable.tsx:420 msgid "Stock item created" -msgstr "" +msgstr "Skladová položka vytvořena" #: src/tables/stock/StockItemTable.tsx:442 msgid "Order items" diff --git a/src/frontend/src/locales/da/messages.po b/src/frontend/src/locales/da/messages.po index 5536e49a7f..b1228ebb16 100644 --- a/src/frontend/src/locales/da/messages.po +++ b/src/frontend/src/locales/da/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: da\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Danish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Login mislykkedes" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Tjek din indtastning og prøv igen." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Mail levering succesfuld" @@ -2093,7 +2093,7 @@ msgstr "Behandler Data" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "En feil opstod" @@ -5262,7 +5262,7 @@ msgstr "Intern serverfejl" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Logget af" @@ -5290,81 +5290,81 @@ msgstr "Multifaktorgodkendelse Login succesfuld" msgid "MFA details were automatically provided in the browser" msgstr "Multifaktorgodkendelse detaljer blev automatisk givet i browseren" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Du er nu logget af" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Sprog ændret" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Dit aktive sprog er blevet ændret til det der er sat i din profil" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Tema ændret" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Dit aktive tema er blevet ændret til det der er sat i din profil" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Tjek din indbakke for et nulstillingslink. Dette virker kun, hvis du har en konto. Tjek også spam." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Nulstilling fejlede" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Allerede logget ind" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Der er en konfliktfyldt session på serveren for denne browser. Log ud af det først." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Logget ind" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Logget ind" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Kunne ikke oprette Multifaktorgodkendelse" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Adgangskode sat" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Adgangskoden blev oprettet. Du kan nu logge ind med din nye adgangskode" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Adgangskoden kunne ikke ændres" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "De to adgangskodefelter matcher ikke" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Adgangskode ændret" diff --git a/src/frontend/src/locales/de/messages.po b/src/frontend/src/locales/de/messages.po index 859dc00755..d01993afaf 100644 --- a/src/frontend/src/locales/de/messages.po +++ b/src/frontend/src/locales/de/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: de\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: German\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Login fehlgeschlagen" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Überprüfen Sie Ihre Eingabe und versuchen Sie es erneut." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Mail erfolgreich gesendet" @@ -2093,7 +2093,7 @@ msgstr "Daten werden verarbeiten" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Ein Fehler ist aufgetreten" @@ -5262,7 +5262,7 @@ msgstr "Interner Serverfehler" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Ausgeloggt" @@ -5290,81 +5290,81 @@ msgstr "MFA Anmeldung erfolgreich" msgid "MFA details were automatically provided in the browser" msgstr "MFA-Details wurden automatisch im Browser angegeben" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Erfolgreich abgemeldet" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Sprache geändert" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Die aktive Sprache wurde auf die Sprache des Profils geändert" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Design geändert" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Das aktive Design wurde zu dem im Profil eingestellten geändert" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Prüfen Sie Ihren Posteingang für einen Link zum Zurücksetzen. Dies funktioniert nur, wenn Sie ein Konto haben. Prüfen Sie auch den Spam-Ordner." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Zurücksetzen fehlgeschlagen" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Bereits angemeldet" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Es gibt eine widersprüchliche Sitzung auf dem Server für diesen Browser. Bitte zuerst abmelden." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Angemeldet" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Erfolgreich angemeldet" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "MFA konnte nicht eingerichtet werden" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Passwort festgelegt" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Das Passwort wurde erfolgreich festgelegt. Sie können sich jetzt mit Ihrem neuen Passwort anmelden" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Passwort konnte nicht geändert werden" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "Die beiden Passwortfelder stimmten nicht überein." -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Passwort geändert" diff --git a/src/frontend/src/locales/el/messages.po b/src/frontend/src/locales/el/messages.po index 194fcfdbbd..32b98dc215 100644 --- a/src/frontend/src/locales/el/messages.po +++ b/src/frontend/src/locales/el/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: el\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Greek\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Αποτυχία σύνδεσης" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Ελέγξτε τα στοιχεία σας και προσπαθήστε ξανά." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Το email στάλθηκε με επιτυχία" @@ -2093,7 +2093,7 @@ msgstr "Επεξεργασία δεδομένων" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Παρουσιάστηκε σφάλμα" @@ -5262,7 +5262,7 @@ msgstr "Εσωτερικό σφάλμα διακομιστή" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Αποσυνδεθήκατε" @@ -5290,81 +5290,81 @@ msgstr "Επιτυχής σύνδεση με MFA" msgid "MFA details were automatically provided in the browser" msgstr "Οι λεπτομέρειες MFA παρέχθηκαν αυτόματα από τον browser" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Αποσυνδεθήκατε με επιτυχία" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Η γλώσσα άλλαξε" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Η ενεργή γλώσσα σας άλλαξε σε αυτή που έχει οριστεί στο προφίλ σας" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Το θέμα άλλαξε" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Το ενεργό θέμα άλλαξε σε αυτό που έχει οριστεί στο προφίλ σας" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Ελέγξτε τα εισερχόμενά σας για τον σύνδεσμο επαναφοράς. Λειτουργεί μόνο αν έχετε λογαριασμό. Ελέγξτε και στα spam." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Η επαναφορά απέτυχε" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Ήδη συνδεδεμένος" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Υπάρχει αντικρουόμενη συνεδρία στον διακομιστή για αυτόν τον browser. Παρακαλώ αποσυνδεθείτε πρώτα από αυτή." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Συνδεθήκατε" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Συνδεθήκατε με επιτυχία" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Αποτυχία ρύθμισης MFA" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Ο κωδικός ορίστηκε" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Ο κωδικός ορίστηκε με επιτυχία. Μπορείτε πλέον να συνδεθείτε με τον νέο σας κωδικό" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Ο κωδικός δεν μπόρεσε να αλλάξει" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "Οι δύο πεδία κωδικού δεν ταιριάζουν" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Ο κωδικός άλλαξε" diff --git a/src/frontend/src/locales/en/messages.po b/src/frontend/src/locales/en/messages.po index cca4a2ad4d..8e43a80a8e 100644 --- a/src/frontend/src/locales/en/messages.po +++ b/src/frontend/src/locales/en/messages.po @@ -588,7 +588,7 @@ msgstr "Selection Entries" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1689,12 +1689,12 @@ msgstr "Login failed" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Check your input and try again." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Mail delivery successful" @@ -2088,7 +2088,7 @@ msgstr "Processing Data" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "An error occurred" @@ -5257,7 +5257,7 @@ msgstr "Internal server error" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Logged Out" @@ -5285,81 +5285,81 @@ msgstr "MFA Login successful" msgid "MFA details were automatically provided in the browser" msgstr "MFA details were automatically provided in the browser" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Successfully logged out" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Language changed" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Your active language has been changed to the one set in your profile" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Theme changed" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Your active theme has been changed to the one set in your profile" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Check your inbox for a reset link. This only works if you have an account. Check in spam too." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Reset failed" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Already logged in" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "There is a conflicting session on the server for this browser. Please logout of that first." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Logged In" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Successfully logged in" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Failed to set up MFA" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "MFA Setup successful" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "MFA via TOTP has been set up successfully; you will need to login again." -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Password set" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "The password was set successfully. You can now login with your new password" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Password could not be changed" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "The two password fields didn’t match" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Password Changed" diff --git a/src/frontend/src/locales/es/messages.po b/src/frontend/src/locales/es/messages.po index d54c1f8b96..dfaa639e7e 100644 --- a/src/frontend/src/locales/es/messages.po +++ b/src/frontend/src/locales/es/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Error al iniciar sesión" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Verifique su entrada e intente nuevamente." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Envío de correo exitoso" @@ -2093,7 +2093,7 @@ msgstr "Procesando datos" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Se ha producido un error" @@ -5262,7 +5262,7 @@ msgstr "Error interno del servidor" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Desconectado" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Se cerró sesión correctamente" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Restablecimiento fallido" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Ya iniciaste sesión" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Conectado" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Sesión iniciada correctamente" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Contraseña establecida" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "La contraseña fue establecida con éxito. Ahora puede iniciar sesión con su nueva contraseña" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/es_MX/messages.po b/src/frontend/src/locales/es_MX/messages.po index 3e21efc843..0fa36c210f 100644 --- a/src/frontend/src/locales/es_MX/messages.po +++ b/src/frontend/src/locales/es_MX/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: es_MX\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Error al iniciar sesión" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Verifique su entrada e intente nuevamente." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Envío de correo exitoso" @@ -2093,7 +2093,7 @@ msgstr "Procesando datos" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Se ha producido un error" @@ -5262,7 +5262,7 @@ msgstr "Error interno del servidor" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Desconectado" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Se cerró sesión correctamente" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Revisa tu bandeja de entrada para un enlace de restablecimiento. Esto solo funciona si tienes una cuenta. Revisa el correo no deseado también." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Restablecimiento fallido" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Ya iniciaste sesión" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Hay una sesión en conflicto en el servidor para este navegador. Por favor, cierra la sesión primero." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Conectado" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Sesión iniciada correctamente" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Error al configurar MFA" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Contraseña establecida" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "La contraseña fue establecida con éxito. Ahora puede iniciar sesión con su nueva contraseña" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "No se ha podido cambiar la contraseña" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Contraseña Cambiada" diff --git a/src/frontend/src/locales/et/messages.po b/src/frontend/src/locales/et/messages.po index ce880f8da5..871cd96503 100644 --- a/src/frontend/src/locales/et/messages.po +++ b/src/frontend/src/locales/et/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: et\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Sisselogimine ebaõnnestus" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Kontrollige oma sisestust ja proovige uuesti." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "E-kirja kohaletoimetamine õnnestus" @@ -2093,7 +2093,7 @@ msgstr "Andmete töötlemine" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Ilmnes viga" @@ -5262,7 +5262,7 @@ msgstr "Sisemise serveri viga" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Edukalt välja logitud" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Keel on muudetud" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Teema on muudetud" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Kontrollige oma postkasti lähtestamise lingi jaoks. See toimib ainult siis, kui teil on konto. Vaadake ka rämpsposti." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Parool määrati edukalt. Nüüd saate sisse logida oma uue parooliga" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Parool on muudetud" diff --git a/src/frontend/src/locales/fa/messages.po b/src/frontend/src/locales/fa/messages.po index 90f3d82abe..73b6ef9b78 100644 --- a/src/frontend/src/locales/fa/messages.po +++ b/src/frontend/src/locales/fa/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fa\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Persian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/fi/messages.po b/src/frontend/src/locales/fi/messages.po index cdea790b2b..0b5e1b175f 100644 --- a/src/frontend/src/locales/fi/messages.po +++ b/src/frontend/src/locales/fi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/fr/messages.po b/src/frontend/src/locales/fr/messages.po index d1fb1e4ee5..7c71f9f2dd 100644 --- a/src/frontend/src/locales/fr/messages.po +++ b/src/frontend/src/locales/fr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Login invalide" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Vérifiez votre saisie et réessayez." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Envoi du mail réussi" @@ -2093,7 +2093,7 @@ msgstr "Traitement des données" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Une erreur s'est produite" @@ -5262,7 +5262,7 @@ msgstr "Erreur de serveur interne" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Déconnexion" @@ -5290,81 +5290,81 @@ msgstr "Connections réussie via MFA" msgid "MFA details were automatically provided in the browser" msgstr "Les informations pour la MFA ont été automatiquement fournis par le navigateur" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Déconnexion réussie !" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Langue changée" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Votre langue active a été remplacée en celle qui est définie dans votre profil" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Thème changé" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Votre thème actif a été remplacé par celui défini dans votre profil" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Vérifiez votre boîte de réception pour un lien de réinitialisation. Cela ne fonctionne que si vous avez un compte. Vérifiez également dans le spam." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Échec de la réinitialisation" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Déjà connecté" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Il y a un conflit de session sur ce serveur pour ce navigateur. Veuillez d'abord vous déconnecter." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Connecté" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Vous êtes connecté(e)" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Échec de la mise en place de l'AMF" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Mot de passe défini" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Votre mot de passe a été modifié avec succès. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Le mot de passe n'a pas pu être changé" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "Les deux mots de passes ne corrspondent pas" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Mot de passe changé" diff --git a/src/frontend/src/locales/he/messages.po b/src/frontend/src/locales/he/messages.po index 95a4298a7e..57af40371c 100644 --- a/src/frontend/src/locales/he/messages.po +++ b/src/frontend/src/locales/he/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: he\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "הכניסה נכשלה" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "בדוק את הקלט שלך ונסה שוב." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "הדואר נשלח בהצלחה" @@ -2093,7 +2093,7 @@ msgstr "מעבד נתונים" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "אירעה שגיאה" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/hi/messages.po b/src/frontend/src/locales/hi/messages.po index 55210c2236..c508a3360f 100644 --- a/src/frontend/src/locales/hi/messages.po +++ b/src/frontend/src/locales/hi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: hi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "लॉगिन असफल" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/hu/messages.po b/src/frontend/src/locales/hu/messages.po index f08924fb1c..6f7bdecd98 100644 --- a/src/frontend/src/locales/hu/messages.po +++ b/src/frontend/src/locales/hu/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: hu\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Belépés sikertelen" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Ellenőrizd amit beírtál és próbáld újra." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Levél kézbesítése sikeres" @@ -2093,7 +2093,7 @@ msgstr "Adatok feldolgozása" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Hiba történt" @@ -5262,7 +5262,7 @@ msgstr "Belső szerverhiba" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Kijelentkezve" @@ -5290,81 +5290,81 @@ msgstr "MFA alapú bejelentkezés sikeres" msgid "MFA details were automatically provided in the browser" msgstr "Az MFA adatok automatikusan megadásra kerültek a böngészőben" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Sikeresen kijelentkeztél" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Nyelv megváltoztatva" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Az aktív nyelv megváltozott a profilban beállítottra" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "A téma megváltoztatva" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Az aktív téma megváltozott a profilban beállítottra" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Nézd meg a beérkező levelek mappájában a visszaállítási linket. Ez csak akkor működik, ha van fiókod. Ellenőrizd a spameket is." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Visszaállítás sikertelen" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Már bejelentkezett" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Egy ütköző munkamenet található a szerveren ehhez a böngészőhöz. Kérjük előbb jelentkezzen ki abból." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Bejelentkezve" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Sikeres bejelentkezés" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "MFA beállítása sikertelen" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Jelszó beállítva" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "A jelszó beállítása sikeresen megtörtént. Most már bejelentkezhetsz az új jelszavaddal" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "A jelszót nem lehet megváltoztatni" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "A két jelszó nem egyezett meg" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Jelszó megváltozott" diff --git a/src/frontend/src/locales/id/messages.po b/src/frontend/src/locales/id/messages.po index fd2e96f181..053d2ae916 100644 --- a/src/frontend/src/locales/id/messages.po +++ b/src/frontend/src/locales/id/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: id\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Gagal Login" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/it/messages.po b/src/frontend/src/locales/it/messages.po index 00ff8cc343..94ecc8f833 100644 --- a/src/frontend/src/locales/it/messages.po +++ b/src/frontend/src/locales/it/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: it\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Italian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Accesso non riuscito" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Controllare i dati inseriti e riprovare." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Spedizione email riuscita" @@ -2093,7 +2093,7 @@ msgstr "Elaborazione dati" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Si è verificato un errore" @@ -5262,7 +5262,7 @@ msgstr "Errore interno del server" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Disconnesso" @@ -5290,81 +5290,81 @@ msgstr "Login MFA riuscito" msgid "MFA details were automatically provided in the browser" msgstr "I dettagli MFA sono stati forniti automaticamente nel browser" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Disconnesso con Successo" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Lingua cambiata" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "La tua lingua attiva è stata cambiata in quella impostata nel tuo profilo" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Tema cambiato" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Il tuo tema attivo è stato cambiato con quello impostato nel tuo profilo" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Controlla la tua casella di posta per un link di reset. Funziona solo se hai un account. Controlla anche lo spam." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Ripristino fallito" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Già connesso" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "C'è una sessione in conflitto sul server per questo browser. Si prega di disconnettersi prima dalla precedente sessione." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Accesso effettuato" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Accesso effettuato con successo" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Impossibile impostare l'MFA" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "Impostazione MFA riuscita" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "MFA tramite TOTP è stato impostato con successo; sarà necessario effettuare nuovamente il login." -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Password impostata" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "La password è stata impostata con successo. Ora puoi accedere con la tua nuova password" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "La password non può essere cambiata" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "Le due password inserite non corrispondono" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Password cambiata" diff --git a/src/frontend/src/locales/ja/messages.po b/src/frontend/src/locales/ja/messages.po index ce9d0eadd0..078a856441 100644 --- a/src/frontend/src/locales/ja/messages.po +++ b/src/frontend/src/locales/ja/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ja\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "ログインに失敗しました" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "入力内容を確認し、もう一度やり直してください。" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "メール送信成功" @@ -2093,7 +2093,7 @@ msgstr "加工データ" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "エラーが発生しました" @@ -5262,7 +5262,7 @@ msgstr "内部サーバーエラー" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "ログアウト" @@ -5290,81 +5290,81 @@ msgstr "多要素認証ログインに成功しました" msgid "MFA details were automatically provided in the browser" msgstr "多要素認証の詳細情報はブラウザに自動的に記録されました" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "ログアウトに成功しました" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "言語変更" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "アクティブ言語がプロフィールで設定した言語に変更されました。" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "テーマ変更" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "アクティブなテーマがプロフィールで設定したものに変更されました。" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "リセットのリンクを受信トレイでご確認ください。これはアカウントを持っている場合にのみ機能します。迷惑メールもチェックしてください。" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "リセット失敗" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "ログイン済み" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "このブラウザのセッションがサーバー上で競合しています。まずそちらからログアウトしてください。" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "ログイン中" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "ログインに成功しました" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "MFAの設定に失敗しました" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "パスワード設定" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "パスワードは正常に設定されました。新しいパスワードでログインできます。" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "パスワードを変更できませんでした" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "2つのパスワードフィールドが一致しませんでした" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "パスワードが変更されました" diff --git a/src/frontend/src/locales/ko/messages.po b/src/frontend/src/locales/ko/messages.po index 94a2d2c580..6ceeeda2e1 100644 --- a/src/frontend/src/locales/ko/messages.po +++ b/src/frontend/src/locales/ko/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ko\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Korean\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -20,30 +20,30 @@ msgstr "" #: lib/components/Boundary.tsx:14 msgid "Error rendering component" -msgstr "" +msgstr "컴포넌트를 렌더링하는 중 오류가 발생했습니다" #: lib/components/Boundary.tsx:16 msgid "An error occurred while rendering this component. Refer to the console for more information." -msgstr "" +msgstr "이 컴포넌트를 렌더링 하는 중 오류가 발생했습니다. 자세한 내용은 콘솔을 확인하세요" #: lib/components/CopyButton.tsx:49 msgid "Copied" -msgstr "" +msgstr "복사 완료" #: lib/components/CopyButton.tsx:49 msgid "Copy" -msgstr "" +msgstr "복사" #: lib/components/RowActions.tsx:36 #: src/components/items/ActionDropdown.tsx:289 #: src/pages/Index/Scan.tsx:62 msgid "Duplicate" -msgstr "" +msgstr "복제" #: lib/components/RowActions.tsx:46 #: src/components/items/ActionDropdown.tsx:245 msgid "Edit" -msgstr "" +msgstr "편집" #: lib/components/RowActions.tsx:56 #: src/components/forms/ApiForm.tsx:769 @@ -53,7 +53,7 @@ msgstr "" #: src/pages/Notifications.tsx:109 #: src/tables/plugin/PluginListTable.tsx:247 msgid "Delete" -msgstr "" +msgstr "삭제" #: lib/components/RowActions.tsx:66 #: src/components/details/DetailsImage.tsx:83 @@ -68,7 +68,7 @@ msgstr "" #: src/tables/FilterSelectDrawer.tsx:382 #: src/tables/build/BuildOutputTable.tsx:610 msgid "Cancel" -msgstr "" +msgstr "취소" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 @@ -81,7 +81,7 @@ msgstr "" #: src/forms/StockForms.tsx:1099 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:976 msgid "Actions" -msgstr "" +msgstr "작업" #: lib/components/SearchInput.tsx:34 #: src/components/forms/fields/RelatedModelField.tsx:493 @@ -91,32 +91,32 @@ msgstr "" #: src/pages/Index/Settings/UserSettings.tsx:75 #: src/pages/part/PartDetail.tsx:1168 msgid "Search" -msgstr "" +msgstr "찾다" #: lib/components/TableColumnSelect.tsx:16 #: lib/components/TableColumnSelect.tsx:23 msgid "Select Columns" -msgstr "" +msgstr "열 선택" #: lib/components/YesNoButton.tsx:20 msgid "Pass" -msgstr "" +msgstr "통과" #: lib/components/YesNoButton.tsx:21 msgid "Fail" -msgstr "" +msgstr "실패하다" #: lib/components/YesNoButton.tsx:43 #: src/tables/Filter.tsx:41 #: src/tables/Filter.tsx:77 msgid "Yes" -msgstr "" +msgstr "예" #: lib/components/YesNoButton.tsx:44 #: src/tables/Filter.tsx:41 #: src/tables/Filter.tsx:78 msgid "No" -msgstr "" +msgstr "아니요" #: lib/enums/ModelInformation.tsx:29 #: src/components/wizards/OrderPartsWizard.tsx:279 @@ -148,7 +148,7 @@ msgstr "" #: src/tables/stock/StockTrackingTable.tsx:119 #: src/tables/stock/StockTrackingTable.tsx:237 msgid "Part" -msgstr "" +msgstr "부품" #: lib/enums/ModelInformation.tsx:30 #: lib/enums/Roles.tsx:35 @@ -161,7 +161,7 @@ msgstr "" #: src/pages/part/CategoryDetail.tsx:371 #: src/pages/part/PartDetail.tsx:956 msgid "Parts" -msgstr "" +msgstr "부품" #: lib/enums/ModelInformation.tsx:37 #: src/pages/Index/Settings/AdminCenter/PartParameterPanel.tsx:13 @@ -174,7 +174,7 @@ msgstr "" #: lib/enums/ModelInformation.tsx:39 msgid "Parameter" -msgstr "" +msgstr "매개변수" #: lib/enums/ModelInformation.tsx:40 #: src/components/panels/ParametersPanel.tsx:21 @@ -183,25 +183,25 @@ msgstr "" #: src/pages/Index/Settings/SystemSettings.tsx:193 #: src/pages/part/PartDetail.tsx:920 msgid "Parameters" -msgstr "" +msgstr "매개변수" #: lib/enums/ModelInformation.tsx:45 #: src/tables/part/PartCategoryTemplateTable.tsx:87 msgid "Parameter Template" -msgstr "" +msgstr "매개변수 템플릿" #: lib/enums/ModelInformation.tsx:46 #: src/pages/Index/Settings/AdminCenter/ParameterPanel.tsx:13 msgid "Parameter Templates" -msgstr "" +msgstr "매개변수 템플릿" #: lib/enums/ModelInformation.tsx:52 msgid "Part Test Template" -msgstr "" +msgstr "부품 테스트 템플릿" #: lib/enums/ModelInformation.tsx:53 msgid "Part Test Templates" -msgstr "" +msgstr "부품 테스트 템플릿 목록" #: lib/enums/ModelInformation.tsx:59 #: src/components/wizards/OrderPartsWizard.tsx:290 @@ -213,12 +213,12 @@ msgstr "" #: src/tables/purchasing/SupplierPartTable.tsx:106 #: src/tables/stock/StockItemTable.tsx:99 msgid "Supplier Part" -msgstr "" +msgstr "공급업체 부품" #: lib/enums/ModelInformation.tsx:60 #: src/pages/purchasing/PurchasingIndex.tsx:129 msgid "Supplier Parts" -msgstr "" +msgstr "공급업체 부품 목록" #: lib/enums/ModelInformation.tsx:69 #: src/pages/company/ManufacturerPartDetail.tsx:289 @@ -226,18 +226,18 @@ msgstr "" #: src/tables/part/PartPurchaseOrdersTable.tsx:56 #: src/tables/stock/StockItemTable.tsx:106 msgid "Manufacturer Part" -msgstr "" +msgstr "제조업체 부품" #: lib/enums/ModelInformation.tsx:70 #: src/pages/purchasing/PurchasingIndex.tsx:179 msgid "Manufacturer Parts" -msgstr "" +msgstr "제조업체 부품" #: lib/enums/ModelInformation.tsx:79 #: src/pages/part/CategoryDetail.tsx:371 #: src/tables/Filter.tsx:449 msgid "Part Category" -msgstr "" +msgstr "부품 카테고리" #: lib/enums/ModelInformation.tsx:80 #: lib/enums/Roles.tsx:37 @@ -245,7 +245,7 @@ msgstr "" #: src/pages/part/CategoryDetail.tsx:362 #: src/pages/part/PartDetail.tsx:1209 msgid "Part Categories" -msgstr "" +msgstr "부품 카테고리 목록" #: lib/enums/ModelInformation.tsx:88 #: src/forms/BuildForms.tsx:512 @@ -260,7 +260,7 @@ msgstr "" #: src/tables/stock/StockTrackingTable.tsx:72 #: src/tables/stock/StockTrackingTable.tsx:247 msgid "Stock Item" -msgstr "" +msgstr "재고 항목" #: lib/enums/ModelInformation.tsx:89 #: lib/enums/Roles.tsx:45 @@ -270,62 +270,62 @@ msgstr "" #: src/pages/stock/LocationDetail.tsx:130 #: src/pages/stock/LocationDetail.tsx:211 msgid "Stock Items" -msgstr "" +msgstr "재고 품목" #: lib/enums/ModelInformation.tsx:98 #: lib/enums/Roles.tsx:47 #: src/pages/stock/LocationDetail.tsx:457 msgid "Stock Location" -msgstr "" +msgstr "재고 위치" #: lib/enums/ModelInformation.tsx:99 #: src/pages/stock/LocationDetail.tsx:185 #: src/pages/stock/LocationDetail.tsx:449 #: src/pages/stock/StockDetail.tsx:999 msgid "Stock Locations" -msgstr "" +msgstr "재고 위치 목록" #: lib/enums/ModelInformation.tsx:108 msgid "Stock Location Type" -msgstr "" +msgstr "재고 위치 유형" #: lib/enums/ModelInformation.tsx:109 msgid "Stock Location Types" -msgstr "" +msgstr "재고 위치 유형 목록" #: lib/enums/ModelInformation.tsx:114 #: src/pages/Index/Settings/SystemSettings.tsx:257 #: src/pages/part/PartDetail.tsx:877 msgid "Stock History" -msgstr "" +msgstr "재고 이력" #: lib/enums/ModelInformation.tsx:115 msgid "Stock Histories" -msgstr "" +msgstr "재고 이력" #: lib/enums/ModelInformation.tsx:120 msgid "Build" -msgstr "" +msgstr "생산" #: lib/enums/ModelInformation.tsx:121 msgid "Builds" -msgstr "" +msgstr "생산" #: lib/enums/ModelInformation.tsx:130 msgid "Build Line" -msgstr "" +msgstr "생산 항목" #: lib/enums/ModelInformation.tsx:131 msgid "Build Lines" -msgstr "" +msgstr "생산 항목" #: lib/enums/ModelInformation.tsx:138 msgid "Build Item" -msgstr "" +msgstr "생산 아이템" #: lib/enums/ModelInformation.tsx:139 msgid "Build Items" -msgstr "" +msgstr "생산 아이템" #: lib/enums/ModelInformation.tsx:144 #: src/pages/company/CompanyDetail.tsx:347 @@ -333,11 +333,11 @@ msgstr "" #: src/tables/company/ContactTable.tsx:67 #: src/tables/company/ParametricCompanyTable.tsx:18 msgid "Company" -msgstr "" +msgstr "회사" #: lib/enums/ModelInformation.tsx:145 msgid "Companies" -msgstr "" +msgstr "회사 목록" #: lib/enums/ModelInformation.tsx:152 #: src/pages/build/BuildDetail.tsx:335 @@ -348,12 +348,12 @@ msgstr "" #: src/tables/Filter.tsx:346 #: src/tables/TableHoverCard.tsx:101 msgid "Project Code" -msgstr "" +msgstr "프로젝트 코드" #: lib/enums/ModelInformation.tsx:153 #: src/pages/Index/Settings/AdminCenter/Index.tsx:172 msgid "Project Codes" -msgstr "" +msgstr "프로젝트 코드 목록" #: lib/enums/ModelInformation.tsx:159 #: src/components/wizards/OrderPartsWizard.tsx:338 @@ -364,7 +364,7 @@ msgstr "" #: src/tables/stock/StockItemTable.tsx:91 #: src/tables/stock/StockTrackingTable.tsx:152 msgid "Purchase Order" -msgstr "" +msgstr "발주서" #: lib/enums/ModelInformation.tsx:160 #: lib/enums/Roles.tsx:39 @@ -375,15 +375,15 @@ msgstr "" #: src/pages/part/PartDetail.tsx:841 #: src/pages/purchasing/PurchasingIndex.tsx:66 msgid "Purchase Orders" -msgstr "" +msgstr "발주서" #: lib/enums/ModelInformation.tsx:169 msgid "Purchase Order Line" -msgstr "" +msgstr "발주서 항목" #: lib/enums/ModelInformation.tsx:170 msgid "Purchase Order Lines" -msgstr "" +msgstr "발주서 항목" #: lib/enums/ModelInformation.tsx:175 #: src/pages/build/BuildDetail.tsx:308 @@ -397,7 +397,7 @@ msgstr "" #: src/tables/sales/SalesOrderShipmentTable.tsx:136 #: src/tables/stock/StockTrackingTable.tsx:163 msgid "Sales Order" -msgstr "" +msgstr "판매 주문서" #: lib/enums/ModelInformation.tsx:176 #: lib/enums/Roles.tsx:43 @@ -407,22 +407,22 @@ msgstr "" #: src/pages/part/PartDetail.tsx:853 #: src/pages/sales/SalesIndex.tsx:53 msgid "Sales Orders" -msgstr "" +msgstr "판매 주문서" #: lib/enums/ModelInformation.tsx:185 #: src/pages/sales/SalesOrderShipmentDetail.tsx:439 msgid "Sales Order Shipment" -msgstr "" +msgstr "판매 주문 배송" #: lib/enums/ModelInformation.tsx:186 msgid "Sales Order Shipments" -msgstr "" +msgstr "판매 주문 출하 목록" #: lib/enums/ModelInformation.tsx:194 #: src/pages/sales/ReturnOrderDetail.tsx:564 #: src/tables/stock/StockTrackingTable.tsx:174 msgid "Return Order" -msgstr "" +msgstr "반품 주문" #: lib/enums/ModelInformation.tsx:195 #: lib/enums/Roles.tsx:41 @@ -432,25 +432,25 @@ msgstr "" #: src/pages/part/PartDetail.tsx:860 #: src/pages/sales/SalesIndex.tsx:99 msgid "Return Orders" -msgstr "" +msgstr "반품 주문 목록" #: lib/enums/ModelInformation.tsx:204 msgid "Return Order Line Item" -msgstr "" +msgstr "반품 주문 항목" #: lib/enums/ModelInformation.tsx:205 msgid "Return Order Line Items" -msgstr "" +msgstr "반품 주문 라인 항목 목록" #: lib/enums/ModelInformation.tsx:210 #: src/tables/company/AddressTable.tsx:52 msgid "Address" -msgstr "" +msgstr "주소" #: lib/enums/ModelInformation.tsx:211 #: src/pages/company/CompanyDetail.tsx:266 msgid "Addresses" -msgstr "" +msgstr "주소 목록" #: lib/enums/ModelInformation.tsx:217 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:89 @@ -459,22 +459,22 @@ msgstr "" #: src/pages/sales/ReturnOrderDetail.tsx:208 #: src/pages/sales/SalesOrderDetail.tsx:201 msgid "Contact" -msgstr "" +msgstr "연락" #: lib/enums/ModelInformation.tsx:218 #: src/pages/company/CompanyDetail.tsx:260 #: src/pages/core/CoreIndex.tsx:33 msgid "Contacts" -msgstr "" +msgstr "연락처 목록" #: lib/enums/ModelInformation.tsx:224 #: src/tables/ColumnRenderers.tsx:648 msgid "Owner" -msgstr "" +msgstr "소유자" #: lib/enums/ModelInformation.tsx:225 msgid "Owners" -msgstr "" +msgstr "소유자 목록" #: lib/enums/ModelInformation.tsx:231 #: src/pages/Auth/ChangePassword.tsx:36 @@ -489,7 +489,7 @@ msgstr "" #: src/tables/stock/StockTrackingTable.tsx:225 #: src/tables/stock/StockTrackingTable.tsx:273 msgid "User" -msgstr "" +msgstr "사용자" #: lib/enums/ModelInformation.tsx:232 #: src/components/nav/NavigationDrawer.tsx:105 @@ -497,12 +497,12 @@ msgstr "" #: src/pages/core/CoreIndex.tsx:21 #: src/pages/core/UserDetail.tsx:226 msgid "Users" -msgstr "" +msgstr "사용자 목록" #: lib/enums/ModelInformation.tsx:238 #: src/pages/core/GroupDetail.tsx:78 msgid "Group" -msgstr "" +msgstr "그룹" #: lib/enums/ModelInformation.tsx:239 #: src/components/nav/NavigationDrawer.tsx:111 @@ -512,67 +512,67 @@ msgstr "" #: src/pages/core/UserDetail.tsx:99 #: src/tables/settings/UserTable.tsx:276 msgid "Groups" -msgstr "" +msgstr "그룹 목록" #: lib/enums/ModelInformation.tsx:246 msgid "Import Session" -msgstr "" +msgstr "세션 가져오기" #: lib/enums/ModelInformation.tsx:247 msgid "Import Sessions" -msgstr "" +msgstr "세션 목록 가져오기" #: lib/enums/ModelInformation.tsx:254 msgid "Label Template" -msgstr "" +msgstr "라벨 템플릿" #: lib/enums/ModelInformation.tsx:255 #: src/pages/Index/Settings/AdminCenter/Index.tsx:209 msgid "Label Templates" -msgstr "" +msgstr "라벨 템플릿 목록" #: lib/enums/ModelInformation.tsx:262 msgid "Report Template" -msgstr "" +msgstr "보고서 템플릿" #: lib/enums/ModelInformation.tsx:263 #: src/pages/Index/Settings/AdminCenter/Index.tsx:215 msgid "Report Templates" -msgstr "" +msgstr "리포트 템플릿 목록" #: lib/enums/ModelInformation.tsx:270 #: src/components/plugins/PluginDrawer.tsx:153 msgid "Plugin Configuration" -msgstr "" +msgstr "플러그인 구성" #: lib/enums/ModelInformation.tsx:271 msgid "Plugin Configurations" -msgstr "" +msgstr "플러그인 구성 목록" #: lib/enums/ModelInformation.tsx:278 msgid "Content Type" -msgstr "" +msgstr "콘텐츠 타입" #: lib/enums/ModelInformation.tsx:279 msgid "Content Types" -msgstr "" +msgstr "콘텐츠 타입 목록" #: lib/enums/ModelInformation.tsx:284 msgid "Selection List" -msgstr "" +msgstr "선택 목록" #: lib/enums/ModelInformation.tsx:285 #: src/pages/Index/Settings/AdminCenter/ParameterPanel.tsx:21 msgid "Selection Lists" -msgstr "" +msgstr "선택 목록" #: lib/enums/ModelInformation.tsx:291 msgid "Selection Entry" -msgstr "" +msgstr "선택 항목" #: lib/enums/ModelInformation.tsx:292 msgid "Selection Entries" -msgstr "" +msgstr "선택 항목" #: lib/enums/ModelInformation.tsx:298 #: src/components/barcodes/BarcodeInput.tsx:114 @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -608,17 +608,17 @@ msgstr "" #: src/tables/settings/EmailTable.tsx:109 #: src/tables/stock/StockItemTestResultTable.tsx:338 msgid "Error" -msgstr "" +msgstr "오류" #: lib/enums/ModelInformation.tsx:299 #: src/tables/machine/MachineListTable.tsx:402 #: src/tables/machine/MachineTypeTable.tsx:297 msgid "Errors" -msgstr "" +msgstr "오류 목록" #: lib/enums/Roles.tsx:31 msgid "Admin" -msgstr "" +msgstr "관리" #: lib/enums/Roles.tsx:33 #: src/defaults/actions.tsx:146 @@ -627,49 +627,49 @@ msgstr "" #: src/pages/part/PartDetail.tsx:870 #: src/pages/sales/SalesOrderDetail.tsx:431 msgid "Build Orders" -msgstr "" +msgstr "생산 오더" #: lib/functions/Notification.tsx:11 msgid "Not implemented" -msgstr "" +msgstr "구현되지 않음" #: lib/functions/Notification.tsx:12 msgid "This feature is not yet implemented" -msgstr "" +msgstr "이 기능은 아직 구현되지 않았습니다." #: lib/functions/Notification.tsx:23 #: src/components/errors/PermissionDenied.tsx:8 msgid "Permission Denied" -msgstr "" +msgstr "권한이 거부되었습니다" #: lib/functions/Notification.tsx:24 msgid "You do not have permission to perform this action" -msgstr "" +msgstr "이 작업을 수행할 권한이 없습니다." #: lib/functions/Notification.tsx:35 msgid "Invalid Return Code" -msgstr "" +msgstr "잘못된 반품 코드" #: lib/functions/Notification.tsx:36 msgid "Server returned status {returnCode}" -msgstr "" +msgstr "서버가 상태 {returnCode}를 반환했습니다." #: lib/functions/Notification.tsx:46 msgid "Timeout" -msgstr "" +msgstr "시간초과" #: lib/functions/Notification.tsx:47 msgid "The request timed out" -msgstr "" +msgstr "요청 시간이 초과되었습니다." #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" -msgstr "" +msgstr "프로세스 실패" #: lib/hooks/MonitorDataOutput.tsx:75 msgid "Process completed successfully" -msgstr "" +msgstr "프로세스가 성공적으로 완료되었습니다." #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" @@ -677,59 +677,59 @@ msgstr "" #: src/components/barcodes/BarcodeCameraInput.tsx:103 msgid "Error while scanning" -msgstr "" +msgstr "스캔하는 동안 오류가 발생했습니다." #: src/components/barcodes/BarcodeCameraInput.tsx:117 msgid "Error while stopping" -msgstr "" +msgstr "중지 중 오류 발생" #: src/components/barcodes/BarcodeCameraInput.tsx:159 msgid "Start scanning by selecting a camera and pressing the play button." -msgstr "" +msgstr "카메라를 선택하고 재생 버튼을 눌러 스캔을 시작합니다." #: src/components/barcodes/BarcodeCameraInput.tsx:180 msgid "Stop scanning" -msgstr "" +msgstr "스캔중지" #: src/components/barcodes/BarcodeCameraInput.tsx:190 msgid "Start scanning" -msgstr "" +msgstr "스캔 시작" #: src/components/barcodes/BarcodeInput.tsx:34 #: src/tables/general/BarcodeScanTable.tsx:55 #: src/tables/settings/BarcodeScanHistoryTable.tsx:64 msgid "Barcode" -msgstr "" +msgstr "바코드" #: src/components/barcodes/BarcodeInput.tsx:35 #: src/components/barcodes/BarcodeKeyboardInput.tsx:18 #: src/defaults/actions.tsx:137 msgid "Scan" -msgstr "" +msgstr "스캔" #: src/components/barcodes/BarcodeInput.tsx:53 msgid "Camera Input" -msgstr "" +msgstr "카메라 입력" #: src/components/barcodes/BarcodeInput.tsx:63 msgid "Scanner Input" -msgstr "" +msgstr "스캐너 입력" #: src/components/barcodes/BarcodeInput.tsx:105 msgid "Barcode Data" -msgstr "" +msgstr "바코드 데이터" #: src/components/barcodes/BarcodeInput.tsx:109 msgid "No barcode data" -msgstr "" +msgstr "바코드 데이터 없음" #: src/components/barcodes/BarcodeInput.tsx:110 msgid "Scan or enter barcode data" -msgstr "" +msgstr "바코드 데이터 스캔 또는 입력" #: src/components/barcodes/BarcodeKeyboardInput.tsx:64 msgid "Enter barcode data" -msgstr "" +msgstr "바코드 데이터 입력" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 @@ -737,15 +737,15 @@ msgstr "" #: src/forms/PurchaseOrderForms.tsx:507 #: src/forms/PurchaseOrderForms.tsx:648 msgid "Scan Barcode" -msgstr "" +msgstr "바코드 스캔하기" #: src/components/barcodes/BarcodeScanDialog.tsx:121 msgid "No matching item found" -msgstr "" +msgstr "일치하는 항목이 없습니다." #: src/components/barcodes/BarcodeScanDialog.tsx:150 msgid "Barcode does not match the expected model type" -msgstr "" +msgstr "바코드가 예상 모델 유형과 일치하지 않습니다." #: src/components/barcodes/BarcodeScanDialog.tsx:161 #: src/components/editors/NotesEditor.tsx:84 @@ -757,52 +757,52 @@ msgstr "" #: src/tables/bom/BomTable.tsx:548 #: src/tables/settings/PendingTasksTable.tsx:68 msgid "Success" -msgstr "" +msgstr "성공" #: src/components/barcodes/BarcodeScanDialog.tsx:167 msgid "Failed to handle barcode" -msgstr "" +msgstr "바코드 처리에 실패했습니다" #: src/components/barcodes/BarcodeScanDialog.tsx:183 #: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" -msgstr "" +msgstr "바코드 스캔 실패" #: src/components/barcodes/QRCode.tsx:94 msgid "Low (7%)" -msgstr "" +msgstr "낮음 (7%)" #: src/components/barcodes/QRCode.tsx:95 msgid "Medium (15%)" -msgstr "" +msgstr "중간 (15%)" #: src/components/barcodes/QRCode.tsx:96 msgid "Quartile (25%)" -msgstr "" +msgstr "사분위 (25%)" #: src/components/barcodes/QRCode.tsx:97 msgid "High (30%)" -msgstr "" +msgstr "높음 (30%)" #: src/components/barcodes/QRCode.tsx:107 msgid "Custom barcode" -msgstr "" +msgstr "맞춤형 바코드" #: src/components/barcodes/QRCode.tsx:108 msgid "A custom barcode is registered for this item. The shown code is not that custom barcode." -msgstr "" +msgstr "이 항목에는 사용자 지정 바코드가 등록되어 있습니다. 표시된 코드는 해당 사용자 지정 바코드가 아닙니다." #: src/components/barcodes/QRCode.tsx:127 msgid "Barcode Data:" -msgstr "" +msgstr "바코드 데이터:" #: src/components/barcodes/QRCode.tsx:138 msgid "Select Error Correction Level" -msgstr "" +msgstr "오류 수정 수준 선택" #: src/components/barcodes/QRCode.tsx:170 msgid "Failed to link barcode" -msgstr "" +msgstr "바코드 연결 실패" #: src/components/barcodes/QRCode.tsx:179 #: src/pages/part/PartDetail.tsx:498 @@ -812,21 +812,21 @@ msgstr "" #: src/pages/sales/SalesOrderShipmentDetail.tsx:119 #: src/pages/stock/StockDetail.tsx:186 msgid "Link" -msgstr "" +msgstr "링크" #: src/components/barcodes/QRCode.tsx:200 msgid "This will remove the link to the associated barcode" -msgstr "" +msgstr "연결된 바코드 링크가 제거됩니다" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 #: src/forms/PurchaseOrderForms.tsx:638 msgid "Unlink Barcode" -msgstr "" +msgstr "바코드 연결 해제" #: src/components/buttons/AdminButton.tsx:86 msgid "Open in admin interface" -msgstr "" +msgstr "관리 인터페이스에서 열기" #: src/components/buttons/CopyButton.tsx:18 #~ msgid "Copy to clipboard" @@ -834,11 +834,11 @@ msgstr "" #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" -msgstr "" +msgstr "라벨 인쇄" #: src/components/buttons/PrintingActions.tsx:61 msgid "Printing Reports" -msgstr "" +msgstr "보고서 인쇄" #: src/components/buttons/PrintingActions.tsx:77 #~ msgid "Printing" @@ -858,12 +858,12 @@ msgstr "" #: src/components/buttons/PrintingActions.tsx:126 msgid "Print Label" -msgstr "" +msgstr "라벨 인쇄" #: src/components/buttons/PrintingActions.tsx:138 #: src/components/buttons/PrintingActions.tsx:172 msgid "Print" -msgstr "" +msgstr "인쇄" #: src/components/buttons/PrintingActions.tsx:153 #~ msgid "Report printing completed successfully" @@ -875,27 +875,27 @@ msgstr "" #: src/components/buttons/PrintingActions.tsx:165 msgid "Print Report" -msgstr "" +msgstr "보고서 인쇄하기" #: src/components/buttons/PrintingActions.tsx:193 msgid "Printing Actions" -msgstr "" +msgstr "인쇄 작업" #: src/components/buttons/PrintingActions.tsx:199 msgid "Print Labels" -msgstr "" +msgstr "라벨 인쇄" #: src/components/buttons/PrintingActions.tsx:205 msgid "Print Reports" -msgstr "" +msgstr "보고서 인쇄" #: src/components/buttons/RemoveRowButton.tsx:9 msgid "Remove this row" -msgstr "" +msgstr "이 행 제거" #: src/components/buttons/SSOButton.tsx:40 msgid "You will be redirected to the provider for further actions." -msgstr "" +msgstr "추가 작업을 위해 제공업체 페이지로 이동합니다." #: src/components/buttons/SSOButton.tsx:44 #~ msgid "This provider is not full set up." @@ -919,19 +919,19 @@ msgstr "" #: src/components/buttons/SpotlightButton.tsx:12 msgid "Open spotlight" -msgstr "" +msgstr "공개 스포트라이트" #: src/components/buttons/StarredToggleButton.tsx:36 msgid "Subscription Updated" -msgstr "" +msgstr "구독이 업데이트되었습니다." #: src/components/buttons/StarredToggleButton.tsx:38 msgid "Subscription removed" -msgstr "" +msgstr "구독이 제거되었습니다" #: src/components/buttons/StarredToggleButton.tsx:38 msgid "Subscription added" -msgstr "" +msgstr "구독 추가됨" #: src/components/buttons/StarredToggleButton.tsx:57 #~ msgid "Unsubscribe from part" @@ -939,28 +939,28 @@ msgstr "" #: src/components/buttons/StarredToggleButton.tsx:66 msgid "Unsubscribe from notifications" -msgstr "" +msgstr "알림 구독 취소" #: src/components/buttons/StarredToggleButton.tsx:67 msgid "Subscribe to notifications" -msgstr "" +msgstr "알림 구독" #: src/components/calendar/Calendar.tsx:118 #: src/components/calendar/Calendar.tsx:181 msgid "Calendar Filters" -msgstr "" +msgstr "달력 필터 편집" #: src/components/calendar/Calendar.tsx:133 msgid "Previous month" -msgstr "" +msgstr "지난달" #: src/components/calendar/Calendar.tsx:142 msgid "Select month" -msgstr "" +msgstr "월 선택" #: src/components/calendar/Calendar.tsx:163 msgid "Next month" -msgstr "" +msgstr "다음 달" #: src/components/calendar/Calendar.tsx:178 #: src/tables/InvenTreeTableHeader.tsx:294 @@ -970,37 +970,37 @@ msgstr "" #: src/components/calendar/Calendar.tsx:194 #: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" -msgstr "" +msgstr "1" #: src/components/calendar/OrderCalendar.tsx:132 msgid "Order Updated" -msgstr "" +msgstr "주문이 업데이트되었습니다" #: src/components/calendar/OrderCalendar.tsx:142 msgid "Error updating order" -msgstr "" +msgstr "주문 업데이트 중 오류가 발생했습니다" #: src/components/calendar/OrderCalendar.tsx:178 #: src/tables/Filter.tsx:194 msgid "Overdue" -msgstr "" +msgstr "지연" #: src/components/dashboard/DashboardLayout.tsx:282 msgid "Failed to load dashboard widgets." -msgstr "" +msgstr "대시보드 위젯을 불러오지 못했습니다." #: src/components/dashboard/DashboardLayout.tsx:293 msgid "No Widgets Selected" -msgstr "" +msgstr "선택된 위젯이 없습니다" #: src/components/dashboard/DashboardLayout.tsx:296 msgid "Use the menu to add widgets to the dashboard" -msgstr "" +msgstr "메뉴를 사용해 대시보드에 위젯을 추가하세요" #: src/components/dashboard/DashboardMenu.tsx:62 #: src/components/dashboard/DashboardMenu.tsx:138 msgid "Accept Layout" -msgstr "" +msgstr "레이아웃 수락" #: src/components/dashboard/DashboardMenu.tsx:94 #: src/components/nav/NavigationDrawer.tsx:64 @@ -1008,287 +1008,287 @@ msgstr "" #: src/defaults/links.tsx:31 #: src/pages/Index/Home.tsx:8 msgid "Dashboard" -msgstr "" +msgstr "대시보드" #: src/components/dashboard/DashboardMenu.tsx:102 msgid "Edit Layout" -msgstr "" +msgstr "레이아웃 편집" #: src/components/dashboard/DashboardMenu.tsx:111 msgid "Add Widget" -msgstr "" +msgstr "위젯 추가하기" #: src/components/dashboard/DashboardMenu.tsx:120 msgid "Remove Widgets" -msgstr "" +msgstr "위젯 제거" #: src/components/dashboard/DashboardMenu.tsx:129 msgid "Clear Widgets" -msgstr "" +msgstr "위젯 모두 지우기" #: src/components/dashboard/DashboardWidget.tsx:81 msgid "Remove this widget from the dashboard" -msgstr "" +msgstr "대시보드에서 이 위젯을 제거하세요." #: src/components/dashboard/DashboardWidgetDrawer.tsx:77 msgid "Filter dashboard widgets" -msgstr "" +msgstr "대시보드 위젯 필터" #: src/components/dashboard/DashboardWidgetDrawer.tsx:98 msgid "Add this widget to the dashboard" -msgstr "" +msgstr "대시보드에 이 위젯 추가" #: src/components/dashboard/DashboardWidgetDrawer.tsx:123 msgid "No Widgets Available" -msgstr "" +msgstr "사용 가능한 위젯이 없습니다" #: src/components/dashboard/DashboardWidgetDrawer.tsx:124 msgid "There are no more widgets available for the dashboard" -msgstr "" +msgstr "대시보드에 추가할 수 있는 위젯이 더 이상 없습니다." #: src/components/dashboard/DashboardWidgetLibrary.tsx:25 msgid "Subscribed Parts" -msgstr "" +msgstr "구독한 부품" #: src/components/dashboard/DashboardWidgetLibrary.tsx:26 msgid "Show the number of parts which you have subscribed to" -msgstr "" +msgstr "구독 중인 부품 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:32 msgid "Subscribed Categories" -msgstr "" +msgstr "구독 카테고리" #: src/components/dashboard/DashboardWidgetLibrary.tsx:33 msgid "Show the number of part categories which you have subscribed to" -msgstr "" +msgstr "구독한 부품 카테고리 수 표시" #: src/components/dashboard/DashboardWidgetLibrary.tsx:42 msgid "Invalid BOMs" -msgstr "" +msgstr "잘못된 BOM" #: src/components/dashboard/DashboardWidgetLibrary.tsx:43 msgid "Assemblies requiring bill of materials validation" -msgstr "" +msgstr "BOM 검증이 필요한 조립품" #: src/components/dashboard/DashboardWidgetLibrary.tsx:54 #: src/tables/part/PartTable.tsx:264 msgid "Low Stock" -msgstr "" +msgstr "재고 부족" #: src/components/dashboard/DashboardWidgetLibrary.tsx:56 msgid "Show the number of parts which are low on stock" -msgstr "" +msgstr "재고가 부족한 부품 수 표시" #: src/components/dashboard/DashboardWidgetLibrary.tsx:65 msgid "Required for Build Orders" -msgstr "" +msgstr "생산 주문에 필요" #: src/components/dashboard/DashboardWidgetLibrary.tsx:67 msgid "Show parts which are required for active build orders" -msgstr "" +msgstr "진행 중인 생산 주문에 필요한 부품을 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:72 msgid "Expired Stock Items" -msgstr "" +msgstr "만료된 재고 품목" #: src/components/dashboard/DashboardWidgetLibrary.tsx:74 msgid "Show the number of stock items which have expired" -msgstr "" +msgstr "만료된 재고 품목 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:80 msgid "Stale Stock Items" -msgstr "" +msgstr "오래된 재고 품목" #: src/components/dashboard/DashboardWidgetLibrary.tsx:82 msgid "Show the number of stock items which are stale" -msgstr "" +msgstr "오래된 재고 품목 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:88 msgid "Active Build Orders" -msgstr "" +msgstr "진행 중인 생산 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:90 msgid "Show the number of build orders which are currently active" -msgstr "" +msgstr "현재 진행 중인 생산 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:95 msgid "Overdue Build Orders" -msgstr "" +msgstr "지연된 생산 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:97 msgid "Show the number of build orders which are overdue" -msgstr "" +msgstr "지연된 생산 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:102 msgid "Assigned Build Orders" -msgstr "" +msgstr "할당된 생산 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:104 msgid "Show the number of build orders which are assigned to you" -msgstr "" +msgstr "나에게 할당된 생산 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:109 msgid "Active Sales Orders" -msgstr "" +msgstr "진행 중인 판매 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:111 msgid "Show the number of sales orders which are currently active" -msgstr "" +msgstr "현재 진행 중인 판매 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:116 msgid "Overdue Sales Orders" -msgstr "" +msgstr "지연된 판매 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:118 msgid "Show the number of sales orders which are overdue" -msgstr "" +msgstr "지연된 판매 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:123 msgid "Assigned Sales Orders" -msgstr "" +msgstr "할당된 판매 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:125 msgid "Show the number of sales orders which are assigned to you" -msgstr "" +msgstr "나에게 할당된 판매 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:130 #: src/pages/sales/SalesIndex.tsx:87 msgid "Pending Shipments" -msgstr "" +msgstr "배송 대기 중" #: src/components/dashboard/DashboardWidgetLibrary.tsx:132 msgid "Show the number of pending sales order shipments" -msgstr "" +msgstr "대기 중인 판매 주문 배송 수 표시" #: src/components/dashboard/DashboardWidgetLibrary.tsx:137 msgid "Active Purchase Orders" -msgstr "" +msgstr "진행 중인 발주서" #: src/components/dashboard/DashboardWidgetLibrary.tsx:139 msgid "Show the number of purchase orders which are currently active" -msgstr "" +msgstr "현재 진행 중인 발주서 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:144 msgid "Overdue Purchase Orders" -msgstr "" +msgstr "기한이 지난 발주서" #: src/components/dashboard/DashboardWidgetLibrary.tsx:146 msgid "Show the number of purchase orders which are overdue" -msgstr "" +msgstr "기한이 지난 발주서 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:151 msgid "Assigned Purchase Orders" -msgstr "" +msgstr "나에게 할당된 발주서" #: src/components/dashboard/DashboardWidgetLibrary.tsx:153 msgid "Show the number of purchase orders which are assigned to you" -msgstr "" +msgstr "나에게 할당된 발주서 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:158 msgid "Active Return Orders" -msgstr "" +msgstr "진행 중인 반품 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:160 msgid "Show the number of return orders which are currently active" -msgstr "" +msgstr "현재 진행 중인 반품 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:165 msgid "Overdue Return Orders" -msgstr "" +msgstr "기한이 지난 반품 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:167 msgid "Show the number of return orders which are overdue" -msgstr "" +msgstr "기한이 지난 반품 주문 건수 표시" #: src/components/dashboard/DashboardWidgetLibrary.tsx:172 msgid "Assigned Return Orders" -msgstr "" +msgstr "나에게 할당된 반품 주문" #: src/components/dashboard/DashboardWidgetLibrary.tsx:174 msgid "Show the number of return orders which are assigned to you" -msgstr "" +msgstr "나에게 할당된 반품 주문 수를 표시합니다" #: src/components/dashboard/DashboardWidgetLibrary.tsx:194 #: src/components/dashboard/widgets/GetStartedWidget.tsx:15 #: src/defaults/links.tsx:86 msgid "Getting Started" -msgstr "" +msgstr "입문하기" #: src/components/dashboard/DashboardWidgetLibrary.tsx:195 #: src/defaults/links.tsx:89 msgid "Getting started with InvenTree" -msgstr "" +msgstr "InvenTree 시작하기" #: src/components/dashboard/DashboardWidgetLibrary.tsx:202 #: src/components/dashboard/widgets/NewsWidget.tsx:123 msgid "News Updates" -msgstr "" +msgstr "뉴스&업데이트" #: src/components/dashboard/DashboardWidgetLibrary.tsx:203 msgid "The latest news from InvenTree" -msgstr "" +msgstr "InvenTree의 최신 소식" #: src/components/dashboard/widgets/ColorToggleWidget.tsx:18 #: src/components/nav/MainMenu.tsx:93 msgid "Change Color Mode" -msgstr "" +msgstr "색 변경" #: src/components/dashboard/widgets/ColorToggleWidget.tsx:23 msgid "Change the color mode of the user interface" -msgstr "" +msgstr "사용자 인터페이스의 색상 모드 변경" #: src/components/dashboard/widgets/LanguageSelectWidget.tsx:18 msgid "Change Language" -msgstr "" +msgstr "언어 변경" #: src/components/dashboard/widgets/LanguageSelectWidget.tsx:23 msgid "Change the language of the user interface" -msgstr "" +msgstr "사용자 인터페이스 언어를 변경합니다" #: src/components/dashboard/widgets/NewsWidget.tsx:60 #: src/components/nav/NotificationDrawer.tsx:94 #: src/pages/Notifications.tsx:53 msgid "Mark as read" -msgstr "" +msgstr "읽음으로 표시" #: src/components/dashboard/widgets/NewsWidget.tsx:115 msgid "Requires Superuser" -msgstr "" +msgstr "슈퍼유저 권한 필요" #: src/components/dashboard/widgets/NewsWidget.tsx:116 msgid "This widget requires superuser permissions" -msgstr "" +msgstr "이 위젯에는 수퍼유저 권한이 필요합니다." #: src/components/dashboard/widgets/NewsWidget.tsx:133 msgid "No News" -msgstr "" +msgstr "새 소식 없음" #: src/components/dashboard/widgets/NewsWidget.tsx:134 msgid "There are no unread news items" -msgstr "" +msgstr "읽지 않은 뉴스 항목이 없습니다" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:15 msgid "Generating Stocktake Report" -msgstr "" +msgstr "재고 실사 보고서 생성 중" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:20 #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:53 #: src/pages/part/PartStockHistoryDetail.tsx:96 msgid "Generate Stocktake Report" -msgstr "" +msgstr "재고 실사 보고서 생성" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:37 #: src/pages/part/PartStockHistoryDetail.tsx:108 msgid "Generate" -msgstr "" +msgstr "생성하다" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:64 msgid "Stocktake" -msgstr "" +msgstr "재고 실사" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:65 msgid "Generate a new stocktake report" -msgstr "" +msgstr "새 재고 실사 보고서 생성" #: src/components/details/Details.tsx:117 #~ msgid "Email:" @@ -1300,7 +1300,7 @@ msgstr "" #: src/pages/core/UserDetail.tsx:203 #: src/tables/settings/UserTable.tsx:411 msgid "Superuser" -msgstr "" +msgstr "수퍼유저" #: src/components/details/Details.tsx:130 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:72 @@ -1309,7 +1309,7 @@ msgstr "" #: src/tables/settings/UserTable.tsx:285 #: src/tables/settings/UserTable.tsx:406 msgid "Administrator" -msgstr "" +msgstr "관리자" #: src/components/details/Details.tsx:130 #: src/pages/core/UserDetail.tsx:87 @@ -1320,19 +1320,19 @@ msgstr "" #: src/components/details/Details.tsx:131 msgid "Email: " -msgstr "" +msgstr "이메일:" #: src/components/details/Details.tsx:423 msgid "No name defined" -msgstr "" +msgstr "이름이 정의되지 않음" #: src/components/details/DetailsImage.tsx:77 msgid "Remove Image" -msgstr "" +msgstr "이미지 제거하기" #: src/components/details/DetailsImage.tsx:80 msgid "Remove the associated image from this item?" -msgstr "" +msgstr "이 항목에 연결된 이미지를 제거하시겠습니까?" #: src/components/details/DetailsImage.tsx:83 #: src/forms/StockForms.tsx:904 @@ -1348,15 +1348,15 @@ msgstr "" #: src/tables/sales/SalesOrderAllocationTable.tsx:223 #: src/tables/sales/SalesOrderAllocationTable.tsx:246 msgid "Remove" -msgstr "" +msgstr "제거하다" #: src/components/details/DetailsImage.tsx:88 msgid "Image removed" -msgstr "" +msgstr "이미지가 삭제되었습니다." #: src/components/details/DetailsImage.tsx:89 msgid "The image has been removed successfully" -msgstr "" +msgstr "이미지가 성공적으로 제거되었습니다." #: src/components/details/DetailsImage.tsx:115 #~ msgid "Drag and drop to upload" @@ -1364,29 +1364,29 @@ msgstr "" #: src/components/details/DetailsImage.tsx:157 msgid "Drag and drop to upload, or paste an image from the clipboard" -msgstr "" +msgstr "드래그 앤 드롭하여 업로드하거나 클립보드의 이미지를 붙여넣으세요" #: src/components/details/DetailsImage.tsx:162 msgid "Click to select file(s)" -msgstr "" +msgstr "파일을 선택하려면 클릭하세요" #: src/components/details/DetailsImage.tsx:222 msgid "Image uploaded" -msgstr "" +msgstr "이미지 업로드됨" #: src/components/details/DetailsImage.tsx:223 msgid "Image has been uploaded successfully" -msgstr "" +msgstr "이미지가 성공적으로 업로드되었습니다." #: src/components/details/DetailsImage.tsx:230 #: src/tables/general/AttachmentTable.tsx:201 msgid "Upload Error" -msgstr "" +msgstr "업로드 오류" #: src/components/details/DetailsImage.tsx:300 #: src/components/forms/fields/AutoFillRightSection.tsx:34 msgid "Clear" -msgstr "" +msgstr "분명한" #: src/components/details/DetailsImage.tsx:306 #: src/components/forms/ApiForm.tsx:711 @@ -1394,39 +1394,39 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:151 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:570 msgid "Submit" -msgstr "" +msgstr "제출하다" #: src/components/details/DetailsImage.tsx:350 msgid "Select from existing images" -msgstr "" +msgstr "기존 이미지에서 선택" #: src/components/details/DetailsImage.tsx:358 msgid "Select Image" -msgstr "" +msgstr "이미지 선택" #: src/components/details/DetailsImage.tsx:374 msgid "Download remote image" -msgstr "" +msgstr "원격 이미지 다운로드" #: src/components/details/DetailsImage.tsx:389 msgid "Upload new image" -msgstr "" +msgstr "새 이미지 업로드" #: src/components/details/DetailsImage.tsx:396 msgid "Upload Image" -msgstr "" +msgstr "이미지 업로드하기" #: src/components/details/DetailsImage.tsx:409 msgid "Delete image" -msgstr "" +msgstr "이미지 삭제" #: src/components/details/DetailsImage.tsx:443 msgid "Download Image" -msgstr "" +msgstr "이미지 내려받기" #: src/components/details/DetailsImage.tsx:448 msgid "Image downloaded successfully" -msgstr "" +msgstr "이미지가 성공적으로 다운로드되었습니다." #: src/components/details/PartIcons.tsx:43 #~ msgid "Part is a template part (variants can be made from this part)" @@ -1458,23 +1458,23 @@ msgstr "" #: src/components/editors/NotesEditor.tsx:75 msgid "Image upload failed" -msgstr "" +msgstr "이미지 업로드 실패" #: src/components/editors/NotesEditor.tsx:85 msgid "Image uploaded successfully" -msgstr "" +msgstr "이미지가 성공적으로 업로드되었습니다." #: src/components/editors/NotesEditor.tsx:119 msgid "Notes saved successfully" -msgstr "" +msgstr "메모가 성공적으로 저장되었습니다." #: src/components/editors/NotesEditor.tsx:130 msgid "Failed to save notes" -msgstr "" +msgstr "메모를 저장하지 못했습니다." #: src/components/editors/NotesEditor.tsx:133 msgid "Error Saving Notes" -msgstr "" +msgstr "메모를 저장하는 중에 오류가 발생했습니다." #: src/components/editors/NotesEditor.tsx:151 #~ msgid "Disable Editing" @@ -1482,15 +1482,15 @@ msgstr "" #: src/components/editors/NotesEditor.tsx:153 msgid "Save Notes" -msgstr "" +msgstr "메모 저장" #: src/components/editors/NotesEditor.tsx:172 msgid "Close Editor" -msgstr "" +msgstr "Close Editor" #: src/components/editors/NotesEditor.tsx:179 msgid "Enable Editing" -msgstr "" +msgstr "편집 활성화" #: src/components/editors/NotesEditor.tsx:198 #~ msgid "Preview Notes" @@ -1502,7 +1502,7 @@ msgstr "" #: src/components/editors/TemplateEditor/CodeEditor/index.tsx:9 msgid "Code" -msgstr "" +msgstr "암호" #: src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx:44 #~ msgid "Failed to parse error response from server." @@ -1510,23 +1510,23 @@ msgstr "" #: src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx:50 msgid "Error rendering preview" -msgstr "" +msgstr "미리보기 렌더링 오류" #: src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx:120 msgid "Preview not available, click \"Reload Preview\"." -msgstr "" +msgstr "미리보기를 사용할 수 없습니다. \"미리보기 다시 불러오기\"를 클릭하세요" #: src/components/editors/TemplateEditor/PdfPreview/index.tsx:9 msgid "PDF Preview" -msgstr "" +msgstr "PDF 미리보기" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:110 msgid "Error loading template" -msgstr "" +msgstr "템플릿을 로드하는 중에 오류가 발생했습니다." #: src/components/editors/TemplateEditor/TemplateEditor.tsx:122 msgid "Error saving template" -msgstr "" +msgstr "템플릿을 저장하는 중에 오류가 발생했습니다." #: src/components/editors/TemplateEditor/TemplateEditor.tsx:151 #~ msgid "Save & Reload preview?" @@ -1534,36 +1534,36 @@ msgstr "" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:159 msgid "Could not load the template from the server." -msgstr "" +msgstr "서버에서 템플릿을 불러올 수 없습니다" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:176 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:319 msgid "Save & Reload Preview" -msgstr "" +msgstr "저장 후 미리보기 다시 불러오기" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:181 msgid "Are you sure you want to Save & Reload the preview?" -msgstr "" +msgstr "미리보기를 저장하고 다시 로드하시겠습니까?" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:183 msgid "To render the preview the current template needs to be replaced on the server with your modifications which may break the label if it is under active use. Do you want to proceed?" -msgstr "" +msgstr "미리보기를 렌더링하려면 현재 템플릿을 서버에서 수정한 내용으로 교체해야 하며, 사용 중인 라벨이 깨질 수 있습니다. 계속하시겠습니까?" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:187 msgid "Save & Reload" -msgstr "" +msgstr "저장 후 다시 불러오기" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:219 msgid "Preview updated" -msgstr "" +msgstr "미리보기가 업데이트되었습니다" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:220 msgid "The preview has been updated successfully." -msgstr "" +msgstr "미리보기가 성공적으로 업데이트되었습니다" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:236 msgid "An unknown error occurred while rendering the preview." -msgstr "" +msgstr "미리보기를 렌더링하는 중 알 수 없는 오류가 발생했습니다" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:263 #~ msgid "Save & Reload preview" @@ -1571,15 +1571,15 @@ msgstr "" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:311 msgid "Reload preview" -msgstr "" +msgstr "미리보기 새로고침" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:312 msgid "Use the currently stored template from the server" -msgstr "" +msgstr "서버에 현재 저장된 템플릿 사용" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:320 msgid "Save the current template and reload the preview" -msgstr "" +msgstr "현재 템플릿을 저장하고 미리보기를 다시 로드하세요." #: src/components/editors/TemplateEditor/TemplateEditor.tsx:322 #~ msgid "to preview" @@ -1587,60 +1587,60 @@ msgstr "" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:379 msgid "Select instance to preview" -msgstr "" +msgstr "미리볼 인스턴스 선택" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:423 msgid "Error rendering template" -msgstr "" +msgstr "템플릿 렌더링 오류" #: src/components/errors/ClientError.tsx:23 msgid "Client Error" -msgstr "" +msgstr "클라이언트 오류" #: src/components/errors/ClientError.tsx:24 msgid "Client error occurred" -msgstr "" +msgstr "클라이언트 오류가 발생했습니다." #: src/components/errors/GenericErrorPage.tsx:50 msgid "Status Code" -msgstr "" +msgstr "상태 코드" #: src/components/errors/GenericErrorPage.tsx:63 msgid "Return to the index page" -msgstr "" +msgstr "인덱스 페이지로 돌아가기" #: src/components/errors/NotAuthenticated.tsx:8 msgid "Not Authenticated" -msgstr "" +msgstr "인증되지 않음" #: src/components/errors/NotAuthenticated.tsx:9 msgid "You are not logged in." -msgstr "" +msgstr "로그인되어 있지 않습니다" #: src/components/errors/NotFound.tsx:8 msgid "Page Not Found" -msgstr "" +msgstr "페이지를 찾을 수 없음" #: src/components/errors/NotFound.tsx:9 msgid "This page does not exist" -msgstr "" +msgstr "이 페이지는 존재하지 않습니다" #: src/components/errors/PermissionDenied.tsx:9 msgid "You do not have permission to view this page." -msgstr "" +msgstr "이 페이지를 볼 권한이 없습니다" #: src/components/errors/ServerError.tsx:8 msgid "Server Error" -msgstr "" +msgstr "서버 오류" #: src/components/errors/ServerError.tsx:9 msgid "A server error occurred" -msgstr "" +msgstr "서버 오류가 발생했습니다" #: src/components/forms/ApiForm.tsx:107 #: src/components/forms/ApiForm.tsx:623 msgid "Form Error" -msgstr "" +msgstr "양식 오류" #: src/components/forms/ApiForm.tsx:487 #~ msgid "Form Errors Exist" @@ -1648,13 +1648,13 @@ msgstr "" #: src/components/forms/ApiForm.tsx:633 msgid "Errors exist for one or more form fields" -msgstr "" +msgstr "하나 이상의 입력 필드에 오류가 있습니다" #: src/components/forms/ApiForm.tsx:749 #: src/hooks/UseForm.tsx:139 #: src/tables/plugin/PluginListTable.tsx:210 msgid "Update" -msgstr "" +msgstr "업데이트" #: src/components/forms/AuthenticationForm.tsx:48 #: src/components/forms/AuthenticationForm.tsx:74 @@ -1677,50 +1677,50 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:73 msgid "Login successful" -msgstr "" +msgstr "로그인 성공" #: src/components/forms/AuthenticationForm.tsx:74 msgid "Logged in successfully" -msgstr "" +msgstr "성공적으로 로그인되었습니다" #: src/components/forms/AuthenticationForm.tsx:81 #: src/components/forms/AuthenticationForm.tsx:89 #: src/functions/auth.tsx:133 #: src/functions/auth.tsx:142 msgid "Login failed" -msgstr "" +msgstr "로그인 실패" #: src/components/forms/AuthenticationForm.tsx:82 #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." -msgstr "" +msgstr "입력 내용을 확인한 후 다시 시도하세요" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" -msgstr "" +msgstr "메일 전달 성공" #: src/components/forms/AuthenticationForm.tsx:101 msgid "Check your inbox for the login link. If you have an account, you will receive a login link. Check in spam too." -msgstr "" +msgstr "받은편지함에서 로그인 링크를 확인하세요. 계정이 있다면 로그인 링크를 받게 됩니다. 스팸함도 확인하세요" #: src/components/forms/AuthenticationForm.tsx:105 msgid "Mail delivery failed" -msgstr "" +msgstr "메일 전달 실패" #: src/components/forms/AuthenticationForm.tsx:125 msgid "Or continue with other methods" -msgstr "" +msgstr "또는 다른 방법으로 계속 진행" #: src/components/forms/AuthenticationForm.tsx:136 #: src/components/forms/AuthenticationForm.tsx:296 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:64 #: src/pages/core/UserDetail.tsx:48 msgid "Username" -msgstr "" +msgstr "사용자 이름" #: src/components/forms/AuthenticationForm.tsx:136 #~ msgid "I will use username and password" @@ -1729,111 +1729,111 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:138 #: src/components/forms/AuthenticationForm.tsx:298 msgid "Your username" -msgstr "" +msgstr "사용자명" #: src/components/forms/AuthenticationForm.tsx:143 #: src/components/forms/AuthenticationForm.tsx:311 #: src/pages/Auth/ResetPassword.tsx:34 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:195 msgid "Password" -msgstr "" +msgstr "비밀번호" #: src/components/forms/AuthenticationForm.tsx:145 #: src/components/forms/AuthenticationForm.tsx:313 msgid "Your password" -msgstr "" +msgstr "귀하의 비밀번호" #: src/components/forms/AuthenticationForm.tsx:164 msgid "Reset password" -msgstr "" +msgstr "비밀번호 재설정" #: src/components/forms/AuthenticationForm.tsx:173 #: src/components/forms/AuthenticationForm.tsx:303 #: src/pages/Auth/Reset.tsx:17 #: src/pages/core/UserDetail.tsx:71 msgid "Email" -msgstr "" +msgstr "이메일" #: src/components/forms/AuthenticationForm.tsx:174 #: src/pages/Auth/Reset.tsx:18 msgid "We will send you a link to login - if you are registered" -msgstr "" +msgstr "등록된 계정이 있으면 로그인 링크를 보내드립니다" #: src/components/forms/AuthenticationForm.tsx:190 msgid "Send me an email" -msgstr "" +msgstr "나에게 이메일을 보내" #: src/components/forms/AuthenticationForm.tsx:192 msgid "Use username and password" -msgstr "" +msgstr "사용자명과 비밀번호 사용" #: src/components/forms/AuthenticationForm.tsx:201 msgid "Log In" -msgstr "" +msgstr "로그인" #: src/components/forms/AuthenticationForm.tsx:203 #: src/pages/Auth/Reset.tsx:26 msgid "Send Email" -msgstr "" +msgstr "이메일 보내기" #: src/components/forms/AuthenticationForm.tsx:239 msgid "Passwords do not match" -msgstr "" +msgstr "비밀번호가 일치하지 않습니다." #: src/components/forms/AuthenticationForm.tsx:256 msgid "Registration successful" -msgstr "" +msgstr "가입이 완료되었습니다" #: src/components/forms/AuthenticationForm.tsx:257 msgid "Please confirm your email address to complete the registration" -msgstr "" +msgstr "가입을 완료하려면 이메일 주소를 확인하세요" #: src/components/forms/AuthenticationForm.tsx:280 msgid "Input error" -msgstr "" +msgstr "입력 오류" #: src/components/forms/AuthenticationForm.tsx:281 msgid "Check your input and try again. " -msgstr "" +msgstr "입력 내용을 확인한 후 다시 시도하세요" #: src/components/forms/AuthenticationForm.tsx:305 msgid "This will be used for a confirmation" -msgstr "" +msgstr "이 정보는 확인 용도로 사용됩니다" #: src/components/forms/AuthenticationForm.tsx:318 msgid "Password repeat" -msgstr "" +msgstr "비밀번호 확인" #: src/components/forms/AuthenticationForm.tsx:320 msgid "Repeat password" -msgstr "" +msgstr "비밀번호를 반복하세요" #: src/components/forms/AuthenticationForm.tsx:332 #: src/pages/Auth/Login.tsx:128 #: src/pages/Auth/Register.tsx:13 msgid "Register" -msgstr "" +msgstr "가입" #: src/components/forms/AuthenticationForm.tsx:338 msgid "Or use SSO" -msgstr "" +msgstr "아니면 SSO를 사용하세요" #: src/components/forms/AuthenticationForm.tsx:348 msgid "Registration not active" -msgstr "" +msgstr "가입이 비활성화되어 있습니다" #: src/components/forms/AuthenticationForm.tsx:349 msgid "This might be related to missing mail settings or could be a deliberate decision." -msgstr "" +msgstr "메일 설정이 없어서일 수도 있고 의도적인 설정일 수도 있습니다" #: src/components/forms/DateTimeField.tsx:64 msgid "Select date and time" -msgstr "" +msgstr "날짜와 시간 선택" #: src/components/forms/HostOptionsForm.tsx:36 #: src/components/forms/HostOptionsForm.tsx:67 msgid "Host" -msgstr "" +msgstr "주인" #: src/components/forms/HostOptionsForm.tsx:42 #: src/components/forms/HostOptionsForm.tsx:70 @@ -1855,22 +1855,22 @@ msgstr "" #: src/tables/settings/PendingTasksTable.tsx:37 #: src/tables/stock/LocationTypesTable.tsx:74 msgid "Name" -msgstr "" +msgstr "이름" #: src/components/forms/HostOptionsForm.tsx:75 msgid "No one here..." -msgstr "" +msgstr "여기에는 아무도 없습니다..." #: src/components/forms/HostOptionsForm.tsx:86 msgid "Add Host" -msgstr "" +msgstr "호스트 추가" #: src/components/forms/HostOptionsForm.tsx:90 #: src/components/items/RoleTable.tsx:224 #: src/components/items/TransferList.tsx:215 #: src/components/items/TransferList.tsx:223 msgid "Save" -msgstr "" +msgstr "구하다" #: src/components/forms/InstanceOptions.tsx:43 #~ msgid "Select destination instance" @@ -1878,12 +1878,12 @@ msgstr "" #: src/components/forms/InstanceOptions.tsx:59 msgid "Select Server" -msgstr "" +msgstr "서버 선택" #: src/components/forms/InstanceOptions.tsx:69 #: src/components/forms/InstanceOptions.tsx:93 msgid "Edit host options" -msgstr "" +msgstr "호스트 옵션 편집" #: src/components/forms/InstanceOptions.tsx:71 #~ msgid "Edit possible host options" @@ -1891,7 +1891,7 @@ msgstr "" #: src/components/forms/InstanceOptions.tsx:77 msgid "Save host selection" -msgstr "" +msgstr "호스트 선택 저장" #: src/components/forms/InstanceOptions.tsx:98 #~ msgid "Version: {0}" @@ -1912,19 +1912,19 @@ msgstr "" #: src/components/forms/InstanceOptions.tsx:119 #: src/pages/Index/Settings/SystemSettings.tsx:46 msgid "Server" -msgstr "" +msgstr "섬기는 사람" #: src/components/forms/InstanceOptions.tsx:131 #: src/components/plugins/PluginDrawer.tsx:88 #: src/tables/plugin/PluginListTable.tsx:127 msgid "Version" -msgstr "" +msgstr "버전" #: src/components/forms/InstanceOptions.tsx:137 #: src/components/modals/AboutInvenTreeModal.tsx:119 #: src/components/modals/ServerInfoModal.tsx:34 msgid "API Version" -msgstr "" +msgstr "API 버전" #: src/components/forms/InstanceOptions.tsx:143 #: src/components/nav/NavigationDrawer.tsx:197 @@ -1932,7 +1932,7 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/Index.tsx:228 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:46 msgid "Plugins" -msgstr "" +msgstr "플러그인" #: src/components/forms/InstanceOptions.tsx:144 #: src/tables/general/ParameterTemplateTable.tsx:157 @@ -1942,86 +1942,86 @@ msgstr "" #: src/tables/settings/TemplateTable.tsx:396 #: src/tables/stock/StockItemTestResultTable.tsx:420 msgid "Enabled" -msgstr "" +msgstr "활성화됨" #: src/components/forms/InstanceOptions.tsx:144 msgid "Disabled" -msgstr "" +msgstr "장애가 있는" #: src/components/forms/InstanceOptions.tsx:150 msgid "Worker" -msgstr "" +msgstr "노동자" #: src/components/forms/InstanceOptions.tsx:151 #: src/tables/settings/FailedTasksTable.tsx:48 msgid "Stopped" -msgstr "" +msgstr "중지됨" #: src/components/forms/InstanceOptions.tsx:151 msgid "Running" -msgstr "" +msgstr "달리기" #: src/components/forms/fields/ApiFormField.tsx:206 msgid "Select file to upload" -msgstr "" +msgstr "업로드할 파일 선택" #: src/components/forms/fields/AutoFillRightSection.tsx:47 msgid "Accept suggested value" -msgstr "" +msgstr "제안된 값 수락" #: src/components/forms/fields/DateField.tsx:73 msgid "Select date" -msgstr "" +msgstr "날짜 선택" #: src/components/forms/fields/IconField.tsx:83 msgid "No icon selected" -msgstr "" +msgstr "선택한 아이콘이 없습니다." #: src/components/forms/fields/IconField.tsx:161 msgid "Uncategorized" -msgstr "" +msgstr "분류되지 않음" #: src/components/forms/fields/IconField.tsx:211 #: src/components/nav/Layout.tsx:141 #: src/tables/part/PartThumbTable.tsx:209 msgid "Search..." -msgstr "" +msgstr "찾다..." #: src/components/forms/fields/IconField.tsx:225 #: src/components/wizards/ImportPartWizard.tsx:304 msgid "Select category" -msgstr "" +msgstr "카테고리 선택" #: src/components/forms/fields/IconField.tsx:234 msgid "Select pack" -msgstr "" +msgstr "패키지 선택" #. placeholder {0}: filteredIcons.length #: src/components/forms/fields/IconField.tsx:239 msgid "{0} icons" -msgstr "" +msgstr "{0} 아이콘" #: src/components/forms/fields/RelatedModelField.tsx:494 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" -msgstr "" +msgstr "불러오는 중" #: src/components/forms/fields/RelatedModelField.tsx:496 msgid "No results found" -msgstr "" +msgstr "결과를 찾을 수 없습니다" #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" -msgstr "" +msgstr "테이블에 modelRenderer 항목이 필요함" #: src/components/forms/fields/TableField.tsx:187 msgid "No entries available" -msgstr "" +msgstr "사용할 수 있는 항목이 없습니다" #: src/components/forms/fields/TableField.tsx:198 msgid "Add new row" -msgstr "" +msgstr "새 행 추가" #: src/components/images/DetailsImage.tsx:252 #~ msgid "Select image" @@ -2029,77 +2029,77 @@ msgstr "" #: src/components/images/Thumbnail.tsx:12 msgid "Thumbnail" -msgstr "" +msgstr "썸네일" #: src/components/importer/ImportDataSelector.tsx:198 msgid "Importing Rows" -msgstr "" +msgstr "행 가져오는 중" #: src/components/importer/ImportDataSelector.tsx:199 msgid "Please wait while the data is imported" -msgstr "" +msgstr "데이터를 가져오는 동안 기다려 주세요" #: src/components/importer/ImportDataSelector.tsx:216 msgid "An error occurred while importing data" -msgstr "" +msgstr "데이터 가져오기 중 오류가 발생했습니다" #: src/components/importer/ImportDataSelector.tsx:237 msgid "Edit Data" -msgstr "" +msgstr "데이터 편집" #: src/components/importer/ImportDataSelector.tsx:269 msgid "Delete Row" -msgstr "" +msgstr "행 삭제" #: src/components/importer/ImportDataSelector.tsx:303 msgid "Row" -msgstr "" +msgstr "열" #: src/components/importer/ImportDataSelector.tsx:321 msgid "Row contains errors" -msgstr "" +msgstr "행에 오류가 있습니다." #: src/components/importer/ImportDataSelector.tsx:366 msgid "Accept" -msgstr "" +msgstr "수용하다" #: src/components/importer/ImportDataSelector.tsx:399 msgid "Valid" -msgstr "" +msgstr "유효한" #: src/components/importer/ImportDataSelector.tsx:400 msgid "Filter by row validation status" -msgstr "" +msgstr "행 검증 상태로 필터링" #: src/components/importer/ImportDataSelector.tsx:405 #: src/components/wizards/WizardDrawer.tsx:113 #: src/tables/build/BuildOutputTable.tsx:582 msgid "Complete" -msgstr "" +msgstr "완벽한" #: src/components/importer/ImportDataSelector.tsx:406 msgid "Filter by row completion status" -msgstr "" +msgstr "행 완료 상태로 필터링" #: src/components/importer/ImportDataSelector.tsx:424 msgid "Import selected rows" -msgstr "" +msgstr "선택한 행 가져오기" #: src/components/importer/ImportDataSelector.tsx:439 msgid "Processing Data" -msgstr "" +msgstr "데이터 처리" #: src/components/importer/ImporterColumnSelector.tsx:56 #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" -msgstr "" +msgstr "오류가 발생했습니다" #: src/components/importer/ImporterColumnSelector.tsx:69 msgid "Select column, or leave blank to ignore this field." -msgstr "" +msgstr "열을 선택하거나 이 필드를 무시하려면 비워 두세요" #: src/components/importer/ImporterColumnSelector.tsx:91 #~ msgid "Select a column from the data file" @@ -2115,55 +2115,55 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:253 msgid "Ignore this field" -msgstr "" +msgstr "이 필드를 무시하세요" #: src/components/importer/ImporterColumnSelector.tsx:267 msgid "Mapping data columns to database fields" -msgstr "" +msgstr "데이터 열을 데이터베이스 필드에 매핑" #: src/components/importer/ImporterColumnSelector.tsx:272 msgid "Accept Column Mapping" -msgstr "" +msgstr "열 매핑 적용" #: src/components/importer/ImporterColumnSelector.tsx:285 msgid "Database Field" -msgstr "" +msgstr "데이터베이스 필드" #: src/components/importer/ImporterColumnSelector.tsx:286 msgid "Field Description" -msgstr "" +msgstr "필드 설명" #: src/components/importer/ImporterColumnSelector.tsx:287 msgid "Imported Column" -msgstr "" +msgstr "가져온 열" #: src/components/importer/ImporterColumnSelector.tsx:288 msgid "Default Value" -msgstr "" +msgstr "기본값" #: src/components/importer/ImporterDrawer.tsx:44 msgid "Upload File" -msgstr "" +msgstr "파일 업로드" #: src/components/importer/ImporterDrawer.tsx:45 msgid "Map Columns" -msgstr "" +msgstr "지도 열" #: src/components/importer/ImporterDrawer.tsx:46 msgid "Import Rows" -msgstr "" +msgstr "행 가져오기" #: src/components/importer/ImporterDrawer.tsx:47 msgid "Process Data" -msgstr "" +msgstr "데이터 처리" #: src/components/importer/ImporterDrawer.tsx:48 msgid "Complete Import" -msgstr "" +msgstr "가져오기 완료" #: src/components/importer/ImporterDrawer.tsx:92 msgid "Failed to fetch import session data" -msgstr "" +msgstr "가져오기 세션 데이터를 불러오지 못했습니다" #: src/components/importer/ImporterDrawer.tsx:97 #~ msgid "Cancel import session" @@ -2171,11 +2171,11 @@ msgstr "" #: src/components/importer/ImporterDrawer.tsx:114 msgid "Import Complete" -msgstr "" +msgstr "가져오기 완료" #: src/components/importer/ImporterDrawer.tsx:117 msgid "Data has been imported successfully" -msgstr "" +msgstr "데이터를 성공적으로 가져왔습니다." #: src/components/importer/ImporterDrawer.tsx:119 #: src/components/modals/AboutInvenTreeModal.tsx:200 @@ -2184,7 +2184,7 @@ msgstr "" #: src/forms/BomForms.tsx:137 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" -msgstr "" +msgstr "닫다" #: src/components/importer/ImporterDrawer.tsx:119 #~ msgid "Import session has unknown status" @@ -2192,7 +2192,7 @@ msgstr "" #: src/components/importer/ImporterDrawer.tsx:138 msgid "Importing Data" -msgstr "" +msgstr "데이터 가져오기" #: src/components/importer/ImporterImportProgress.tsx:36 #~ msgid "Importing Records" @@ -2204,11 +2204,11 @@ msgstr "" #: src/components/importer/ImporterStatus.tsx:19 msgid "Unknown Status" -msgstr "" +msgstr "알 수 없는 상태" #: src/components/items/ActionDropdown.tsx:135 msgid "Options" -msgstr "" +msgstr "옵션" #: src/components/items/ActionDropdown.tsx:162 #~ msgid "Link custom barcode" @@ -2218,44 +2218,44 @@ msgstr "" #: src/tables/InvenTreeTableHeader.tsx:196 #: src/tables/InvenTreeTableHeader.tsx:197 msgid "Barcode Actions" -msgstr "" +msgstr "바코드 작업" #: src/components/items/ActionDropdown.tsx:176 msgid "View Barcode" -msgstr "" +msgstr "바코드 보기" #: src/components/items/ActionDropdown.tsx:178 msgid "View barcode" -msgstr "" +msgstr "바코드 보기" #: src/components/items/ActionDropdown.tsx:184 msgid "Link Barcode" -msgstr "" +msgstr "링크바코드" #: src/components/items/ActionDropdown.tsx:186 msgid "Link a custom barcode to this item" -msgstr "" +msgstr "이 항목에 맞춤 바코드 연결" #: src/components/items/ActionDropdown.tsx:194 msgid "Unlink custom barcode" -msgstr "" +msgstr "사용자 지정 바코드 연결 해제" #: src/components/items/ActionDropdown.tsx:246 msgid "Edit item" -msgstr "" +msgstr "항목 편집" #: src/components/items/ActionDropdown.tsx:258 msgid "Delete item" -msgstr "" +msgstr "항목 삭제" #: src/components/items/ActionDropdown.tsx:266 #: src/components/items/ActionDropdown.tsx:267 msgid "Hold" -msgstr "" +msgstr "잡고 있다" #: src/components/items/ActionDropdown.tsx:290 msgid "Duplicate item" -msgstr "" +msgstr "중복된 항목" #: src/components/items/BarcodeInput.tsx:24 #~ msgid "Scan barcode data here using barcode scanner" @@ -2263,18 +2263,18 @@ msgstr "" #: src/components/items/ColorToggle.tsx:17 msgid "Toggle color scheme" -msgstr "" +msgstr "색 구성표 전환" #: src/components/items/DocTooltip.tsx:92 #: src/components/items/GettingStartedCarousel.tsx:20 msgid "Read More" -msgstr "" +msgstr "더 보기" #: src/components/items/ErrorItem.tsx:8 #: src/functions/api.tsx:51 #: src/tables/settings/PendingTasksTable.tsx:80 msgid "Unknown error" -msgstr "" +msgstr "알 수 없는 오류" #: src/components/items/ErrorItem.tsx:13 #~ msgid "An error occurred:" @@ -2286,21 +2286,21 @@ msgstr "" #: src/components/items/InfoItem.tsx:27 msgid "None" -msgstr "" +msgstr "없음" #: src/components/items/InvenTreeLogo.tsx:36 #: src/components/items/InvenTreeLogo.tsx:40 msgid "InvenTree Logo" -msgstr "" +msgstr "InvenTree 로고" #: src/components/items/LanguageSelect.tsx:44 msgid "Default Language" -msgstr "" +msgstr "기본 언어" #: src/components/items/LanguageSelect.tsx:52 #: src/components/items/LanguageToggle.tsx:21 msgid "Select language" -msgstr "" +msgstr "언어 선택" #: src/components/items/OnlyStaff.tsx:10 #: src/components/modals/AboutInvenTreeModal.tsx:50 @@ -2309,7 +2309,7 @@ msgstr "" #: src/components/items/OnlyStaff.tsx:11 msgid "This information is only available for administrative users" -msgstr "" +msgstr "이 정보는 관리자 사용자만 볼 수 있습니다" #: src/components/items/Placeholder.tsx:14 #~ msgid "This feature/button/site is a placeholder for a feature that is not implemented, only partial or intended for testing." @@ -2321,11 +2321,11 @@ msgstr "" #: src/components/items/RoleTable.tsx:81 msgid "Updating" -msgstr "" +msgstr "업데이트 중" #: src/components/items/RoleTable.tsx:82 msgid "Updating group roles" -msgstr "" +msgstr "그룹 역할 업데이트 중" #: src/components/items/RoleTable.tsx:118 #: src/components/settings/ConfigValueList.tsx:42 @@ -2334,46 +2334,46 @@ msgstr "" #: src/tables/ColumnRenderers.tsx:731 #: src/tables/purchasing/SupplierPartTable.tsx:186 msgid "Updated" -msgstr "" +msgstr "업데이트됨" #: src/components/items/RoleTable.tsx:119 msgid "Group roles updated" -msgstr "" +msgstr "그룹 역할이 업데이트되었습니다." #: src/components/items/RoleTable.tsx:135 msgid "Role" -msgstr "" +msgstr "역할" #: src/components/items/RoleTable.tsx:140 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:906 msgid "View" -msgstr "" +msgstr "보다" #: src/components/items/RoleTable.tsx:145 msgid "Change" -msgstr "" +msgstr "변화" #: src/components/items/RoleTable.tsx:150 #: src/forms/StockForms.tsx:950 #: src/tables/stock/StockItemTestResultTable.tsx:368 msgid "Add" -msgstr "" +msgstr "추가하다" #: src/components/items/RoleTable.tsx:203 msgid "Reset group roles" -msgstr "" +msgstr "그룹 역할 초기화" #: src/components/items/RoleTable.tsx:212 msgid "Reset" -msgstr "" +msgstr "다시 놓기" #: src/components/items/RoleTable.tsx:215 msgid "Save group roles" -msgstr "" +msgstr "그룹 역할 저장" #: src/components/items/TransferList.tsx:65 msgid "No items" -msgstr "" +msgstr "항목 없음" #: src/components/items/TransferList.tsx:161 #: src/components/render/Stock.tsx:102 @@ -2386,11 +2386,11 @@ msgstr "" #: src/tables/part/PartTable.tsx:138 #: src/tables/stock/StockItemTable.tsx:197 msgid "Available" -msgstr "" +msgstr "사용 가능" #: src/components/items/TransferList.tsx:162 msgid "Selected" -msgstr "" +msgstr "선택된" #: src/components/modals/AboutInvenTreeModal.tsx:103 #~ msgid "Your InvenTree version status is" @@ -2398,31 +2398,31 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:113 msgid "InvenTree Version" -msgstr "" +msgstr "InvenTree 버전" #: src/components/modals/AboutInvenTreeModal.tsx:125 msgid "Python Version" -msgstr "" +msgstr "Python 버전" #: src/components/modals/AboutInvenTreeModal.tsx:130 msgid "Django Version" -msgstr "" +msgstr "장고 버전" #: src/components/modals/AboutInvenTreeModal.tsx:139 msgid "Commit Hash" -msgstr "" +msgstr "커밋 해시" #: src/components/modals/AboutInvenTreeModal.tsx:144 msgid "Commit Date" -msgstr "" +msgstr "커밋 날짜" #: src/components/modals/AboutInvenTreeModal.tsx:149 msgid "Commit Branch" -msgstr "" +msgstr "커밋 브랜치" #: src/components/modals/AboutInvenTreeModal.tsx:160 msgid "Version Information" -msgstr "" +msgstr "버전 정보" #: src/components/modals/AboutInvenTreeModal.tsx:165 #~ msgid "Credits" @@ -2434,7 +2434,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:169 msgid "Links" -msgstr "" +msgstr "모래밭" #: src/components/modals/AboutInvenTreeModal.tsx:169 #~ msgid "View Code on GitHub" @@ -2444,19 +2444,19 @@ msgstr "" #: src/components/nav/NavigationDrawer.tsx:208 #: src/defaults/actions.tsx:49 msgid "Documentation" -msgstr "" +msgstr "선적 서류 비치" #: src/components/modals/AboutInvenTreeModal.tsx:176 msgid "Source Code" -msgstr "" +msgstr "소스 코드" #: src/components/modals/AboutInvenTreeModal.tsx:177 msgid "Mobile App" -msgstr "" +msgstr "모바일 앱" #: src/components/modals/AboutInvenTreeModal.tsx:178 msgid "Submit Bug Report" -msgstr "" +msgstr "버그 신고 제출" #: src/components/modals/AboutInvenTreeModal.tsx:189 #: src/components/modals/ServerInfoModal.tsx:147 @@ -2465,39 +2465,39 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:190 msgid "Copy version information" -msgstr "" +msgstr "버전 정보 복사" #: src/components/modals/AboutInvenTreeModal.tsx:210 msgid "Development Version" -msgstr "" +msgstr "개발 버전" #: src/components/modals/AboutInvenTreeModal.tsx:212 msgid "Up to Date" -msgstr "" +msgstr "최신" #: src/components/modals/AboutInvenTreeModal.tsx:214 msgid "Update Available" -msgstr "" +msgstr "업데이트 사용 가능" #: src/components/modals/LicenseModal.tsx:41 msgid "No license text available" -msgstr "" +msgstr "사용 가능한 라이센스 텍스트가 없습니다." #: src/components/modals/LicenseModal.tsx:48 msgid "No Information provided - this is likely a server issue" -msgstr "" +msgstr "제공된 정보가 없습니다. 서버 문제일 가능성이 높습니다." #: src/components/modals/LicenseModal.tsx:81 msgid "Loading license information" -msgstr "" +msgstr "라이선스 정보 불러오는 중" #: src/components/modals/LicenseModal.tsx:87 msgid "Failed to fetch license information" -msgstr "" +msgstr "라이선스 정보를 불러오지 못했습니다" #: src/components/modals/LicenseModal.tsx:99 msgid "{key} Packages" -msgstr "" +msgstr "{key} 패키지" #: src/components/modals/QrCodeModal.tsx:24 #~ msgid "Unknown response" @@ -2513,11 +2513,11 @@ msgstr "" #: src/components/modals/ServerInfoModal.tsx:22 msgid "Instance Name" -msgstr "" +msgstr "인스턴스 이름" #: src/components/modals/ServerInfoModal.tsx:28 msgid "Server Version" -msgstr "" +msgstr "서버 버전" #: src/components/modals/ServerInfoModal.tsx:38 #~ msgid "Bebug Mode" @@ -2525,57 +2525,57 @@ msgstr "" #: src/components/modals/ServerInfoModal.tsx:40 msgid "Database" -msgstr "" +msgstr "데이터 베이스" #: src/components/modals/ServerInfoModal.tsx:49 #: src/components/nav/Alerts.tsx:120 msgid "Debug Mode" -msgstr "" +msgstr "디버그 모드" #: src/components/modals/ServerInfoModal.tsx:54 msgid "Server is running in debug mode" -msgstr "" +msgstr "서버가 디버그 모드에서 실행 중입니다." #: src/components/modals/ServerInfoModal.tsx:62 msgid "Docker Mode" -msgstr "" +msgstr "Docker 모드" #: src/components/modals/ServerInfoModal.tsx:65 msgid "Server is deployed using docker" -msgstr "" +msgstr "서버는 docker를 사용하여 배포됩니다." #: src/components/modals/ServerInfoModal.tsx:71 msgid "Plugin Support" -msgstr "" +msgstr "플러그인 지원" #: src/components/modals/ServerInfoModal.tsx:76 msgid "Plugin support enabled" -msgstr "" +msgstr "플러그인 지원 활성화됨" #: src/components/modals/ServerInfoModal.tsx:78 msgid "Plugin support disabled" -msgstr "" +msgstr "플러그인 지원 비활성화됨" #: src/components/modals/ServerInfoModal.tsx:85 msgid "Server status" -msgstr "" +msgstr "서버 상태" #: src/components/modals/ServerInfoModal.tsx:91 msgid "Healthy" -msgstr "" +msgstr "건강한" #: src/components/modals/ServerInfoModal.tsx:93 msgid "Issues detected" -msgstr "" +msgstr "발견된 문제" #: src/components/modals/ServerInfoModal.tsx:102 #: src/components/nav/Alerts.tsx:127 msgid "Background Worker" -msgstr "" +msgstr "백그라운드 작업자" #: src/components/modals/ServerInfoModal.tsx:107 msgid "The background worker process is not running" -msgstr "" +msgstr "백그라운드 작업자 프로세스가 실행되고 있지 않습니다." #: src/components/modals/ServerInfoModal.tsx:107 #~ msgid "The Background worker process is not running." @@ -2584,7 +2584,7 @@ msgstr "" #: src/components/modals/ServerInfoModal.tsx:115 #: src/pages/Index/Settings/AdminCenter/Index.tsx:129 msgid "Email Settings" -msgstr "" +msgstr "이메일 설정" #: src/components/modals/ServerInfoModal.tsx:118 #~ msgid "Email settings not configured" @@ -2593,47 +2593,47 @@ msgstr "" #: src/components/modals/ServerInfoModal.tsx:120 #: src/components/nav/Alerts.tsx:143 msgid "Email settings not configured." -msgstr "" +msgstr "이메일 설정이 구성되지 않았습니다" #: src/components/nav/Alerts.tsx:57 msgid "Alerts" -msgstr "" +msgstr "경고" #: src/components/nav/Alerts.tsx:97 msgid "No issues detected" -msgstr "" +msgstr "감지된 문제 없음" #: src/components/nav/Alerts.tsx:122 msgid "The server is running in debug mode." -msgstr "" +msgstr "서버가 디버그 모드로 실행 중입니다" #: src/components/nav/Alerts.tsx:129 msgid "The background worker process is not running." -msgstr "" +msgstr "백그라운드 워커 프로세스가 실행 중이 아닙니다" #: src/components/nav/Alerts.tsx:134 msgid "Server Restart" -msgstr "" +msgstr "서버 재시작" #: src/components/nav/Alerts.tsx:136 msgid "The server requires a restart to apply changes." -msgstr "" +msgstr "변경 사항을 적용하려면 서버를 재시작해야 합니다" #: src/components/nav/Alerts.tsx:141 msgid "Email settings" -msgstr "" +msgstr "이메일 설정" #: src/components/nav/Alerts.tsx:148 msgid "Database Migrations" -msgstr "" +msgstr "데이터베이스 마이그레이션" #: src/components/nav/Alerts.tsx:150 msgid "There are pending database migrations." -msgstr "" +msgstr "대기 중인 데이터베이스 마이그레이션이 있습니다" #: src/components/nav/Alerts.tsx:165 msgid "Learn more about {code}" -msgstr "" +msgstr "{code}에 대해 더 알아보기" #: src/components/nav/Header.tsx:209 #: src/components/nav/NavigationDrawer.tsx:134 @@ -2643,7 +2643,7 @@ msgstr "" #: src/pages/Notifications.tsx:45 #: src/pages/Notifications.tsx:130 msgid "Notifications" -msgstr "" +msgstr "알림" #: src/components/nav/Header.tsx:216 #~ msgid "Administrator Mode" @@ -2651,19 +2651,19 @@ msgstr "" #: src/components/nav/Header.tsx:231 msgid "Superuser Mode" -msgstr "" +msgstr "수퍼유저 모드" #: src/components/nav/Header.tsx:231 msgid "Admin Mode" -msgstr "" +msgstr "관리 모드" #: src/components/nav/Header.tsx:237 msgid "The current user has elevated privileges and should not be used for regular usage." -msgstr "" +msgstr "현재 사용자는 높은 권한을 가지고 있으므로 일반적인 용도로 사용하면 안 됩니다" #: src/components/nav/Layout.tsx:144 msgid "Nothing found..." -msgstr "" +msgstr "찾을 수 없음..." #: src/components/nav/MainMenu.tsx:40 #: src/pages/Index/Profile/Profile.tsx:15 @@ -2675,7 +2675,7 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/EmailManagementPanel.tsx:21 #: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:39 msgid "Settings" -msgstr "" +msgstr "설정" #: src/components/nav/MainMenu.tsx:59 #: src/defaults/menuItems.tsx:15 @@ -2689,7 +2689,7 @@ msgstr "" #: src/pages/Index/Settings/UserSettings.tsx:142 #: src/pages/Index/Settings/UserSettings.tsx:146 msgid "User Settings" -msgstr "" +msgstr "사용자 설정" #: src/components/nav/MainMenu.tsx:61 #: src/pages/Index/Settings/UserSettings.tsx:145 @@ -2707,7 +2707,7 @@ msgstr "" #: src/pages/Index/Settings/SystemSettings.tsx:368 #: src/pages/Index/Settings/SystemSettings.tsx:373 msgid "System Settings" -msgstr "" +msgstr "시스템 설정" #: src/components/nav/MainMenu.tsx:71 #~ msgid "Switch to pseudo language" @@ -2720,18 +2720,18 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/Index.tsx:293 #: src/pages/Index/Settings/AdminCenter/Index.tsx:298 msgid "Admin Center" -msgstr "" +msgstr "관리 센터" #: src/components/nav/MainMenu.tsx:99 #: src/defaults/actions.tsx:58 #: src/defaults/links.tsx:140 #: src/defaults/links.tsx:186 msgid "About InvenTree" -msgstr "" +msgstr "InvenTree 소개" #: src/components/nav/MainMenu.tsx:108 msgid "Logout" -msgstr "" +msgstr "로그아웃" #: src/components/nav/NavHoverMenu.tsx:84 #~ msgid "View all" @@ -2762,14 +2762,14 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:643 #: src/tables/stock/StockItemTable.tsx:75 msgid "Stock" -msgstr "" +msgstr "재고" #: src/components/nav/NavigationDrawer.tsx:84 #: src/defaults/links.tsx:48 #: src/pages/build/BuildDetail.tsx:775 #: src/pages/build/BuildIndex.tsx:101 msgid "Manufacturing" -msgstr "" +msgstr "조작" #: src/components/nav/NavigationDrawer.tsx:91 #: src/defaults/links.tsx:54 @@ -2780,7 +2780,7 @@ msgstr "" #: src/pages/purchasing/PurchaseOrderDetail.tsx:568 #: src/pages/purchasing/PurchasingIndex.tsx:214 msgid "Purchasing" -msgstr "" +msgstr "구매" #: src/components/nav/NavigationDrawer.tsx:98 #: src/defaults/links.tsx:60 @@ -2790,56 +2790,56 @@ msgstr "" #: src/pages/sales/SalesOrderDetail.tsx:634 #: src/pages/sales/SalesOrderShipmentDetail.tsx:442 msgid "Sales" -msgstr "" +msgstr "매상" #: src/components/nav/NavigationDrawer.tsx:180 msgid "Navigation" -msgstr "" +msgstr "탐색" #: src/components/nav/NavigationDrawer.tsx:214 msgid "About" -msgstr "" +msgstr "에 대한" #: src/components/nav/NavigationTree.tsx:212 msgid "Error loading navigation tree." -msgstr "" +msgstr "탐색 트리를 불러오는 중 오류가 발생했습니다" #: src/components/nav/NotificationDrawer.tsx:183 #: src/pages/Notifications.tsx:74 msgid "Mark all as read" -msgstr "" +msgstr "모두 읽음으로 표시" #: src/components/nav/NotificationDrawer.tsx:193 msgid "View all notifications" -msgstr "" +msgstr "모든 알림 보기" #: src/components/nav/NotificationDrawer.tsx:216 msgid "You have no unread notifications." -msgstr "" +msgstr "읽지 않은 알림이 없습니다" #: src/components/nav/NotificationDrawer.tsx:238 msgid "Error loading notifications." -msgstr "" +msgstr "알림을 불러오는 중 오류가 발생했습니다" #: src/components/nav/SearchDrawer.tsx:111 msgid "No Overview Available" -msgstr "" +msgstr "사용 가능한 개요 없음" #: src/components/nav/SearchDrawer.tsx:112 msgid "No overview available for this model type" -msgstr "" +msgstr "이 모델 유형에는 표시할 개요가 없습니다" #: src/components/nav/SearchDrawer.tsx:130 msgid "View all results" -msgstr "" +msgstr "모든 결과 보기" #: src/components/nav/SearchDrawer.tsx:145 msgid "results" -msgstr "" +msgstr "결과" #: src/components/nav/SearchDrawer.tsx:149 msgid "Remove search group" -msgstr "" +msgstr "검색 그룹 제거" #: src/components/nav/SearchDrawer.tsx:304 #: src/pages/company/ManufacturerPartDetail.tsx:179 @@ -2847,18 +2847,18 @@ msgstr "" #: src/pages/part/PartSupplierDetail.tsx:15 #: src/pages/purchasing/PurchasingIndex.tsx:100 msgid "Suppliers" -msgstr "" +msgstr "공급자" #: src/components/nav/SearchDrawer.tsx:314 #: src/pages/part/PartSupplierDetail.tsx:23 #: src/pages/purchasing/PurchasingIndex.tsx:150 msgid "Manufacturers" -msgstr "" +msgstr "제조사" #: src/components/nav/SearchDrawer.tsx:324 #: src/pages/sales/SalesIndex.tsx:133 msgid "Customers" -msgstr "" +msgstr "고객" #: src/components/nav/SearchDrawer.tsx:462 #~ msgid "No results" @@ -2866,84 +2866,84 @@ msgstr "" #: src/components/nav/SearchDrawer.tsx:493 msgid "Enter search text" -msgstr "" +msgstr "검색어를 입력하세요" #: src/components/nav/SearchDrawer.tsx:504 msgid "Refresh search results" -msgstr "" +msgstr "검색 결과 새로 고침" #: src/components/nav/SearchDrawer.tsx:515 #: src/components/nav/SearchDrawer.tsx:522 msgid "Search Options" -msgstr "" +msgstr "검색 옵션" #: src/components/nav/SearchDrawer.tsx:525 msgid "Whole word search" -msgstr "" +msgstr "단어 전체 검색" #: src/components/nav/SearchDrawer.tsx:534 msgid "Regex search" -msgstr "" +msgstr "정규식 검색" #: src/components/nav/SearchDrawer.tsx:543 msgid "Notes search" -msgstr "" +msgstr "메모 검색" #: src/components/nav/SearchDrawer.tsx:591 msgid "An error occurred during search query" -msgstr "" +msgstr "검색 요청 중 오류가 발생했습니다" #: src/components/nav/SearchDrawer.tsx:602 #: src/tables/part/PartTestTemplateTable.tsx:82 msgid "No Results" -msgstr "" +msgstr "결과 없음" #: src/components/nav/SearchDrawer.tsx:605 msgid "No results available for search query" -msgstr "" +msgstr "검색어에 대한 결과가 없습니다" #: src/components/panels/AttachmentPanel.tsx:18 msgid "Attachments" -msgstr "" +msgstr "첨부파일" #: src/components/panels/NotesPanel.tsx:25 #: src/tables/part/PartTestResultTable.tsx:214 #: src/tables/stock/StockTrackingTable.tsx:267 msgid "Notes" -msgstr "" +msgstr "메모" #: src/components/panels/PanelGroup.tsx:159 msgid "Plugin Provided" -msgstr "" +msgstr "플러그인 제공" #: src/components/panels/PanelGroup.tsx:293 msgid "Collapse panels" -msgstr "" +msgstr "패널 축소" #: src/components/panels/PanelGroup.tsx:293 msgid "Expand panels" -msgstr "" +msgstr "패널 확장" #: src/components/plugins/LocateItemButton.tsx:68 #: src/components/plugins/LocateItemButton.tsx:88 msgid "Locate Item" -msgstr "" +msgstr "항목 찾기" #: src/components/plugins/LocateItemButton.tsx:70 msgid "Item location requested" -msgstr "" +msgstr "항목 위치 조회 요청됨" #: src/components/plugins/PluginDrawer.tsx:47 msgid "Plugin Inactive" -msgstr "" +msgstr "플러그인 비활성 상태" #: src/components/plugins/PluginDrawer.tsx:50 msgid "Plugin is not active" -msgstr "" +msgstr "플러그인이 활성화되지 않았습니다" #: src/components/plugins/PluginDrawer.tsx:59 msgid "Plugin Information" -msgstr "" +msgstr "플러그인 정보" #: src/components/plugins/PluginDrawer.tsx:73 #: src/forms/selectionListFields.tsx:102 @@ -2964,11 +2964,11 @@ msgstr "" #: src/tables/machine/MachineTypeTable.tsx:255 #: src/tables/plugin/PluginListTable.tsx:110 msgid "Description" -msgstr "" +msgstr "설명" #: src/components/plugins/PluginDrawer.tsx:78 msgid "Author" -msgstr "" +msgstr "작가" #: src/components/plugins/PluginDrawer.tsx:83 #: src/pages/part/pricing/PurchaseHistoryPanel.tsx:41 @@ -2976,7 +2976,7 @@ msgstr "" #: src/tables/ColumnRenderers.tsx:677 #: src/tables/part/PartTestResultTable.tsx:222 msgid "Date" -msgstr "" +msgstr "날짜" #: src/components/plugins/PluginDrawer.tsx:93 #: src/forms/selectionListFields.tsx:103 @@ -3000,21 +3000,21 @@ msgstr "" #: src/tables/settings/UserTable.tsx:401 #: src/tables/stock/StockItemTable.tsx:176 msgid "Active" -msgstr "" +msgstr "활동적인" #: src/components/plugins/PluginDrawer.tsx:99 #: src/pages/company/CompanyDetail.tsx:100 #: src/tables/plugin/PluginListTable.tsx:140 msgid "Website" -msgstr "" +msgstr "웹사이트" #: src/components/plugins/PluginDrawer.tsx:113 msgid "Package Name" -msgstr "" +msgstr "패키지 이름" #: src/components/plugins/PluginDrawer.tsx:119 msgid "Installation Path" -msgstr "" +msgstr "설치 경로" #: src/components/plugins/PluginDrawer.tsx:124 #: src/tables/machine/MachineTypeTable.tsx:182 @@ -3022,18 +3022,18 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:101 #: src/tables/plugin/PluginListTable.tsx:425 msgid "Builtin" -msgstr "" +msgstr "내장" #: src/components/plugins/PluginDrawer.tsx:129 msgid "Package" -msgstr "" +msgstr "패키지" #: src/components/plugins/PluginDrawer.tsx:141 #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:55 #: src/pages/Index/Settings/SystemSettings.tsx:351 #: src/pages/Index/Settings/UserSettings.tsx:129 msgid "Plugin Settings" -msgstr "" +msgstr "플러그인 설정" #: src/components/plugins/PluginPanel.tsx:87 #~ msgid "Error occurred while rendering plugin content" @@ -3062,31 +3062,31 @@ msgstr "" #: src/components/plugins/PluginUIFeature.tsx:103 msgid "Error occurred while rendering the template editor." -msgstr "" +msgstr "템플릿 편집기를 렌더링하는 중 오류가 발생했습니다" #: src/components/plugins/PluginUIFeature.tsx:120 msgid "Error Loading Plugin Editor" -msgstr "" +msgstr "플러그인 편집기 불러오기 오류" #: src/components/plugins/PluginUIFeature.tsx:158 msgid "Error occurred while rendering the template preview." -msgstr "" +msgstr "템플릿 미리보기를 렌더링하는 중 오류가 발생했습니다" #: src/components/plugins/PluginUIFeature.tsx:169 msgid "Error Loading Plugin Preview" -msgstr "" +msgstr "플러그인 미리보기 불러오기 오류" #: src/components/plugins/RemoteComponent.tsx:111 msgid "Invalid source or function name" -msgstr "" +msgstr "잘못된 소스 또는 함수 이름" #: src/components/plugins/RemoteComponent.tsx:143 msgid "Error Loading Content" -msgstr "" +msgstr "콘텐츠 불러오기 오류" #: src/components/plugins/RemoteComponent.tsx:147 msgid "Error occurred while loading plugin content" -msgstr "" +msgstr "플러그인 콘텐츠를 불러오는 중 오류가 발생했습니다" #: src/components/render/Instance.tsx:238 #~ msgid "Unknown model: {model}" @@ -3094,7 +3094,7 @@ msgstr "" #: src/components/render/Instance.tsx:259 msgid "Unknown model: {model_name}" -msgstr "" +msgstr "알 수 없는 모델: {model_name}" #: src/components/render/ModelType.tsx:234 #~ msgid "Purchase Order Line Item" @@ -3115,7 +3115,7 @@ msgstr "" #: src/components/render/Order.tsx:122 #: src/tables/sales/SalesOrderAllocationTable.tsx:172 msgid "Shipment" -msgstr "" +msgstr "선적" #: src/components/render/Part.tsx:28 #: src/components/render/Plugin.tsx:17 @@ -3126,19 +3126,19 @@ msgstr "" #: src/pages/part/PartDetail.tsx:1036 #: src/tables/ColumnRenderers.tsx:614 msgid "Inactive" -msgstr "" +msgstr "비활성" #: src/components/render/Part.tsx:31 #: src/tables/part/PartTable.tsx:282 #: src/tables/part/PartVariantTable.tsx:25 msgid "Virtual" -msgstr "" +msgstr "가상" #: src/components/render/Part.tsx:34 #: src/tables/bom/BomTable.tsx:301 #: src/tables/part/PartTable.tsx:153 msgid "No stock" -msgstr "" +msgstr "재고 없음" #: src/components/render/Part.tsx:47 #: src/components/wizards/OrderPartsWizard.tsx:135 @@ -3149,7 +3149,7 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:228 #: src/tables/part/PartTable.tsx:109 msgid "On Order" -msgstr "" +msgstr "주문시" #: src/components/render/Part.tsx:55 #: src/components/wizards/OrderPartsWizard.tsx:141 @@ -3159,12 +3159,12 @@ msgstr "" #: src/tables/part/PartTestResultTable.tsx:306 #: src/tables/stock/StockItemTable.tsx:213 msgid "In Production" -msgstr "" +msgstr "생산 중" #: src/components/render/Part.tsx:74 #: src/tables/stock/StockTrackingTable.tsx:261 msgid "Details" -msgstr "" +msgstr "상세 정보" #: src/components/render/Part.tsx:112 #: src/components/wizards/ImportPartWizard.tsx:807 @@ -3174,7 +3174,7 @@ msgstr "" #: src/tables/notifications/NotificationTable.tsx:32 #: src/tables/part/PartCategoryTemplateTable.tsx:78 msgid "Category" -msgstr "" +msgstr "카테고리" #: src/components/render/Stock.tsx:36 #: src/components/render/Stock.tsx:114 @@ -3198,7 +3198,7 @@ msgstr "" #: src/tables/Filter.tsx:460 #: src/tables/stock/StockTrackingTable.tsx:130 msgid "Location" -msgstr "" +msgstr "위치" #: src/components/render/Stock.tsx:99 #: src/pages/stock/StockDetail.tsx:198 @@ -3206,7 +3206,7 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:109 #: src/tables/sales/SalesOrderAllocationTable.tsx:139 msgid "Serial Number" -msgstr "" +msgstr "시리얼 번호" #: src/components/render/Stock.tsx:104 #: src/components/wizards/OrderPartsWizard.tsx:377 @@ -3233,7 +3233,7 @@ msgstr "" #: src/tables/purchasing/SupplierPriceBreakTable.tsx:69 #: src/tables/stock/StockTrackingTable.tsx:104 msgid "Quantity" -msgstr "" +msgstr "수량" #: src/components/render/Stock.tsx:117 #: src/forms/BuildForms.tsx:367 @@ -3250,7 +3250,7 @@ msgstr "" #: src/forms/StockForms.tsx:1189 #: src/tables/build/BuildLineTable.tsx:96 msgid "Batch" -msgstr "" +msgstr "일괄" #: src/components/settings/ConfigValueList.tsx:33 #~ msgid "<0>{0} is set via {1} and was last set {2}" @@ -3258,21 +3258,21 @@ msgstr "" #: src/components/settings/ConfigValueList.tsx:36 msgid "Setting" -msgstr "" +msgstr "환경" #: src/components/settings/ConfigValueList.tsx:39 msgid "Source" -msgstr "" +msgstr "원천" #: src/components/settings/QuickAction.tsx:47 msgid "Act" -msgstr "" +msgstr "행동" #: src/components/settings/QuickAction.tsx:73 #: src/components/settings/QuickAction.tsx:113 #: src/tables/settings/ProjectCodeTable.tsx:46 msgid "Add Project Code" -msgstr "" +msgstr "프로젝트 코드 추가" #: src/components/settings/QuickAction.tsx:78 #: src/components/settings/QuickAction.tsx:124 @@ -3280,63 +3280,63 @@ msgstr "" #: src/tables/settings/CustomStateTable.tsx:140 #: src/tables/settings/CustomStateTable.tsx:202 msgid "Add State" -msgstr "" +msgstr "상태 추가" #: src/components/settings/QuickAction.tsx:85 msgid "Open an Issue" -msgstr "" +msgstr "이슈 열기" #: src/components/settings/QuickAction.tsx:86 msgid "Report a bug or request a feature on GitHub" -msgstr "" +msgstr "GitHub에서 버그를 신고하거나 기능을 요청하세요" #: src/components/settings/QuickAction.tsx:88 msgid "Open Issue" -msgstr "" +msgstr "공개 이슈" #: src/components/settings/QuickAction.tsx:97 msgid "Add New Group" -msgstr "" +msgstr "새 그룹 추가" #: src/components/settings/QuickAction.tsx:98 msgid "Create a new group to manage your users" -msgstr "" +msgstr "사용자를 관리할 새 그룹 만들기" #: src/components/settings/QuickAction.tsx:100 msgid "New Group" -msgstr "" +msgstr "새 그룹" #: src/components/settings/QuickAction.tsx:105 msgid "Add New User" -msgstr "" +msgstr "새 사용자 추가" #: src/components/settings/QuickAction.tsx:106 msgid "Create a new user to manage your groups" -msgstr "" +msgstr "그룹을 관리할 새 사용자 만들기" #: src/components/settings/QuickAction.tsx:108 msgid "New User" -msgstr "" +msgstr "신규 사용자" #: src/components/settings/QuickAction.tsx:114 msgid "Create a new project code to organize your items" -msgstr "" +msgstr "항목을 정리할 새 프로젝트 코드 만들기" #: src/components/settings/QuickAction.tsx:116 msgid "Add Code" -msgstr "" +msgstr "코드 추가" #: src/components/settings/QuickAction.tsx:121 msgid "Add Custom State" -msgstr "" +msgstr "사용자 지정 상태 추가" #: src/components/settings/QuickAction.tsx:122 msgid "Create a new custom state for your workflow" -msgstr "" +msgstr "워크플로용 새 사용자 지정 상태 만들기" #: src/components/settings/SettingItem.tsx:33 msgid "Do you want to proceed to change this setting?" -msgstr "" +msgstr "이 설정을 변경하시겠습니까?" #: src/components/settings/SettingItem.tsx:47 #: src/components/settings/SettingItem.tsx:100 @@ -3345,44 +3345,44 @@ msgstr "" #: src/components/settings/SettingItem.tsx:221 msgid "This setting requires confirmation" -msgstr "" +msgstr "이 설정에는 확인이 필요합니다" #: src/components/settings/SettingList.tsx:74 msgid "Edit Setting" -msgstr "" +msgstr "설정 편집" #: src/components/settings/SettingList.tsx:87 msgid "Setting {key} updated successfully" -msgstr "" +msgstr "설정 {key}가 성공적으로 업데이트되었습니다" #: src/components/settings/SettingList.tsx:120 msgid "Setting updated" -msgstr "" +msgstr "설정이 업데이트되었습니다." #. placeholder {0}: setting.key #: src/components/settings/SettingList.tsx:121 msgid "Setting {0} updated successfully" -msgstr "" +msgstr "설정 {0}이 성공적으로 업데이트되었습니다" #: src/components/settings/SettingList.tsx:130 msgid "Error editing setting" -msgstr "" +msgstr "설정 편집 중 오류 발생" #: src/components/settings/SettingList.tsx:146 msgid "Error loading settings" -msgstr "" +msgstr "설정을 불러오는 중 오류 발생" #: src/components/settings/SettingList.tsx:157 msgid "No Settings" -msgstr "" +msgstr "설정 없음" #: src/components/settings/SettingList.tsx:158 msgid "There are no configurable settings available" -msgstr "" +msgstr "구성 가능한 설정이 없습니다." #: src/components/settings/SettingList.tsx:197 msgid "No settings specified" -msgstr "" +msgstr "지정된 설정이 없습니다." #: src/components/tables/FilterGroup.tsx:29 #~ msgid "Add table filter" @@ -3742,15 +3742,15 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:105 msgid "Exact Match" -msgstr "" +msgstr "정확한 일치" #: src/components/wizards/ImportPartWizard.tsx:112 msgid "Current part" -msgstr "" +msgstr "현재 부분" #: src/components/wizards/ImportPartWizard.tsx:118 msgid "Already Imported" -msgstr "" +msgstr "이미 가져옴" #: src/components/wizards/ImportPartWizard.tsx:205 #: src/pages/company/CompanyDetail.tsx:137 @@ -3766,116 +3766,116 @@ msgstr "" #: src/tables/purchasing/PurchaseOrderTable.tsx:122 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:40 msgid "Supplier" -msgstr "" +msgstr "공급자" #: src/components/wizards/ImportPartWizard.tsx:221 #: src/forms/StockForms.tsx:622 msgid "Loading..." -msgstr "" +msgstr "불러오는 중..." #: src/components/wizards/ImportPartWizard.tsx:223 msgid "Error fetching suppliers" -msgstr "" +msgstr "공급업체를 불러오는 중 오류 발생" #: src/components/wizards/ImportPartWizard.tsx:224 msgid "Select supplier" -msgstr "" +msgstr "공급업체 선택" #. placeholder {0}: searchResults.length #: src/components/wizards/ImportPartWizard.tsx:246 msgid "Found {0} results" -msgstr "" +msgstr "{0}개 결과를 찾았습니다." #: src/components/wizards/ImportPartWizard.tsx:259 msgid "Import this part" -msgstr "" +msgstr "이 부분을 가져옵니다" #: src/components/wizards/ImportPartWizard.tsx:313 msgid "Are you sure you want to import this part into the selected category now?" -msgstr "" +msgstr "이 부품을 선택한 카테고리로 지금 가져오시겠습니까?" #: src/components/wizards/ImportPartWizard.tsx:326 msgid "Import Now" -msgstr "" +msgstr "지금 가져오기" #: src/components/wizards/ImportPartWizard.tsx:372 msgid "Select and edit the parameters you want to add to this part." -msgstr "" +msgstr "이 부품에 추가할 파라미터를 선택하고 편집하세요" #: src/components/wizards/ImportPartWizard.tsx:379 msgid "Default category parameters" -msgstr "" +msgstr "기본 카테고리 파라미터" #: src/components/wizards/ImportPartWizard.tsx:391 msgid "Other parameters" -msgstr "" +msgstr "기타 파라미터" #: src/components/wizards/ImportPartWizard.tsx:446 msgid "Add a new parameter" -msgstr "" +msgstr "새 파라미터 추가" #: src/components/wizards/ImportPartWizard.tsx:468 msgid "Skip" -msgstr "" +msgstr "건너뛰다" #: src/components/wizards/ImportPartWizard.tsx:476 msgid "Create Parameters" -msgstr "" +msgstr "파라미터 생성" #: src/components/wizards/ImportPartWizard.tsx:493 msgid "Create initial stock for the imported part." -msgstr "" +msgstr "가져온 부품의 초기 재고를 생성합니다" #: src/components/wizards/ImportPartWizard.tsx:511 msgid "Next" -msgstr "" +msgstr "다음" #: src/components/wizards/ImportPartWizard.tsx:540 #: src/pages/part/PartDetail.tsx:1058 #: src/tables/part/PartTable.tsx:411 msgid "Edit Part" -msgstr "" +msgstr "부품 편집" #: src/components/wizards/ImportPartWizard.tsx:567 msgid "Part imported successfully!" -msgstr "" +msgstr "부품을 성공적으로 가져왔습니다!" #: src/components/wizards/ImportPartWizard.tsx:576 msgid "Failed to import part: " -msgstr "" +msgstr "부품 가져오기에 실패했습니다:" #: src/components/wizards/ImportPartWizard.tsx:641 msgid "Are you sure, you want to import the supplier and manufacturer part into this part?" -msgstr "" +msgstr "공급업체 부품과 제조사 부품을 이 부품으로 가져오시겠습니까?" #: src/components/wizards/ImportPartWizard.tsx:655 msgid "Import" -msgstr "" +msgstr "수입" #: src/components/wizards/ImportPartWizard.tsx:692 msgid "Parameters created successfully!" -msgstr "" +msgstr "파라미터가 성공적으로 생성되었습니다!" #: src/components/wizards/ImportPartWizard.tsx:720 msgid "Failed to create parameters, please fix the errors and try again" -msgstr "" +msgstr "파라미터 생성에 실패했습니다. 오류를 수정한 뒤 다시 시도하세요" #. placeholder {0}: supplierPart?.supplier #: src/components/wizards/ImportPartWizard.tsx:740 msgid "Part imported successfully from supplier {0}." -msgstr "" +msgstr "공급업체 {0}에서 부품을 성공적으로 가져왔습니다" #: src/components/wizards/ImportPartWizard.tsx:753 msgid "Open Part" -msgstr "" +msgstr "부품 열기" #: src/components/wizards/ImportPartWizard.tsx:760 msgid "Open Supplier Part" -msgstr "" +msgstr "공급업체 부품 열기" #: src/components/wizards/ImportPartWizard.tsx:767 msgid "Open Manufacturer Part" -msgstr "" +msgstr "제조사 부품 열기" #: src/components/wizards/ImportPartWizard.tsx:797 #: src/tables/part/PartTable.tsx:499 @@ -3884,35 +3884,35 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:803 msgid "Import Supplier Part" -msgstr "" +msgstr "공급업체 부품 가져오기" #: src/components/wizards/ImportPartWizard.tsx:805 msgid "Search Supplier Part" -msgstr "" +msgstr "공급업체 부품 검색" #: src/components/wizards/ImportPartWizard.tsx:807 msgid "Confirm import" -msgstr "" +msgstr "가져오기 확인" #: src/components/wizards/ImportPartWizard.tsx:809 msgid "Done" -msgstr "" +msgstr "완료" #: src/components/wizards/OrderPartsWizard.tsx:75 msgid "Error fetching part requirements" -msgstr "" +msgstr "부품 요구사항을 불러오는 중 오류 발생" #: src/components/wizards/OrderPartsWizard.tsx:113 msgid "Requirements" -msgstr "" +msgstr "요구사항" #: src/components/wizards/OrderPartsWizard.tsx:117 msgid "Build Requirements" -msgstr "" +msgstr "생산 요구 사항" #: src/components/wizards/OrderPartsWizard.tsx:123 msgid "Sales Requirements" -msgstr "" +msgstr "판매 요건" #: src/components/wizards/OrderPartsWizard.tsx:129 #: src/forms/StockForms.tsx:903 @@ -3929,106 +3929,106 @@ msgstr "" #: src/tables/Filter.tsx:134 #: src/tables/purchasing/SupplierPartTable.tsx:269 msgid "In Stock" -msgstr "" +msgstr "재고 있음" #: src/components/wizards/OrderPartsWizard.tsx:146 #: src/tables/build/BuildLineTable.tsx:406 msgid "Required Quantity" -msgstr "" +msgstr "필요한 수량" #: src/components/wizards/OrderPartsWizard.tsx:203 msgid "New Purchase Order" -msgstr "" +msgstr "새 발주서" #: src/components/wizards/OrderPartsWizard.tsx:205 msgid "Purchase order created" -msgstr "" +msgstr "발주서가 생성되었습니다" #: src/components/wizards/OrderPartsWizard.tsx:217 msgid "New Supplier Part" -msgstr "" +msgstr "새 공급업체 부품" #: src/components/wizards/OrderPartsWizard.tsx:219 #: src/tables/purchasing/SupplierPartTable.tsx:213 #: src/tables/purchasing/SupplierPartTable.tsx:302 msgid "Supplier part created" -msgstr "" +msgstr "생성된 협력업체 부품" #: src/components/wizards/OrderPartsWizard.tsx:247 msgid "Add to Purchase Order" -msgstr "" +msgstr "발주서에 추가" #: src/components/wizards/OrderPartsWizard.tsx:259 msgid "Part added to purchase order" -msgstr "" +msgstr "부품이 발주서에 추가되었습니다" #: src/components/wizards/OrderPartsWizard.tsx:303 msgid "Select supplier part" -msgstr "" +msgstr "협력업체 부품 선택" #: src/components/wizards/OrderPartsWizard.tsx:323 msgid "Copy supplier part number" -msgstr "" +msgstr "공급업체 부품 번호 복사" #: src/components/wizards/OrderPartsWizard.tsx:326 msgid "New supplier part" -msgstr "" +msgstr "새로운 공급업체 부품" #: src/components/wizards/OrderPartsWizard.tsx:350 msgid "Select purchase order" -msgstr "" +msgstr "발주서 선택" #: src/components/wizards/OrderPartsWizard.tsx:364 msgid "New purchase order" -msgstr "" +msgstr "새 발주서" #: src/components/wizards/OrderPartsWizard.tsx:420 msgid "Add to selected purchase order" -msgstr "" +msgstr "선택한 발주서에 추가" #: src/components/wizards/OrderPartsWizard.tsx:432 #: src/components/wizards/OrderPartsWizard.tsx:545 msgid "No parts selected" -msgstr "" +msgstr "선택한 부품이 없습니다." #: src/components/wizards/OrderPartsWizard.tsx:433 msgid "No purchaseable parts selected" -msgstr "" +msgstr "구매 가능한 부품이 선택되지 않았습니다." #: src/components/wizards/OrderPartsWizard.tsx:469 msgid "Parts Added" -msgstr "" +msgstr "부품이 추가되었습니다" #: src/components/wizards/OrderPartsWizard.tsx:470 msgid "All selected parts added to a purchase order" -msgstr "" +msgstr "선택한 모든 부품이 발주서에 추가되었습니다" #: src/components/wizards/OrderPartsWizard.tsx:546 msgid "You must select at least one part to order" -msgstr "" +msgstr "주문하려면 부품을 하나 이상 선택해야 합니다." #: src/components/wizards/OrderPartsWizard.tsx:557 msgid "Supplier part is required" -msgstr "" +msgstr "공급업체 부품이 필요합니다" #: src/components/wizards/OrderPartsWizard.tsx:561 msgid "Quantity is required" -msgstr "" +msgstr "수량이 필요합니다" #: src/components/wizards/OrderPartsWizard.tsx:574 msgid "Invalid part selection" -msgstr "" +msgstr "잘못된 부품 선택" #: src/components/wizards/OrderPartsWizard.tsx:576 msgid "Please correct the errors in the selected parts" -msgstr "" +msgstr "선택한 부분의 오류를 수정해주세요" #: src/components/wizards/OrderPartsWizard.tsx:587 #: src/tables/build/BuildLineTable.tsx:844 #: src/tables/part/PartTable.tsx:525 #: src/tables/sales/SalesOrderLineItemTable.tsx:368 msgid "Order Parts" -msgstr "" +msgstr "자재 발주" #: src/contexts/LanguageContext.tsx:22 #~ msgid "Arabic" @@ -4189,86 +4189,86 @@ msgstr "" #: src/defaults/actions.tsx:43 msgid "Go to the InvenTree dashboard" -msgstr "" +msgstr "InvenTree 대시보드로 이동" #: src/defaults/actions.tsx:50 msgid "Visit the documentation to learn more about InvenTree" -msgstr "" +msgstr "InvenTree에 대해 더 알아보려면 문서를 확인하세요" #: src/defaults/actions.tsx:59 msgid "About the InvenTree org" -msgstr "" +msgstr "InvenTree 조직 소개" #: src/defaults/actions.tsx:65 msgid "Server Information" -msgstr "" +msgstr "서버 정보" #: src/defaults/actions.tsx:66 #: src/defaults/links.tsx:169 msgid "About this InvenTree instance" -msgstr "" +msgstr "InvenTree 인스턴스 정보" #: src/defaults/actions.tsx:72 #: src/defaults/links.tsx:153 #: src/defaults/links.tsx:175 msgid "License Information" -msgstr "" +msgstr "라이센스 정보" #: src/defaults/actions.tsx:73 msgid "Licenses for dependencies of the service" -msgstr "" +msgstr "서비스 의존성 라이선스" #: src/defaults/actions.tsx:79 msgid "Open Navigation" -msgstr "" +msgstr "내비게이션 열기" #: src/defaults/actions.tsx:80 msgid "Open the main navigation menu" -msgstr "" +msgstr "메인 탐색 메뉴 열기" #: src/defaults/actions.tsx:87 msgid "Go to your user settings" -msgstr "" +msgstr "사용자 설정으로 이동" #: src/defaults/actions.tsx:96 msgid "Import Data" -msgstr "" +msgstr "데이터 가져오기" #: src/defaults/actions.tsx:97 msgid "Import data from a file" -msgstr "" +msgstr "파일에서 데이터 가져오기" #: src/defaults/actions.tsx:107 msgid "Go to Purchase Orders" -msgstr "" +msgstr "발주서로 이동" #: src/defaults/actions.tsx:117 msgid "Go to Sales Orders" -msgstr "" +msgstr "판매 주문으로 이동" #: src/defaults/actions.tsx:128 msgid "Go to Return Orders" -msgstr "" +msgstr "반품 주문으로 이동" #: src/defaults/actions.tsx:138 msgid "Scan a barcode or QR code" -msgstr "" +msgstr "바코드 또는 QR 코드를 스캔" #: src/defaults/actions.tsx:147 msgid "Go to Build Orders" -msgstr "" +msgstr "생산 주문으로 이동" #: src/defaults/actions.tsx:156 msgid "Go to System Settings" -msgstr "" +msgstr "시스템 설정으로 이동" #: src/defaults/actions.tsx:165 msgid "Go to the Admin Center" -msgstr "" +msgstr "관리 센터로 이동" #: src/defaults/actions.tsx:174 msgid "Manage InvenTree plugins" -msgstr "" +msgstr "InvenTree 플러그인 관리" #: src/defaults/dashboardItems.tsx:29 #~ msgid "Latest Parts" @@ -4312,15 +4312,15 @@ msgstr "" #: src/defaults/defaultHostList.tsx:10 msgid "Local Server" -msgstr "" +msgstr "로컬 서버" #: src/defaults/defaultHostList.tsx:12 msgid "InvenTree Demo" -msgstr "" +msgstr "InvenTree 데모" #: src/defaults/defaultHostList.tsx:14 msgid "Current Server" -msgstr "" +msgstr "현재 서버" #: src/defaults/links.tsx:17 #~ msgid "GitHub" @@ -4346,35 +4346,35 @@ msgstr "" #: src/defaults/links.tsx:93 msgid "API" -msgstr "" +msgstr "API" #: src/defaults/links.tsx:96 msgid "InvenTree API documentation" -msgstr "" +msgstr "InvenTree API 문서" #: src/defaults/links.tsx:100 msgid "Developer Manual" -msgstr "" +msgstr "개발자 매뉴얼" #: src/defaults/links.tsx:103 msgid "InvenTree developer manual" -msgstr "" +msgstr "InvenTree 개발자 매뉴얼" #: src/defaults/links.tsx:107 msgid "FAQ" -msgstr "" +msgstr "자주 묻는 질문" #: src/defaults/links.tsx:110 msgid "Frequently asked questions" -msgstr "" +msgstr "자주 묻는 질문" #: src/defaults/links.tsx:114 msgid "GitHub Repository" -msgstr "" +msgstr "GitHub 저장소" #: src/defaults/links.tsx:117 msgid "InvenTree source code on GitHub" -msgstr "" +msgstr "GitHub의 InvenTree 소스 코드" #: src/defaults/links.tsx:117 #~ msgid "Licenses for packages used by InvenTree" @@ -4383,7 +4383,7 @@ msgstr "" #: src/defaults/links.tsx:127 #: src/defaults/links.tsx:168 msgid "System Information" -msgstr "" +msgstr "시스템 정보" #: src/defaults/links.tsx:134 #~ msgid "Licenses" @@ -4391,11 +4391,11 @@ msgstr "" #: src/defaults/links.tsx:176 msgid "Licenses for dependencies of the InvenTree software" -msgstr "" +msgstr "InvenTree 소프트웨어 의존성 라이선스" #: src/defaults/links.tsx:187 msgid "About the InvenTree Project" -msgstr "" +msgstr "InvenTree 프로젝트 소개" #: src/defaults/menuItems.tsx:7 #~ msgid "Open sourcea" @@ -4515,19 +4515,19 @@ msgstr "" #: src/forms/BomForms.tsx:114 msgid "Substitute Part" -msgstr "" +msgstr "대체 부품" #: src/forms/BomForms.tsx:131 msgid "Edit BOM Substitutes" -msgstr "" +msgstr "BOM 대체 부품 편집" #: src/forms/BomForms.tsx:138 msgid "Add Substitute" -msgstr "" +msgstr "대체 부품 추가" #: src/forms/BomForms.tsx:139 msgid "Substitute added" -msgstr "" +msgstr "대체 부품이 추가되었습니다" #: src/forms/BuildForms.tsx:112 #: src/forms/BuildForms.tsx:217 @@ -4546,11 +4546,11 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:632 #: src/tables/part/PartTestResultTable.tsx:280 msgid "Build Output" -msgstr "" +msgstr "생산 결과물" #: src/forms/BuildForms.tsx:366 msgid "Quantity to Complete" -msgstr "" +msgstr "완료할 수량" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 @@ -4579,15 +4579,15 @@ msgstr "" #: src/tables/stock/StockItemTable.tsx:181 #: src/tables/stock/StockTrackingTable.tsx:82 msgid "Status" -msgstr "" +msgstr "상태" #: src/forms/BuildForms.tsx:392 msgid "Complete Build Outputs" -msgstr "" +msgstr "생산 결과물 완료" #: src/forms/BuildForms.tsx:395 msgid "Build outputs have been completed" -msgstr "" +msgstr "생산 결과물이 완료되었습니다" #: src/forms/BuildForms.tsx:408 #~ msgid "Selected build outputs will be deleted" @@ -4595,20 +4595,20 @@ msgstr "" #: src/forms/BuildForms.tsx:443 msgid "Quantity to Scrap" -msgstr "" +msgstr "폐기할 수량" #: src/forms/BuildForms.tsx:463 #: src/forms/BuildForms.tsx:465 msgid "Scrap Build Outputs" -msgstr "" +msgstr "생산 결과물 폐기" #: src/forms/BuildForms.tsx:468 msgid "Selected build outputs will be completed, but marked as scrapped" -msgstr "" +msgstr "선택한 생산 결과물은 완료 처리되지만 폐기된 것으로 표시됩니다" #: src/forms/BuildForms.tsx:470 msgid "Allocated stock items will be consumed" -msgstr "" +msgstr "할당된 재고 품목이 소모됩니다" #: src/forms/BuildForms.tsx:470 #~ msgid "Remove line" @@ -4616,24 +4616,24 @@ msgstr "" #: src/forms/BuildForms.tsx:476 msgid "Build outputs have been scrapped" -msgstr "" +msgstr "생산 결과물이 폐기되었습니다" #: src/forms/BuildForms.tsx:524 #: src/forms/BuildForms.tsx:526 msgid "Cancel Build Outputs" -msgstr "" +msgstr "생산 결과물 취소" #: src/forms/BuildForms.tsx:528 msgid "Selected build outputs will be removed" -msgstr "" +msgstr "선택한 생산 결과물이 제거됩니다" #: src/forms/BuildForms.tsx:530 msgid "Allocated stock items will be returned to stock" -msgstr "" +msgstr "할당된 재고 품목은 재고로 반환됩니다." #: src/forms/BuildForms.tsx:537 msgid "Build outputs have been cancelled" -msgstr "" +msgstr "생산 결과물이 취소되었습니다" #: src/forms/BuildForms.tsx:670 #: src/pages/build/BuildDetail.tsx:226 @@ -4644,7 +4644,7 @@ msgstr "" #: src/tables/ColumnRenderers.tsx:116 #: src/tables/part/RelatedPartTable.tsx:73 msgid "IPN" -msgstr "" +msgstr "품목 번호(IPN)" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 @@ -4656,19 +4656,19 @@ msgstr "" #: src/tables/sales/SalesOrderLineItemTable.tsx:340 #: src/tables/stock/StockItemTable.tsx:192 msgid "Allocated" -msgstr "" +msgstr "할당됨" #: src/forms/BuildForms.tsx:706 #: src/forms/SalesOrderForms.tsx:419 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" -msgstr "" +msgstr "원본 위치" #: src/forms/BuildForms.tsx:707 #: src/forms/SalesOrderForms.tsx:420 msgid "Select the source location for the stock allocation" -msgstr "" +msgstr "재고 할당의 원본 위치를 선택하세요" #: src/forms/BuildForms.tsx:739 #: src/forms/SalesOrderForms.tsx:461 @@ -4679,12 +4679,12 @@ msgstr "" #: src/tables/sales/SalesOrderLineItemTable.tsx:378 #: src/tables/sales/SalesOrderLineItemTable.tsx:404 msgid "Allocate Stock" -msgstr "" +msgstr "재고 할당" #: src/forms/BuildForms.tsx:742 #: src/forms/SalesOrderForms.tsx:466 msgid "Stock items allocated" -msgstr "" +msgstr "재고 품목이 할당되었습니다" #: src/forms/BuildForms.tsx:817 #: src/forms/BuildForms.tsx:918 @@ -4698,7 +4698,7 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:770 #: src/tables/build/BuildLineTable.tsx:893 msgid "Consume Stock" -msgstr "" +msgstr "재고 소비" #: src/forms/BuildForms.tsx:856 #: src/forms/BuildForms.tsx:957 @@ -4709,20 +4709,20 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:516 #: src/tables/part/PartBuildAllocationsTable.tsx:101 msgid "Fully consumed" -msgstr "" +msgstr "완전히 소비됨" #: src/forms/BuildForms.tsx:938 #: src/tables/build/BuildLineTable.tsx:193 #: src/tables/stock/StockItemTable.tsx:221 msgid "Consumed" -msgstr "" +msgstr "소비됨" #: src/forms/CommonForms.tsx:93 #: src/forms/PurchaseOrderForms.tsx:173 #: src/forms/ReturnOrderForms.tsx:140 #: src/forms/SalesOrderForms.tsx:191 msgid "Select project code for this line item" -msgstr "" +msgstr "이 품목의 프로젝트 코드를 선택하세요." #: src/forms/CompanyForms.tsx:150 #~ msgid "Company updated" @@ -4735,11 +4735,11 @@ msgstr "" #: src/tables/part/PartCategoryTable.tsx:96 #: src/tables/part/PartTable.tsx:322 msgid "Subscribed" -msgstr "" +msgstr "구독 중" #: src/forms/PartForms.tsx:102 msgid "Subscribe to notifications for this part" -msgstr "" +msgstr "이 부품의 알림을 구독" #: src/forms/PartForms.tsx:108 #~ msgid "Part created" @@ -4751,11 +4751,11 @@ msgstr "" #: src/forms/PartForms.tsx:216 msgid "Parent part category" -msgstr "" +msgstr "상위 부품 카테고리" #: src/forms/PartForms.tsx:231 msgid "Subscribe to notifications for this category" -msgstr "" +msgstr "이 카테고리의 알림을 구독" #: src/forms/PurchaseOrderForms.tsx:421 #~ msgid "Assign Batch Code{0}" @@ -4772,23 +4772,23 @@ msgstr "" #: src/forms/PurchaseOrderForms.tsx:454 msgid "Choose Location" -msgstr "" +msgstr "위치 선택" #: src/forms/PurchaseOrderForms.tsx:462 msgid "Item Destination selected" -msgstr "" +msgstr "항목 대상 위치가 선택되었습니다" #: src/forms/PurchaseOrderForms.tsx:472 msgid "Part category default location selected" -msgstr "" +msgstr "부품 카테고리 기본 위치가 선택되었습니다" #: src/forms/PurchaseOrderForms.tsx:482 msgid "Received stock location selected" -msgstr "" +msgstr "입고 재고 위치가 선택되었습니다" #: src/forms/PurchaseOrderForms.tsx:490 msgid "Default location selected" -msgstr "" +msgstr "기본 위치가 선택되었습니다" #: src/forms/PurchaseOrderForms.tsx:537 #: src/pages/part/PartDetail.tsx:640 @@ -4796,11 +4796,11 @@ msgstr "" #: src/tables/bom/BomTable.tsx:144 #: src/tables/bom/BomTable.tsx:433 msgid "Virtual Part" -msgstr "" +msgstr "가상 부품" #: src/forms/PurchaseOrderForms.tsx:538 msgid "This part is virtual, no physical stock will be received." -msgstr "" +msgstr "이 부품은 가상이므로 실제 재고가 입고되지 않습니다" #: src/forms/PurchaseOrderForms.tsx:566 #~ msgid "Serial numbers" @@ -4808,11 +4808,11 @@ msgstr "" #: src/forms/PurchaseOrderForms.tsx:573 msgid "Set Location" -msgstr "" +msgstr "위치 설정" #: src/forms/PurchaseOrderForms.tsx:582 msgid "Assign Batch Code" -msgstr "" +msgstr "배치 코드 지정" #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" @@ -4820,26 +4820,26 @@ msgstr "" #: src/forms/PurchaseOrderForms.tsx:592 msgid "Assign Serial Numbers" -msgstr "" +msgstr "시리얼 번호 지정" #: src/forms/PurchaseOrderForms.tsx:604 msgid "Set Expiry Date" -msgstr "" +msgstr "만료일 설정" #: src/forms/PurchaseOrderForms.tsx:613 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" -msgstr "" +msgstr "포장 조정" #: src/forms/PurchaseOrderForms.tsx:622 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" -msgstr "" +msgstr "상태 변경" #: src/forms/PurchaseOrderForms.tsx:629 msgid "Add Note" -msgstr "" +msgstr "메모 추가" #: src/forms/PurchaseOrderForms.tsx:658 #~ msgid "Receive line items" @@ -4847,15 +4847,15 @@ msgstr "" #: src/forms/PurchaseOrderForms.tsx:696 msgid "Store at default location" -msgstr "" +msgstr "기본 위치에 저장" #: src/forms/PurchaseOrderForms.tsx:711 msgid "Store at line item destination " -msgstr "" +msgstr "항목 대상 위치에 보관" #: src/forms/PurchaseOrderForms.tsx:723 msgid "Store with already received stock" -msgstr "" +msgstr "이미 입고된 재고로 보관" #: src/forms/PurchaseOrderForms.tsx:747 #: src/pages/build/BuildDetail.tsx:359 @@ -4868,30 +4868,30 @@ msgstr "" #: src/tables/part/PartTestResultTable.tsx:289 #: src/tables/sales/SalesOrderAllocationTable.tsx:146 msgid "Batch Code" -msgstr "" +msgstr "배치 코드" #: src/forms/PurchaseOrderForms.tsx:748 msgid "Enter batch code for received items" -msgstr "" +msgstr "입고된 항목의 배치 코드를 입력하세요" #: src/forms/PurchaseOrderForms.tsx:761 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" -msgstr "" +msgstr "일련번호" #: src/forms/PurchaseOrderForms.tsx:762 msgid "Enter serial numbers for received items" -msgstr "" +msgstr "입고된 항목의 시리얼 번호를 입력하세요" #: src/forms/PurchaseOrderForms.tsx:779 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" -msgstr "" +msgstr "만료 날짜" #: src/forms/PurchaseOrderForms.tsx:780 msgid "Enter an expiry date for received items" -msgstr "" +msgstr "입고된 항목의 만료일을 입력하세요" #: src/forms/PurchaseOrderForms.tsx:792 #: src/forms/StockForms.tsx:737 @@ -4900,19 +4900,19 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:419 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:223 msgid "Packaging" -msgstr "" +msgstr "포장" #: src/forms/PurchaseOrderForms.tsx:816 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" -msgstr "" +msgstr "메모" #: src/forms/PurchaseOrderForms.tsx:888 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" -msgstr "" +msgstr "SKU" #: src/forms/PurchaseOrderForms.tsx:889 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 @@ -4920,73 +4920,73 @@ msgstr "" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 #: src/tables/sales/ReturnOrderLineItemTable.tsx:170 msgid "Received" -msgstr "" +msgstr "받았다" #: src/forms/PurchaseOrderForms.tsx:906 msgid "Receive Line Items" -msgstr "" +msgstr "항목 입고" #: src/forms/PurchaseOrderForms.tsx:912 msgid "Items received" -msgstr "" +msgstr "받은 상품" #: src/forms/ReturnOrderForms.tsx:259 msgid "Receive Items" -msgstr "" +msgstr "아이템 받기" #: src/forms/ReturnOrderForms.tsx:266 msgid "Item received into stock" -msgstr "" +msgstr "입고된 품목" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' #: src/forms/SalesOrderForms.tsx:183 msgid "Price based on part and quantity differs{0}" -msgstr "" +msgstr "부품과 수량 기준 가격이 다릅니다{0}" #: src/forms/SalesOrderForms.tsx:214 #: src/forms/SalesOrderForms.tsx:216 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" -msgstr "" +msgstr "출하 확인" #: src/forms/SalesOrderForms.tsx:217 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" -msgstr "" +msgstr "출하를 확인됨으로 표시하면 이 출하에 포함된 모든 항목이 올바른지 검증했음을 의미합니다" #: src/forms/SalesOrderForms.tsx:227 msgid "Shipment marked as checked" -msgstr "" +msgstr "출하가 확인됨으로 표시되었습니다" #: src/forms/SalesOrderForms.tsx:242 #: src/forms/SalesOrderForms.tsx:244 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" -msgstr "" +msgstr "출하 확인 해제" #: src/forms/SalesOrderForms.tsx:245 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" -msgstr "" +msgstr "출하를 미확인으로 표시하면 추가 검증이 필요함을 의미합니다" #: src/forms/SalesOrderForms.tsx:255 msgid "Shipment marked as unchecked" -msgstr "" +msgstr "출하가 미확인으로 표시되었습니다" #: src/forms/SalesOrderForms.tsx:273 msgid "Completing shipment" -msgstr "" +msgstr "출하 완료 처리 중" #: src/forms/SalesOrderForms.tsx:274 msgid "Shipment completed successfully" -msgstr "" +msgstr "출하가 성공적으로 완료되었습니다" #: src/forms/SalesOrderForms.tsx:281 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" -msgstr "" +msgstr "출하 완료" #: src/forms/SalesOrderForms.tsx:527 msgid "Leave blank to use the order address" -msgstr "" +msgstr "주문 주소를 사용하려면 비워두세요." #: src/forms/StockForms.tsx:110 #~ msgid "Create Stock Item" @@ -4998,210 +4998,210 @@ msgstr "" #: src/forms/StockForms.tsx:202 msgid "Add given quantity as packs instead of individual items" -msgstr "" +msgstr "개별 항목 대신 포장 단위로 수량을 추가합니다" #: src/forms/StockForms.tsx:216 msgid "Enter initial quantity for this stock item" -msgstr "" +msgstr "이 재고 품목의 초기 수량을 입력하세요" #: src/forms/StockForms.tsx:226 msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "" +msgstr "새 재고의 시리얼 번호를 입력하세요. 비워 둘 수도 있습니다" #: src/forms/StockForms.tsx:246 msgid "Stock Status" -msgstr "" +msgstr "재고현황" #: src/forms/StockForms.tsx:324 #: src/pages/stock/StockDetail.tsx:687 #: src/tables/stock/StockItemTable.tsx:406 #: src/tables/stock/StockItemTable.tsx:455 msgid "Add Stock Item" -msgstr "" +msgstr "재고 품목 추가" #: src/forms/StockForms.tsx:369 msgid "Select the part to install" -msgstr "" +msgstr "설치할 부품 선택" #: src/forms/StockForms.tsx:495 msgid "Confirm Stock Transfer" -msgstr "" +msgstr "재고 이전 확인" #: src/forms/StockForms.tsx:681 msgid "Move to default location" -msgstr "" +msgstr "기본 위치로 이동" #: src/forms/StockForms.tsx:804 msgid "Move" -msgstr "" +msgstr "이동하다" #: src/forms/StockForms.tsx:851 msgid "Return" -msgstr "" +msgstr "반품" #: src/forms/StockForms.tsx:988 #: src/pages/Index/Scan.tsx:180 msgid "Count" -msgstr "" +msgstr "실사" #: src/forms/StockForms.tsx:1295 #: src/hooks/UseStockAdjustActions.tsx:112 msgid "Add Stock" -msgstr "" +msgstr "재고 추가" #: src/forms/StockForms.tsx:1296 msgid "Stock added" -msgstr "" +msgstr "재고 추가됨" #: src/forms/StockForms.tsx:1299 msgid "Increase the quantity of the selected stock items by a given amount." -msgstr "" +msgstr "선택한 재고 품목의 수량을 지정한 만큼 늘립니다" #: src/forms/StockForms.tsx:1310 #: src/hooks/UseStockAdjustActions.tsx:122 msgid "Remove Stock" -msgstr "" +msgstr "재고 차감" #: src/forms/StockForms.tsx:1311 msgid "Stock removed" -msgstr "" +msgstr "재고가 차감되었습니다" #: src/forms/StockForms.tsx:1314 msgid "Decrease the quantity of the selected stock items by a given amount." -msgstr "" +msgstr "선택한 재고 품목의 수량을 지정한 만큼 줄입니다" #: src/forms/StockForms.tsx:1325 #: src/hooks/UseStockAdjustActions.tsx:132 msgid "Transfer Stock" -msgstr "" +msgstr "재고 이전" #: src/forms/StockForms.tsx:1326 msgid "Stock transferred" -msgstr "" +msgstr "재고양도" #: src/forms/StockForms.tsx:1329 msgid "Transfer selected items to the specified location." -msgstr "" +msgstr "선택한 항목을 지정한 위치로 이동합니다" #: src/forms/StockForms.tsx:1340 #: src/hooks/UseStockAdjustActions.tsx:182 msgid "Return Stock" -msgstr "" +msgstr "재고 반환" #: src/forms/StockForms.tsx:1341 msgid "Stock returned" -msgstr "" +msgstr "재고가 반환되었습니다" #: src/forms/StockForms.tsx:1344 msgid "Return selected items into stock, to the specified location." -msgstr "" +msgstr "선택한 항목을 지정한 위치의 재고로 반환합니다" #: src/forms/StockForms.tsx:1355 #: src/hooks/UseStockAdjustActions.tsx:102 msgid "Count Stock" -msgstr "" +msgstr "재고 수량" #: src/forms/StockForms.tsx:1356 msgid "Stock counted" -msgstr "" +msgstr "재고 계산" #: src/forms/StockForms.tsx:1359 msgid "Count the selected stock items, and adjust the quantity accordingly." -msgstr "" +msgstr "선택한 재고 품목을 실사하고 수량을 그에 맞게 조정합니다" #: src/forms/StockForms.tsx:1370 msgid "Change Stock Status" -msgstr "" +msgstr "재고현황 변경" #: src/forms/StockForms.tsx:1371 msgid "Stock status changed" -msgstr "" +msgstr "재고 상태가 변경되었습니다." #: src/forms/StockForms.tsx:1374 msgid "Change the status of the selected stock items." -msgstr "" +msgstr "선택한 재고 품목의 상태를 변경합니다" #: src/forms/StockForms.tsx:1397 #: src/hooks/UseStockAdjustActions.tsx:162 msgid "Change Batch Code" -msgstr "" +msgstr "배치 코드 변경" #: src/forms/StockForms.tsx:1400 msgid "Change batch code for the selected stock items" -msgstr "" +msgstr "선택한 재고 품목의 배치 코드를 변경합니다" #: src/forms/StockForms.tsx:1417 #: src/hooks/UseStockAdjustActions.tsx:142 msgid "Merge Stock" -msgstr "" +msgstr "재고 병합" #: src/forms/StockForms.tsx:1418 msgid "Stock merged" -msgstr "" +msgstr "재고 병합" #: src/forms/StockForms.tsx:1420 msgid "Merge Stock Items" -msgstr "" +msgstr "재고 품목 병합" #: src/forms/StockForms.tsx:1422 msgid "Merge operation cannot be reversed" -msgstr "" +msgstr "병합 작업은 되돌릴 수 없습니다." #: src/forms/StockForms.tsx:1423 msgid "Tracking information may be lost when merging items" -msgstr "" +msgstr "항목을 병합하면 추적 정보가 손실될 수 있습니다." #: src/forms/StockForms.tsx:1424 msgid "Supplier information may be lost when merging items" -msgstr "" +msgstr "품목을 병합하면 공급업체 정보가 손실될 수 있습니다." #: src/forms/StockForms.tsx:1442 msgid "Assign Stock to Customer" -msgstr "" +msgstr "고객에게 재고 할당" #: src/forms/StockForms.tsx:1443 msgid "Stock assigned to customer" -msgstr "" +msgstr "고객에게 할당된 재고" #: src/forms/StockForms.tsx:1453 msgid "Delete Stock Items" -msgstr "" +msgstr "재고 품목 삭제" #: src/forms/StockForms.tsx:1454 msgid "Stock deleted" -msgstr "" +msgstr "재고가 삭제되었습니다." #: src/forms/StockForms.tsx:1457 msgid "This operation will permanently delete the selected stock items." -msgstr "" +msgstr "이 작업은 선택한 재고 품목을 영구적으로 삭제합니다" #: src/forms/StockForms.tsx:1466 msgid "Parent stock location" -msgstr "" +msgstr "모재 위치" #: src/forms/StockForms.tsx:1597 msgid "Find Serial Number" -msgstr "" +msgstr "일련번호 찾기" #: src/forms/StockForms.tsx:1608 msgid "No matching items" -msgstr "" +msgstr "일치하는 항목이 없습니다." #: src/forms/StockForms.tsx:1614 msgid "Multiple matching items" -msgstr "" +msgstr "일치하는 항목이 여러 개 있습니다" #: src/forms/StockForms.tsx:1623 msgid "Invalid response from server" -msgstr "" +msgstr "서버의 응답이 올바르지 않습니다" #: src/forms/selectionListFields.tsx:95 msgid "Entries" -msgstr "" +msgstr "항목" #: src/forms/selectionListFields.tsx:96 msgid "List of entries to choose from" -msgstr "" +msgstr "선택할 수 있는 항목 목록" #: src/forms/selectionListFields.tsx:100 #: src/pages/part/PartStockHistoryDetail.tsx:64 @@ -5211,35 +5211,35 @@ msgstr "" #: src/tables/part/PartTestResultTable.tsx:206 #: src/tables/stock/StockItemTestResultTable.tsx:207 msgid "Value" -msgstr "" +msgstr "값" #: src/forms/selectionListFields.tsx:101 msgid "Label" -msgstr "" +msgstr "상표" #: src/functions/api.tsx:33 msgid "Bad request" -msgstr "" +msgstr "잘못된 요청" #: src/functions/api.tsx:36 msgid "Unauthorized" -msgstr "" +msgstr "승인되지 않은" #: src/functions/api.tsx:39 msgid "Forbidden" -msgstr "" +msgstr "금지됨" #: src/functions/api.tsx:42 msgid "Not found" -msgstr "" +msgstr "찾을 수 없음" #: src/functions/api.tsx:45 msgid "Method not allowed" -msgstr "" +msgstr "허용되지 않는 방법" #: src/functions/api.tsx:48 msgid "Internal server error" -msgstr "" +msgstr "내부 서버 오류" #: src/functions/auth.tsx:34 #~ msgid "Error fetching token from server." @@ -5262,13 +5262,13 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" -msgstr "" +msgstr "로그아웃됨" #: src/functions/auth.tsx:125 msgid "There was a conflicting session for this browser, which has been logged out." -msgstr "" +msgstr "이 브라우저에 충돌하는 세션이 있어 로그아웃되었습니다" #: src/functions/auth.tsx:142 #~ msgid "Found an existing login - using it to log you in." @@ -5276,7 +5276,7 @@ msgstr "" #: src/functions/auth.tsx:143 msgid "No response from server." -msgstr "" +msgstr "서버에서 응답이 없습니다" #: src/functions/auth.tsx:143 #~ msgid "Found an existing login - welcome back!" @@ -5284,89 +5284,89 @@ msgstr "" #: src/functions/auth.tsx:186 msgid "MFA Login successful" -msgstr "" +msgstr "MFA 로그인 성공" #: src/functions/auth.tsx:187 msgid "MFA details were automatically provided in the browser" -msgstr "" +msgstr "MFA 세부 정보가 브라우저에 자동으로 제공되었습니다." -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" -msgstr "" +msgstr "성공적으로 로그아웃되었습니다" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" -msgstr "" +msgstr "언어가 변경됨" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" -msgstr "" +msgstr "현재 사용 언어가 프로필에 설정된 언어로 변경되었습니다" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" -msgstr "" +msgstr "테마가 변경됨" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" -msgstr "" +msgstr "현재 사용 테마가 프로필에 설정된 테마로 변경되었습니다" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." -msgstr "" +msgstr "받은편지함에서 재설정 링크를 확인하세요. 계정이 있는 경우에만 동작합니다. 스팸함도 확인하세요" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" -msgstr "" +msgstr "재설정 실패" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" -msgstr "" +msgstr "이미 로그인되어 있습니다." -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." -msgstr "" +msgstr "이 브라우저에 대해 서버에 충돌하는 세션이 있습니다. 먼저 해당 세션에서 로그아웃하세요" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" -msgstr "" +msgstr "로그인됨" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" -msgstr "" +msgstr "성공적으로 로그인되었습니다" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" -msgstr "" +msgstr "MFA 설정에 실패했습니다" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" -msgstr "" +msgstr "MFA 설정 성공" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." -msgstr "" +msgstr "TOTP 기반 MFA가 성공적으로 설정되었습니다. 다시 로그인해야 합니다" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" -msgstr "" +msgstr "비밀번호가 설정되었습니다" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" -msgstr "" +msgstr "비밀번호가 성공적으로 설정되었습니다. 이제 새로운 비밀번호로 로그인하실 수 있습니다" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" -msgstr "" +msgstr "비밀번호를 변경할 수 없습니다." -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" -msgstr "" +msgstr "두 개의 비밀번호 필드가 일치하지 않습니다" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" -msgstr "" +msgstr "비밀번호가 변경되었습니다." #: src/functions/forms.tsx:50 #~ msgid "Form method not provided" @@ -5390,39 +5390,39 @@ msgstr "" #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" -msgstr "" +msgstr "데이터 내보내기" #: src/hooks/UseDataExport.tsx:111 msgid "Export Data" -msgstr "" +msgstr "데이터 내보내기" #: src/hooks/UseDataExport.tsx:114 msgid "Export" -msgstr "" +msgstr "내보내다" #: src/hooks/UseForm.tsx:102 msgid "Item Created" -msgstr "" +msgstr "생성된 항목" #: src/hooks/UseForm.tsx:122 msgid "Item Updated" -msgstr "" +msgstr "업데이트된 항목" #: src/hooks/UseForm.tsx:143 msgid "Items Updated" -msgstr "" +msgstr "항목이 업데이트되었습니다" #: src/hooks/UseForm.tsx:145 msgid "Update multiple items" -msgstr "" +msgstr "여러 항목 업데이트" #: src/hooks/UseForm.tsx:175 msgid "Item Deleted" -msgstr "" +msgstr "삭제된 항목" #: src/hooks/UseForm.tsx:179 msgid "Are you sure you want to delete this item?" -msgstr "" +msgstr "이 항목을 삭제하시겠습니까?" #: src/hooks/UsePlaceholder.tsx:59 #~ msgid "Latest serial number" @@ -5430,101 +5430,101 @@ msgstr "" #: src/hooks/UseStockAdjustActions.tsx:104 msgid "Count selected stock items" -msgstr "" +msgstr "선택한 재고 품목 실사" #: src/hooks/UseStockAdjustActions.tsx:114 msgid "Add to selected stock items" -msgstr "" +msgstr "선택한 재고 항목에 추가" #: src/hooks/UseStockAdjustActions.tsx:124 msgid "Remove from selected stock items" -msgstr "" +msgstr "선택한 재고 품목에서 차감" #: src/hooks/UseStockAdjustActions.tsx:134 msgid "Transfer selected stock items" -msgstr "" +msgstr "선택한 재고 품목 이전" #: src/hooks/UseStockAdjustActions.tsx:144 msgid "Merge selected stock items" -msgstr "" +msgstr "선택한 재고 항목 병합" #: src/hooks/UseStockAdjustActions.tsx:154 msgid "Change status of selected stock items" -msgstr "" +msgstr "선택한 재고 품목의 상태 변경" #: src/hooks/UseStockAdjustActions.tsx:164 msgid "Change batch code of selected stock items" -msgstr "" +msgstr "선택한 재고 품목의 배치 코드 변경" #: src/hooks/UseStockAdjustActions.tsx:172 msgid "Assign Stock" -msgstr "" +msgstr "재고 할당" #: src/hooks/UseStockAdjustActions.tsx:174 msgid "Assign selected stock items to a customer" -msgstr "" +msgstr "선택한 재고 품목을 고객에게 할당" #: src/hooks/UseStockAdjustActions.tsx:184 msgid "Return selected items into stock" -msgstr "" +msgstr "선택한 항목을 재고로 반환" #: src/hooks/UseStockAdjustActions.tsx:192 msgid "Delete Stock" -msgstr "" +msgstr "재고 삭제" #: src/hooks/UseStockAdjustActions.tsx:194 msgid "Delete selected stock items" -msgstr "" +msgstr "선택한 재고 품목 삭제" #: src/hooks/UseStockAdjustActions.tsx:219 #: src/pages/part/PartDetail.tsx:1150 msgid "Stock Actions" -msgstr "" +msgstr "재고 작업" #: src/pages/Auth/ChangePassword.tsx:32 #: src/pages/Auth/Reset.tsx:14 msgid "Reset Password" -msgstr "" +msgstr "비밀번호 재설정" #: src/pages/Auth/ChangePassword.tsx:46 msgid "Current Password" -msgstr "" +msgstr "현재 비밀번호" #: src/pages/Auth/ChangePassword.tsx:47 msgid "Enter your current password" -msgstr "" +msgstr "현재 비밀번호를 입력하세요" #: src/pages/Auth/ChangePassword.tsx:53 msgid "New Password" -msgstr "" +msgstr "새 비밀번호" #: src/pages/Auth/ChangePassword.tsx:54 msgid "Enter your new password" -msgstr "" +msgstr "새 비밀번호를 입력하세요" #: src/pages/Auth/ChangePassword.tsx:60 msgid "Confirm New Password" -msgstr "" +msgstr "새 비밀번호 확인" #: src/pages/Auth/ChangePassword.tsx:61 msgid "Confirm your new password" -msgstr "" +msgstr "새 비밀번호를 확인하세요" #: src/pages/Auth/ChangePassword.tsx:80 msgid "Confirm" -msgstr "" +msgstr "확인하다" #: src/pages/Auth/Layout.tsx:59 msgid "Log off" -msgstr "" +msgstr "로그오프" #: src/pages/Auth/LoggedIn.tsx:19 msgid "Checking if you are already logged in" -msgstr "" +msgstr "이미 로그인되어 있는지 확인하기" #: src/pages/Auth/Login.tsx:36 msgid "No selection" -msgstr "" +msgstr "선택사항 없음" #: src/pages/Auth/Login.tsx:91 #~ msgid "Welcome, log in below" @@ -5536,15 +5536,15 @@ msgstr "" #: src/pages/Auth/Login.tsx:107 msgid "Login" -msgstr "" +msgstr "로그인" #: src/pages/Auth/Login.tsx:113 msgid "Logging you in" -msgstr "" +msgstr "로그인 중" #: src/pages/Auth/Login.tsx:120 msgid "Don't have an account?" -msgstr "" +msgstr "계정이 없나요?" #: src/pages/Auth/Logout.tsx:22 #~ msgid "Logging out" @@ -5562,40 +5562,40 @@ msgstr "" #: src/pages/Auth/MFA.tsx:29 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86 msgid "Multi-Factor Authentication" -msgstr "" +msgstr "다단계 인증" #: src/pages/Auth/MFA.tsx:33 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:219 msgid "TOTP Code" -msgstr "" +msgstr "TOTP 코드" #: src/pages/Auth/MFA.tsx:35 msgid "Enter one of your codes: {mfa_types}" -msgstr "" +msgstr "다음 코드 중 하나를 입력하세요: {mfa_types}" #: src/pages/Auth/MFA.tsx:42 msgid "Remember this device" -msgstr "" +msgstr "이 기기 기억하기" #: src/pages/Auth/MFA.tsx:44 msgid "If enabled, you will not be asked for MFA on this device for 30 days." -msgstr "" +msgstr "이 옵션을 켜면 이 기기에서는 30일 동안 MFA를 다시 묻지 않습니다" #: src/pages/Auth/MFA.tsx:53 msgid "Log in" -msgstr "" +msgstr "로그인" #: src/pages/Auth/MFASetup.tsx:23 msgid "MFA Setup Required" -msgstr "" +msgstr "MFA 설정 필요" #: src/pages/Auth/MFASetup.tsx:34 msgid "Add TOTP" -msgstr "" +msgstr "TOTP 추가" #: src/pages/Auth/Register.tsx:23 msgid "Go back to login" -msgstr "" +msgstr "로그인으로 돌아가기" #: src/pages/Auth/Reset.tsx:41 #: src/pages/Auth/Set-Password.tsx:112 @@ -5605,11 +5605,11 @@ msgstr "" #: src/pages/Auth/ResetPassword.tsx:22 #: src/pages/Auth/VerifyEmail.tsx:19 msgid "Key invalid" -msgstr "" +msgstr "키가 유효하지 않음" #: src/pages/Auth/ResetPassword.tsx:23 msgid "You need to provide a valid key to set a new password. Check your inbox for a reset link." -msgstr "" +msgstr "새 비밀번호를 설정하려면 유효한 키를 제공해야 합니다. 받은편지함에서 재설정 링크를 확인하세요" #: src/pages/Auth/ResetPassword.tsx:30 #~ msgid "Token invalid" @@ -5617,7 +5617,7 @@ msgstr "" #: src/pages/Auth/ResetPassword.tsx:31 msgid "Set new password" -msgstr "" +msgstr "새 비밀번호 설정" #: src/pages/Auth/ResetPassword.tsx:31 #~ msgid "You need to provide a valid token to set a new password. Check your inbox for a reset link." @@ -5625,11 +5625,11 @@ msgstr "" #: src/pages/Auth/ResetPassword.tsx:35 msgid "The desired new password" -msgstr "" +msgstr "설정할 새 비밀번호" #: src/pages/Auth/ResetPassword.tsx:44 msgid "Send Password" -msgstr "" +msgstr "비밀번호 보내기" #: src/pages/Auth/Set-Password.tsx:49 #~ msgid "No token provided" @@ -5641,24 +5641,24 @@ msgstr "" #: src/pages/Auth/VerifyEmail.tsx:20 msgid "You need to provide a valid key." -msgstr "" +msgstr "유효한 키를 제공해야 합니다" #: src/pages/Auth/VerifyEmail.tsx:28 msgid "Verify Email" -msgstr "" +msgstr "이메일 확인" #: src/pages/Auth/VerifyEmail.tsx:30 msgid "Verify" -msgstr "" +msgstr "확인하다" #. placeholder {0}: error.statusText #: src/pages/ErrorPage.tsx:16 msgid "Error: {0}" -msgstr "" +msgstr "오류: {0}" #: src/pages/ErrorPage.tsx:23 msgid "An unexpected error has occurred" -msgstr "" +msgstr "예상치 못한 오류가 발생했습니다." #: src/pages/ErrorPage.tsx:28 #~ msgid "Sorry, an unexpected error has occurred." @@ -5818,31 +5818,31 @@ msgstr "" #: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" -msgstr "" +msgstr "항목이 이미 스캔되었습니다" #: src/pages/Index/Scan.tsx:80 msgid "API Error" -msgstr "" +msgstr "API 오류" #: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" -msgstr "" +msgstr "인스턴스 데이터를 불러오지 못했습니다" #: src/pages/Index/Scan.tsx:128 msgid "Scan Error" -msgstr "" +msgstr "스캔 오류" #: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" -msgstr "" +msgstr "선택한 요소를 알 수 없습니다." #: src/pages/Index/Scan.tsx:167 msgid "Multiple object types selected" -msgstr "" +msgstr "여러 개체 유형이 선택됨" #: src/pages/Index/Scan.tsx:175 msgid "Actions ... " -msgstr "" +msgstr "작업 ..." #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." @@ -5851,23 +5851,23 @@ msgstr "" #: src/pages/Index/Scan.tsx:192 #: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" -msgstr "" +msgstr "바코드 스캐닝" #: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" -msgstr "" +msgstr "바코드 입력" #: src/pages/Index/Scan.tsx:212 msgid "Action" -msgstr "" +msgstr "행동" #: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" -msgstr "" +msgstr "선택한 항목이 없습니다." #: src/pages/Index/Scan.tsx:216 msgid "Scan and select items to perform actions" -msgstr "" +msgstr "작업을 수행할 항목을 스캔하고 선택하세요." #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" @@ -5880,11 +5880,11 @@ msgstr "" #. placeholder {0}: selection.length #: src/pages/Index/Scan.tsx:221 msgid "{0} items selected" -msgstr "" +msgstr "{0}개 항목 선택됨" #: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" -msgstr "" +msgstr "스캔한 항목" #: src/pages/Index/Scan.tsx:276 #~ msgid "Actions for {0}" @@ -5986,7 +5986,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:33 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:113 msgid "Edit Account Information" -msgstr "" +msgstr "계정 정보 편집" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:34 #~ msgid "User details updated" @@ -5994,7 +5994,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:37 msgid "Account details updated" -msgstr "" +msgstr "계정 세부정보가 업데이트되었습니다." #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:46 #~ msgid "User Actions" @@ -6007,7 +6007,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:55 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:136 msgid "Edit Profile Information" -msgstr "" +msgstr "프로필 정보 편집" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:55 #~ msgid "Last name" @@ -6023,7 +6023,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:59 msgid "Profile details updated" -msgstr "" +msgstr "프로필 세부정보가 업데이트되었습니다." #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:61 #~ msgid "Last name: {0}" @@ -6032,12 +6032,12 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:65 #: src/pages/core/UserDetail.tsx:55 msgid "First Name" -msgstr "" +msgstr "이름" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:66 #: src/pages/core/UserDetail.tsx:63 msgid "Last Name" -msgstr "" +msgstr "성" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:67 #~ msgid "First name:" @@ -6055,113 +6055,113 @@ msgstr "" #: src/pages/core/UserDetail.tsx:119 #: src/tables/settings/CustomStateTable.tsx:101 msgid "Display Name" -msgstr "" +msgstr "표시 이름" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:86 #: src/pages/core/UserDetail.tsx:127 msgid "Position" -msgstr "" +msgstr "직책" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:90 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:967 msgid "Type" -msgstr "" +msgstr "유형" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:91 #: src/pages/core/UserDetail.tsx:143 msgid "Organisation" -msgstr "" +msgstr "조직" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:92 msgid "Primary Group" -msgstr "" +msgstr "기본 그룹" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:104 msgid "Account Details" -msgstr "" +msgstr "계정 정보" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:107 msgid "Account Actions" -msgstr "" +msgstr "계정 작업" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:111 msgid "Edit Account" -msgstr "" +msgstr "계정 편집" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:117 #: src/tables/settings/UserTable.tsx:323 msgid "Change Password" -msgstr "" +msgstr "비밀번호 변경" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:119 msgid "Change User Password" -msgstr "" +msgstr "사용자 비밀번호 변경" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:131 msgid "Profile Details" -msgstr "" +msgstr "프로필 정보" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:134 msgid "Edit Profile" -msgstr "" +msgstr "프로필 편집" #. placeholder {0}: item.label #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:153 msgid "{0}" -msgstr "" +msgstr "{0}" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:105 msgid "Reauthentication Succeeded" -msgstr "" +msgstr "재인증에 성공했습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:106 msgid "You have been reauthenticated successfully." -msgstr "" +msgstr "재인증이 성공적으로 완료되었습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:114 msgid "Error during reauthentication" -msgstr "" +msgstr "재인증 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:117 msgid "Reauthentication Failed" -msgstr "" +msgstr "재인증 실패" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:118 msgid "Failed to reauthenticate" -msgstr "" +msgstr "재인증하지 못했습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:133 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:173 msgid "Reauthenticate" -msgstr "" +msgstr "재인증" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:135 msgid "Reauthentiction is required to continue." -msgstr "" +msgstr "계속하려면 재인증이 필요합니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:197 msgid "Enter your password" -msgstr "" +msgstr "비밀번호를 입력하세요" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:221 msgid "Enter one of your TOTP codes" -msgstr "" +msgstr "TOTP 코드 중 하나를 입력하세요." #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:273 msgid "WebAuthn Credential Removed" -msgstr "" +msgstr "WebAuthn 자격 증명이 제거됨" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:274 msgid "WebAuthn credential removed successfully." -msgstr "" +msgstr "WebAuthn 자격 증명이 성공적으로 제거되었습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:283 msgid "Error removing WebAuthn credential" -msgstr "" +msgstr "WebAuthn 자격 증명 제거 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:304 msgid "Remove WebAuthn Credential" -msgstr "" +msgstr "WebAuthn 자격 증명 제거" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:312 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:403 @@ -6169,175 +6169,175 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:674 #: src/tables/sales/SalesOrderAllocationTable.tsx:219 msgid "Confirm Removal" -msgstr "" +msgstr "제거 확인" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:314 msgid "Confirm removal of webauth credential" -msgstr "" +msgstr "WebAuthn 자격 증명 제거 확인" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:366 msgid "TOTP Removed" -msgstr "" +msgstr "TOTP가 제거되었습니다." #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:367 msgid "TOTP token removed successfully." -msgstr "" +msgstr "TOTP 토큰이 성공적으로 제거되었습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:377 msgid "Error removing TOTP token" -msgstr "" +msgstr "TOTP 토큰 제거 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:396 msgid "Remove TOTP Token" -msgstr "" +msgstr "TOTP 토큰 제거" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:405 msgid "Confirm removal of TOTP code" -msgstr "" +msgstr "TOTP 코드 제거 확인" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:465 msgid "TOTP Already Registered" -msgstr "" +msgstr "TOTP가 이미 등록되었습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:466 msgid "A TOTP token is already registered for this account." -msgstr "" +msgstr "이 계정에는 이미 TOTP 토큰이 등록되어 있습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:481 msgid "Error Fetching TOTP Registration" -msgstr "" +msgstr "TOTP 등록 정보를 불러오는 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:482 msgid "An unexpected error occurred while fetching TOTP registration data." -msgstr "" +msgstr "TOTP 등록 데이터를 불러오는 중 예기치 않은 오류가 발생했습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:524 msgid "TOTP Registered" -msgstr "" +msgstr "TOTP가 등록되었습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:525 msgid "TOTP token registered successfully." -msgstr "" +msgstr "TOTP 토큰이 성공적으로 등록되었습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:534 msgid "Error registering TOTP token" -msgstr "" +msgstr "TOTP 토큰 등록 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:553 msgid "Register TOTP Token" -msgstr "" +msgstr "TOTP 토큰 등록" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:598 msgid "Error fetching recovery codes" -msgstr "" +msgstr "복구 코드를 불러오는 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:634 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:650 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:866 msgid "Recovery Codes" -msgstr "" +msgstr "복구 코드" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:652 msgid "The following one time recovery codes are available for use" -msgstr "" +msgstr "다음 일회성 복구 코드를 사용할 수 있습니다." #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:669 msgid "Copy recovery codes to clipboard" -msgstr "" +msgstr "복구 코드를 클립보드에 복사" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:679 msgid "No Unused Codes" -msgstr "" +msgstr "미사용 코드 없음" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:681 msgid "There are no available recovery codes" -msgstr "" +msgstr "사용 가능한 복구 코드가 없습니다." #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:782 msgid "WebAuthn Registered" -msgstr "" +msgstr "WebAuthn이 등록되었습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:783 msgid "WebAuthn credential registered successfully" -msgstr "" +msgstr "WebAuthn 자격 증명이 성공적으로 등록되었습니다." #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:792 msgid "Error registering WebAuthn credential" -msgstr "" +msgstr "WebAuthn 자격 증명 등록 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:795 msgid "WebAuthn Registration Failed" -msgstr "" +msgstr "WebAuthn 등록 실패" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:796 msgid "Failed to register WebAuthn credential" -msgstr "" +msgstr "WebAuthn 자격 증명을 등록하지 못했습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:819 msgid "Error fetching WebAuthn registration" -msgstr "" +msgstr "WebAuthn 등록 정보를 불러오는 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:859 msgid "TOTP" -msgstr "" +msgstr "TOTP" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:860 msgid "Time-based One-Time Password" -msgstr "" +msgstr "시간 기반 일회용 비밀번호" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:867 msgid "One-Time pre-generated recovery codes" -msgstr "" +msgstr "사전 생성된 일회용 복구 코드" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:873 msgid "WebAuthn" -msgstr "" +msgstr "웹인증" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:874 msgid "Web Authentication (WebAuthn) is a web standard for secure authentication" -msgstr "" +msgstr "웹 인증(WebAuthn)은 안전한 인증을 위한 웹 표준입니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:970 msgid "Last used at" -msgstr "" +msgstr "마지막 사용 시각" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:973 msgid "Created at" -msgstr "" +msgstr "생성 시각" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:984 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:204 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:362 msgid "Not Configured" -msgstr "" +msgstr "구성되지 않음" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:988 msgid "No multi-factor tokens configured for this account" -msgstr "" +msgstr "이 계정에는 구성된 다단계 인증 토큰이 없습니다" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:993 msgid "Register Authentication Method" -msgstr "" +msgstr "인증방법 등록" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:1009 msgid "No MFA Methods Available" -msgstr "" +msgstr "사용 가능한 MFA 방법이 없습니다." #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:1013 msgid "There are no MFA methods available for configuration" -msgstr "" +msgstr "구성에 사용할 수 있는 MFA 방법이 없습니다." #: src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx:27 msgid "Secret" -msgstr "" +msgstr "비밀" #: src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx:40 msgid "One-Time Password" -msgstr "" +msgstr "일회용 비밀번호" #: src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx:41 msgid "Enter the TOTP code to ensure it registered correctly" -msgstr "" +msgstr "정상적으로 등록되었는지 확인하려면 TOTP 코드를 입력하세요" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55 #~ msgid "Single Sign On Accounts" @@ -6345,11 +6345,11 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60 msgid "Email Addresses" -msgstr "" +msgstr "이메일 주소" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68 msgid "Single Sign On" -msgstr "" +msgstr "단일 로그인" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69 #~ msgid "Multifactor" @@ -6361,11 +6361,11 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:76 msgid "Not enabled" -msgstr "" +msgstr "활성화되지 않음" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:79 msgid "Single Sign On is not enabled for this server " -msgstr "" +msgstr "이 서버에서는 단일 로그인이 활성화되어 있지 않습니다" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83 #~ msgid "Multifactor authentication is not configured for your account" @@ -6373,11 +6373,11 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:94 msgid "Access Tokens" -msgstr "" +msgstr "액세스 토큰" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:108 msgid "Session Information" -msgstr "" +msgstr "세션 정보" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:146 #: src/tables/general/BarcodeScanTable.tsx:60 @@ -6385,44 +6385,44 @@ msgstr "" #: src/tables/settings/EmailTable.tsx:131 #: src/tables/settings/ErrorTable.tsx:59 msgid "Timestamp" -msgstr "" +msgstr "타임스탬프" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147 msgid "Method" -msgstr "" +msgstr "방법" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:190 msgid "Error while updating email" -msgstr "" +msgstr "이메일 업데이트 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207 msgid "Currently no email addresses are registered." -msgstr "" +msgstr "현재 등록된 이메일 주소가 없습니다" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215 msgid "The following email addresses are associated with your account:" -msgstr "" +msgstr "다음 이메일 주소가 계정에 연결되어 있습니다:" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:228 #: src/tables/purchasing/SupplierPartTable.tsx:254 msgid "Primary" -msgstr "" +msgstr "주요한" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:233 msgid "Verified" -msgstr "" +msgstr "확인됨" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:237 msgid "Unverified" -msgstr "" +msgstr "미확인" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:255 msgid "Make Primary" -msgstr "" +msgstr "기본으로 만들기" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:261 msgid "Re-send Verification" -msgstr "" +msgstr "확인 메일 다시 보내기" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:270 #~ msgid "Provider has not been configured" @@ -6430,15 +6430,15 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:275 msgid "Add Email Address" -msgstr "" +msgstr "이메일 주소 추가" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:277 msgid "E-Mail" -msgstr "" +msgstr "이메일" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:278 msgid "E-Mail address" -msgstr "" +msgstr "이메일 주소" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:280 #~ msgid "Not configured" @@ -6450,7 +6450,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:290 msgid "Error while adding email" -msgstr "" +msgstr "이메일 추가 중 오류 발생" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293 #~ msgid "You can sign in to your account using any of the following third party accounts" @@ -6458,19 +6458,19 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:301 msgid "Add Email" -msgstr "" +msgstr "이메일 추가" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:365 msgid "There are no providers connected to this account." -msgstr "" +msgstr "이 계정에 연결된 제공업체가 없습니다" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:374 msgid "You can sign in to your account using any of the following providers" -msgstr "" +msgstr "다음 제공업체를 사용해 계정에 로그인할 수 있습니다" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:387 msgid "Remove Provider Link" -msgstr "" +msgstr "제공업체 연결 제거" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:556 #~ msgid "Unused Codes" @@ -6515,7 +6515,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:61 msgid "Display Settings" -msgstr "" +msgstr "디스플레이 설정" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:65 #~ msgid "bars" @@ -6527,7 +6527,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:67 msgid "Language" -msgstr "" +msgstr "언어" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:67 #~ msgid "dots" @@ -6535,7 +6535,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:78 msgid "Use pseudo language" -msgstr "" +msgstr "의사언어를 사용하라" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:81 #~ msgid "Theme" @@ -6543,7 +6543,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:85 msgid "Color Mode" -msgstr "" +msgstr "컬러 모드" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:87 #~ msgid "Primary color" @@ -6551,39 +6551,39 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:96 msgid "Highlight color" -msgstr "" +msgstr "하이라이트 컬러" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:110 msgid "Example" -msgstr "" +msgstr "예" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:116 msgid "White color" -msgstr "" +msgstr "화이트 색상" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:139 msgid "Black color" -msgstr "" +msgstr "블랙 컬러" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:162 msgid "Border Radius" -msgstr "" +msgstr "테두리 반경" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:178 msgid "Loader" -msgstr "" +msgstr "짐을 싣는 사람" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:185 msgid "Bars" -msgstr "" +msgstr "바" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:186 msgid "Oval" -msgstr "" +msgstr "타원형" #: src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx:187 msgid "Dots" -msgstr "" +msgstr "도트" #: src/pages/Index/Settings/AccountSettings/useConfirm.tsx:93 #~ msgid "Reauthentication" @@ -6600,35 +6600,35 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:28 #: src/tables/ColumnRenderers.tsx:753 msgid "Currency" -msgstr "" +msgstr "통화" #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:33 msgid "Rate" -msgstr "" +msgstr "비율" #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:46 msgid "Exchange rates updated" -msgstr "" +msgstr "환율이 업데이트되었습니다." #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:53 msgid "Exchange rate update error" -msgstr "" +msgstr "환율 업데이트 오류" #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:63 msgid "Refresh currency exchange rates" -msgstr "" +msgstr "통화 환율 새로고침" #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:99 msgid "Last fetched" -msgstr "" +msgstr "마지막 가져온 시각" #: src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx:100 msgid "Base currency" -msgstr "" +msgstr "기본 통화" #: src/pages/Index/Settings/AdminCenter/EmailManagementPanel.tsx:13 msgid "Email Messages" -msgstr "" +msgstr "이메일 메시지" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:22 #~ msgid "Active Alerts" @@ -6640,27 +6640,27 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:36 msgid "System Status" -msgstr "" +msgstr "시스템 상태" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:47 msgid "Admin Center Information" -msgstr "" +msgstr "관리 센터 정보" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:53 msgid "The home panel (and the whole Admin Center) is a new feature starting with the new UI and was previously (before 1.0) not available." -msgstr "" +msgstr "홈 패널(및 전체 관리자 센터)은 새 UI부터 제공된 새로운 기능이며, 이전(1.0 이전)에는 사용할 수 없었습니다." #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:60 msgid "The admin center provides a centralized location for all administration functionality and is meant to replace all interaction with the (django) backend admin interface." -msgstr "" +msgstr "관리자 센터는 모든 관리 기능을 한곳에서 제공하며, 기존 (django) 백엔드 관리자 인터페이스와의 상호작용을 대체하도록 설계되었습니다." #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:67 msgid "Please open feature requests (after checking the tracker) for any existing backend admin functionality you are missing in this UI. The backend admin interface should be used carefully and seldom." -msgstr "" +msgstr "이 UI에 없는 기존 백엔드 관리자 기능이 필요하다면 먼저 이슈 추적기를 확인한 뒤 기능 요청을 등록하세요. 백엔드 관리자 인터페이스는 신중하게, 그리고 드물게 사용해야 합니다." #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:85 msgid "Quick Actions" -msgstr "" +msgstr "빠른 작업" #: src/pages/Index/Settings/AdminCenter/Index.tsx:107 #~ msgid "User Management" @@ -6668,11 +6668,11 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/Index.tsx:115 msgid "Home" -msgstr "" +msgstr "집" #: src/pages/Index/Settings/AdminCenter/Index.tsx:122 msgid "Users / Access" -msgstr "" +msgstr "사용자 / 액세스" #: src/pages/Index/Settings/AdminCenter/Index.tsx:127 #~ msgid "Templates" @@ -6680,27 +6680,27 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/Index.tsx:136 msgid "Data Import" -msgstr "" +msgstr "데이터 가져오기" #: src/pages/Index/Settings/AdminCenter/Index.tsx:142 msgid "Data Export" -msgstr "" +msgstr "데이터 내보내기" #: src/pages/Index/Settings/AdminCenter/Index.tsx:148 msgid "Barcode Scans" -msgstr "" +msgstr "바코드 스캔" #: src/pages/Index/Settings/AdminCenter/Index.tsx:154 msgid "Background Tasks" -msgstr "" +msgstr "백그라운드 작업" #: src/pages/Index/Settings/AdminCenter/Index.tsx:160 msgid "Error Reports" -msgstr "" +msgstr "오류 보고서" #: src/pages/Index/Settings/AdminCenter/Index.tsx:166 msgid "Currencies" -msgstr "" +msgstr "통화" #: src/pages/Index/Settings/AdminCenter/Index.tsx:170 #~ msgid "Location types" @@ -6708,12 +6708,12 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/Index.tsx:183 msgid "Custom States" -msgstr "" +msgstr "사용자 지정 상태" #: src/pages/Index/Settings/AdminCenter/Index.tsx:189 #: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:57 msgid "Custom Units" -msgstr "" +msgstr "사용자 지정 단위" #: src/pages/Index/Settings/AdminCenter/Index.tsx:195 #: src/pages/part/CategoryDetail.tsx:313 @@ -6723,11 +6723,11 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/Index.tsx:202 #: src/pages/part/CategoryDetail.tsx:329 msgid "Category Parameters" -msgstr "" +msgstr "카테고리 파라미터" #: src/pages/Index/Settings/AdminCenter/Index.tsx:221 msgid "Location Types" -msgstr "" +msgstr "위치 유형" #: src/pages/Index/Settings/AdminCenter/Index.tsx:226 #~ msgid "Add a new user" @@ -6737,33 +6737,33 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:52 #: src/tables/machine/MachineTypeTable.tsx:323 msgid "Machines" -msgstr "" +msgstr "장비" #: src/pages/Index/Settings/AdminCenter/Index.tsx:247 msgid "Operations" -msgstr "" +msgstr "운영" #: src/pages/Index/Settings/AdminCenter/Index.tsx:259 msgid "Data Management" -msgstr "" +msgstr "데이터 관리" #: src/pages/Index/Settings/AdminCenter/Index.tsx:270 #: src/pages/Index/Settings/SystemSettings.tsx:178 #: src/pages/Index/Settings/UserSettings.tsx:119 msgid "Reporting" -msgstr "" +msgstr "보고" #: src/pages/Index/Settings/AdminCenter/Index.tsx:275 msgid "PLM" -msgstr "" +msgstr "PLM" #: src/pages/Index/Settings/AdminCenter/Index.tsx:285 msgid "Extend / Integrate" -msgstr "" +msgstr "확장 / 연동" #: src/pages/Index/Settings/AdminCenter/Index.tsx:299 msgid "Advanced Options" -msgstr "" +msgstr "고급 옵션" #: src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx:40 #~ msgid "Generated Labels" @@ -6779,7 +6779,7 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:60 msgid "Machine Drivers" -msgstr "" +msgstr "장비 드라이버" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:62 #~ msgid "There are no machine registry errors." @@ -6787,37 +6787,37 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:68 msgid "Machine Types" -msgstr "" +msgstr "장비 유형" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:76 msgid "Machine Errors" -msgstr "" +msgstr "장비 오류" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:89 msgid "Registry Registry Errors" -msgstr "" +msgstr "레지스트리 오류" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:92 msgid "There are machine registry errors" -msgstr "" +msgstr "장비 레지스트리 오류가 있습니다" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:98 msgid "Machine Registry Errors" -msgstr "" +msgstr "장비 레지스트리 오류" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:101 msgid "There are no machine registry errors" -msgstr "" +msgstr "장비 레지스트리 오류가 없습니다" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:122 #: src/tables/machine/MachineListTable.tsx:502 msgid "Machine Settings" -msgstr "" +msgstr "장비 설정" #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:33 #: src/tables/settings/UserTable.tsx:195 msgid "Info" -msgstr "" +msgstr "정보" #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:33 #~ msgid "Plugin Error Stack" @@ -6825,7 +6825,7 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:37 msgid "External plugins are not enabled for this InvenTree installation." -msgstr "" +msgstr "이 InvenTree 설치에는 외부 플러그인이 활성화되어 있지 않습니다." #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:45 #~ msgid "Warning" @@ -6837,23 +6837,23 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx:76 msgid "Plugin Errors" -msgstr "" +msgstr "플러그인 오류" #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:16 msgid "Page Size" -msgstr "" +msgstr "페이지 크기" #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:19 msgid "Landscape" -msgstr "" +msgstr "풍경" #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25 msgid "Merge" -msgstr "" +msgstr "병합" #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31 msgid "Attach to Model" -msgstr "" +msgstr "모델에 연결" #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:55 #~ msgid "Generated Reports" @@ -6865,7 +6865,7 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:32 msgid "Background worker running" -msgstr "" +msgstr "백그라운드 워커 실행 중" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:35 #~ msgid "Background Worker Not Running" @@ -6873,26 +6873,26 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:38 msgid "Background worker not running" -msgstr "" +msgstr "백그라운드 워커가 실행 중이 아님" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:42 msgid "The background task manager service is not running. Contact your system administrator." -msgstr "" +msgstr "백그라운드 작업 관리자 서비스가 실행되고 있지 않습니다. 시스템 관리자에게 문의하세요." #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:49 #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:58 msgid "Pending Tasks" -msgstr "" +msgstr "보류 중인 작업" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:50 #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:66 msgid "Scheduled Tasks" -msgstr "" +msgstr "예약된 작업" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:51 #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:74 msgid "Failed Tasks" -msgstr "" +msgstr "실패한 작업" #: src/pages/Index/Settings/AdminCenter/TemplateManagementPanel.tsx:67 #~ msgid "Stock item" @@ -6928,19 +6928,19 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:21 msgid "Alias" -msgstr "" +msgstr "별명" #: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:22 msgid "Dimensionless" -msgstr "" +msgstr "무차원" #: src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx:65 msgid "All units" -msgstr "" +msgstr "모든 단위" #: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:31 msgid "Tokens" -msgstr "" +msgstr "토큰" #: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:32 #~ msgid "Select settings relevant for user lifecycle. More available in" @@ -6952,15 +6952,15 @@ msgstr "" #: src/pages/Index/Settings/PluginSettingsGroup.tsx:99 msgid "The settings below are specific to each available plugin" -msgstr "" +msgstr "아래 설정은 각 사용 가능한 플러그인에 따라 다릅니다" #: src/pages/Index/Settings/SystemSettings.tsx:80 msgid "Authentication" -msgstr "" +msgstr "입증" #: src/pages/Index/Settings/SystemSettings.tsx:106 msgid "Barcodes" -msgstr "" +msgstr "바코드" #: src/pages/Index/Settings/SystemSettings.tsx:118 #~ msgid "Physical Units" @@ -6973,7 +6973,7 @@ msgstr "" #: src/pages/Index/Settings/SystemSettings.tsx:130 #: src/pages/Index/Settings/UserSettings.tsx:113 msgid "The settings below are specific to each available notification method" -msgstr "" +msgstr "아래 설정은 각 사용 가능한 알림 방식에 따라 다릅니다" #: src/pages/Index/Settings/SystemSettings.tsx:135 #~ msgid "Exchange Rates" @@ -6981,21 +6981,21 @@ msgstr "" #: src/pages/Index/Settings/SystemSettings.tsx:136 msgid "Pricing" -msgstr "" +msgstr "가격" #: src/pages/Index/Settings/SystemSettings.tsx:172 msgid "Labels" -msgstr "" +msgstr "라벨" #: src/pages/Index/Settings/SystemSettings.tsx:262 msgid "Part Stocktake" -msgstr "" +msgstr "부품 재고 실사" #: src/pages/Index/Settings/SystemSettings.tsx:273 #: src/pages/part/PartStockHistoryDetail.tsx:296 #: src/pages/stock/StockDetail.tsx:532 msgid "Stock Tracking" -msgstr "" +msgstr "재고 추적" #: src/pages/Index/Settings/SystemSettings.tsx:317 #~ msgid "Switch to User Setting" @@ -7003,15 +7003,15 @@ msgstr "" #: src/pages/Index/Settings/UserSettings.tsx:41 msgid "Account" -msgstr "" +msgstr "계정" #: src/pages/Index/Settings/UserSettings.tsx:47 msgid "Security" -msgstr "" +msgstr "보안" #: src/pages/Index/Settings/UserSettings.tsx:53 msgid "Display Options" -msgstr "" +msgstr "표시 옵션" #: src/pages/Index/Settings/UserSettings.tsx:159 #~ msgid "Switch to System Setting" @@ -7035,11 +7035,11 @@ msgstr "" #: src/pages/Notifications.tsx:83 msgid "History" -msgstr "" +msgstr "이력" #: src/pages/Notifications.tsx:91 msgid "Mark as unread" -msgstr "" +msgstr "읽지 않은 상태로 표시" #: src/pages/Notifications.tsx:146 #~ msgid "Delete notifications" @@ -7047,15 +7047,15 @@ msgstr "" #: src/pages/build/BuildDetail.tsx:70 msgid "No Required Items" -msgstr "" +msgstr "필요한 항목 없음" #: src/pages/build/BuildDetail.tsx:72 msgid "This build order does not have any required items." -msgstr "" +msgstr "이 생산 주문에는 필요한 항목이 없습니다." #: src/pages/build/BuildDetail.tsx:73 msgid "The assembled part may not have a Bill of Materials (BOM) defined, or the BOM is empty." -msgstr "" +msgstr "조립된 부품에 BOM(재료 명세서)이 정의되어 있지 않거나 BOM이 비어 있을 수 있습니다." #: src/pages/build/BuildDetail.tsx:80 #~ msgid "Build Status" @@ -7100,7 +7100,7 @@ msgstr "" #: src/tables/build/BuildOrderTable.tsx:87 #: src/tables/stock/StockItemTable.tsx:66 msgid "Revision" -msgstr "" +msgstr "개정" #: src/pages/build/BuildDetail.tsx:247 #: src/pages/purchasing/PurchaseOrderDetail.tsx:175 @@ -7108,7 +7108,7 @@ msgstr "" #: src/pages/sales/SalesOrderDetail.tsx:132 #: src/pages/stock/StockDetail.tsx:176 msgid "Custom Status" -msgstr "" +msgstr "사용자 지정 상태" #: src/pages/build/BuildDetail.tsx:256 #: src/pages/build/BuildDetail.tsx:750 @@ -7118,7 +7118,7 @@ msgstr "" #: src/tables/build/BuildOrderTable.tsx:188 #: src/tables/stock/StockLocationTable.tsx:48 msgid "External" -msgstr "" +msgstr "외부" #: src/pages/build/BuildDetail.tsx:263 #: src/pages/purchasing/PurchaseOrderDetail.tsx:142 @@ -7128,33 +7128,33 @@ msgstr "" #: src/tables/build/BuildAllocatedStockTable.tsx:110 #: src/tables/build/BuildLineTable.tsx:354 msgid "Reference" -msgstr "" +msgstr "참조" #: src/pages/build/BuildDetail.tsx:277 msgid "Parent Build" -msgstr "" +msgstr "상위 생산" #: src/pages/build/BuildDetail.tsx:288 msgid "Build Quantity" -msgstr "" +msgstr "생산 수량" #: src/pages/build/BuildDetail.tsx:294 #: src/pages/part/PartDetail.tsx:575 #: src/tables/bom/BomTable.tsx:359 #: src/tables/bom/BomTable.tsx:401 msgid "Can Build" -msgstr "" +msgstr "생산 가능" #: src/pages/build/BuildDetail.tsx:303 #: src/pages/build/BuildDetail.tsx:494 msgid "Completed Outputs" -msgstr "" +msgstr "완료된 생산 결과물" #: src/pages/build/BuildDetail.tsx:320 #: src/tables/Filter.tsx:441 #: src/tables/build/BuildOrderTable.tsx:147 msgid "Issued By" -msgstr "" +msgstr "발행자" #: src/pages/build/BuildDetail.tsx:328 #: src/pages/part/PartDetail.tsx:668 @@ -7164,11 +7164,11 @@ msgstr "" #: src/tables/ColumnRenderers.tsx:668 #: src/tables/Filter.tsx:379 msgid "Responsible" -msgstr "" +msgstr "책임이 있는" #: src/pages/build/BuildDetail.tsx:346 msgid "Any location" -msgstr "" +msgstr "모든 위치" #: src/pages/build/BuildDetail.tsx:347 #: src/pages/part/PartDetail.tsx:727 @@ -7177,7 +7177,7 @@ msgstr "" #: src/pages/build/BuildDetail.tsx:353 msgid "Destination Location" -msgstr "" +msgstr "목적지 위치" #: src/pages/build/BuildDetail.tsx:368 #~ msgid "Reporting Actions" @@ -7187,7 +7187,7 @@ msgstr "" #: src/tables/settings/ApiTokenTable.tsx:98 #: src/tables/settings/PendingTasksTable.tsx:41 msgid "Created" -msgstr "" +msgstr "생성됨" #: src/pages/build/BuildDetail.tsx:374 #~ msgid "Print build report" @@ -7199,7 +7199,7 @@ msgstr "" #: src/pages/sales/SalesOrderDetail.tsx:258 #: src/tables/ColumnRenderers.tsx:691 msgid "Start Date" -msgstr "" +msgstr "시작일" #: src/pages/build/BuildDetail.tsx:385 #: src/pages/purchasing/PurchaseOrderDetail.tsx:295 @@ -7210,44 +7210,44 @@ msgstr "" #: src/tables/sales/ReturnOrderLineItemTable.tsx:153 #: src/tables/sales/SalesOrderLineItemTable.tsx:130 msgid "Target Date" -msgstr "" +msgstr "목표 날짜" #: src/pages/build/BuildDetail.tsx:393 #: src/tables/build/BuildOrderTable.tsx:97 #: src/tables/sales/SalesOrderLineItemTable.tsx:345 msgid "Completed" -msgstr "" +msgstr "완전한" #: src/pages/build/BuildDetail.tsx:429 msgid "Build Details" -msgstr "" +msgstr "생산 상세 정보" #: src/pages/build/BuildDetail.tsx:435 msgid "Required Parts" -msgstr "" +msgstr "필요한 부품" #: src/pages/build/BuildDetail.tsx:447 #: src/pages/sales/SalesOrderDetail.tsx:417 #: src/pages/sales/SalesOrderShipmentDetail.tsx:258 #: src/tables/part/PartSalesAllocationsTable.tsx:71 msgid "Allocated Stock" -msgstr "" +msgstr "할당된 재고" #: src/pages/build/BuildDetail.tsx:463 msgid "Consumed Stock" -msgstr "" +msgstr "소모된 재고" #: src/pages/build/BuildDetail.tsx:481 msgid "Incomplete Outputs" -msgstr "" +msgstr "미완료 생산 결과물" #: src/pages/build/BuildDetail.tsx:509 msgid "External Orders" -msgstr "" +msgstr "외부 주문" #: src/pages/build/BuildDetail.tsx:523 msgid "Child Build Orders" -msgstr "" +msgstr "하위 생산 주문" #: src/pages/build/BuildDetail.tsx:534 #: src/pages/part/PartDetail.tsx:903 @@ -7255,135 +7255,135 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:704 #: src/tables/stock/StockItemTestResultTable.tsx:173 msgid "Test Results" -msgstr "" +msgstr "테스트 결과" #: src/pages/build/BuildDetail.tsx:577 msgid "Edit Build Order" -msgstr "" +msgstr "생산 주문 편집" #: src/pages/build/BuildDetail.tsx:599 #: src/tables/build/BuildOrderTable.tsx:212 #: src/tables/build/BuildOrderTable.tsx:229 msgid "Add Build Order" -msgstr "" +msgstr "생산 주문 추가" #: src/pages/build/BuildDetail.tsx:609 msgid "Cancel Build Order" -msgstr "" +msgstr "생산 주문 취소" #: src/pages/build/BuildDetail.tsx:611 #: src/pages/purchasing/PurchaseOrderDetail.tsx:431 #: src/pages/sales/ReturnOrderDetail.tsx:442 #: src/pages/sales/SalesOrderDetail.tsx:469 msgid "Order cancelled" -msgstr "" +msgstr "주문이 취소되었습니다." #: src/pages/build/BuildDetail.tsx:612 #: src/pages/purchasing/PurchaseOrderDetail.tsx:430 #: src/pages/sales/ReturnOrderDetail.tsx:441 #: src/pages/sales/SalesOrderDetail.tsx:468 msgid "Cancel this order" -msgstr "" +msgstr "이 주문 취소" #: src/pages/build/BuildDetail.tsx:621 msgid "Hold Build Order" -msgstr "" +msgstr "생산 주문 보류" #: src/pages/build/BuildDetail.tsx:623 #: src/pages/purchasing/PurchaseOrderDetail.tsx:438 #: src/pages/sales/ReturnOrderDetail.tsx:449 #: src/pages/sales/SalesOrderDetail.tsx:476 msgid "Place this order on hold" -msgstr "" +msgstr "이 주문을 보류 상태로 전환" #: src/pages/build/BuildDetail.tsx:624 #: src/pages/purchasing/PurchaseOrderDetail.tsx:439 #: src/pages/sales/ReturnOrderDetail.tsx:450 #: src/pages/sales/SalesOrderDetail.tsx:477 msgid "Order placed on hold" -msgstr "" +msgstr "주문이 보류되었습니다." #: src/pages/build/BuildDetail.tsx:629 msgid "Issue Build Order" -msgstr "" +msgstr "생산 주문 발행" #: src/pages/build/BuildDetail.tsx:631 #: src/pages/purchasing/PurchaseOrderDetail.tsx:422 #: src/pages/sales/ReturnOrderDetail.tsx:433 #: src/pages/sales/SalesOrderDetail.tsx:460 msgid "Issue this order" -msgstr "" +msgstr "이 주문을 발행하세요" #: src/pages/build/BuildDetail.tsx:632 #: src/pages/purchasing/PurchaseOrderDetail.tsx:423 #: src/pages/sales/ReturnOrderDetail.tsx:434 #: src/pages/sales/SalesOrderDetail.tsx:461 msgid "Order issued" -msgstr "" +msgstr "주문이 발행되었습니다." #: src/pages/build/BuildDetail.tsx:651 msgid "Complete Build Order" -msgstr "" +msgstr "생산 주문 완료" #: src/pages/build/BuildDetail.tsx:657 #: src/pages/purchasing/PurchaseOrderDetail.tsx:451 #: src/pages/sales/ReturnOrderDetail.tsx:457 #: src/pages/sales/SalesOrderDetail.tsx:495 msgid "Mark this order as complete" -msgstr "" +msgstr "이 주문을 완료로 표시" #: src/pages/build/BuildDetail.tsx:660 #: src/pages/purchasing/PurchaseOrderDetail.tsx:445 #: src/pages/sales/ReturnOrderDetail.tsx:458 #: src/pages/sales/SalesOrderDetail.tsx:496 msgid "Order completed" -msgstr "" +msgstr "주문이 완료되었습니다." #: src/pages/build/BuildDetail.tsx:687 #: src/pages/purchasing/PurchaseOrderDetail.tsx:474 #: src/pages/sales/ReturnOrderDetail.tsx:485 #: src/pages/sales/SalesOrderDetail.tsx:531 msgid "Issue Order" -msgstr "" +msgstr "주문 발행" #: src/pages/build/BuildDetail.tsx:694 #: src/pages/purchasing/PurchaseOrderDetail.tsx:481 #: src/pages/sales/ReturnOrderDetail.tsx:492 #: src/pages/sales/SalesOrderDetail.tsx:545 msgid "Complete Order" -msgstr "" +msgstr "주문 완료" #: src/pages/build/BuildDetail.tsx:713 msgid "Build Order Actions" -msgstr "" +msgstr "생산 주문 작업" #: src/pages/build/BuildDetail.tsx:718 #: src/pages/purchasing/PurchaseOrderDetail.tsx:504 #: src/pages/sales/ReturnOrderDetail.tsx:515 #: src/pages/sales/SalesOrderDetail.tsx:569 msgid "Edit order" -msgstr "" +msgstr "주문 수정" #: src/pages/build/BuildDetail.tsx:722 #: src/pages/purchasing/PurchaseOrderDetail.tsx:512 #: src/pages/sales/ReturnOrderDetail.tsx:521 #: src/pages/sales/SalesOrderDetail.tsx:574 msgid "Duplicate order" -msgstr "" +msgstr "중복 주문" #: src/pages/build/BuildDetail.tsx:726 #: src/pages/purchasing/PurchaseOrderDetail.tsx:515 #: src/pages/sales/ReturnOrderDetail.tsx:526 #: src/pages/sales/SalesOrderDetail.tsx:577 msgid "Hold order" -msgstr "" +msgstr "주문 보류" #: src/pages/build/BuildDetail.tsx:731 #: src/pages/purchasing/PurchaseOrderDetail.tsx:520 #: src/pages/sales/ReturnOrderDetail.tsx:531 #: src/pages/sales/SalesOrderDetail.tsx:582 msgid "Cancel order" -msgstr "" +msgstr "주문 취소" #: src/pages/build/BuildDetail.tsx:769 #: src/pages/stock/StockDetail.tsx:344 @@ -7392,7 +7392,7 @@ msgstr "" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:153 #: src/tables/stock/StockTrackingTable.tsx:141 msgid "Build Order" -msgstr "" +msgstr "생산 주문" #: src/pages/build/BuildIndex.tsx:23 #~ msgid "Build order created" @@ -7401,7 +7401,7 @@ msgstr "" #: src/pages/build/BuildIndex.tsx:35 #: src/tables/build/BuildOrderTable.tsx:189 msgid "Show external build orders" -msgstr "" +msgstr "외부 생산 주문 표시" #: src/pages/build/BuildIndex.tsx:39 #~ msgid "New Build Order" @@ -7419,14 +7419,14 @@ msgstr "" #: src/pages/sales/SalesIndex.tsx:140 #: src/pages/stock/LocationDetail.tsx:193 msgid "Table View" -msgstr "" +msgstr "테이블 보기" #: src/pages/build/BuildIndex.tsx:80 #: src/pages/purchasing/PurchasingIndex.tsx:80 #: src/pages/sales/SalesIndex.tsx:67 #: src/pages/sales/SalesIndex.tsx:113 msgid "Calendar View" -msgstr "" +msgstr "캘린더 보기" #: src/pages/build/BuildIndex.tsx:86 #: src/pages/part/CategoryDetail.tsx:306 @@ -7440,23 +7440,23 @@ msgstr "" #: src/pages/sales/SalesIndex.tsx:152 #: src/pages/stock/LocationDetail.tsx:199 msgid "Parametric View" -msgstr "" +msgstr "파라미터 보기" #: src/pages/company/CompanyDetail.tsx:108 msgid "Phone Number" -msgstr "" +msgstr "전화 번호" #: src/pages/company/CompanyDetail.tsx:115 msgid "Email Address" -msgstr "" +msgstr "이메일 주소" #: src/pages/company/CompanyDetail.tsx:122 msgid "Tax ID" -msgstr "" +msgstr "세금 ID" #: src/pages/company/CompanyDetail.tsx:132 msgid "Default Currency" -msgstr "" +msgstr "기본 통화" #: src/pages/company/CompanyDetail.tsx:143 #: src/pages/company/ManufacturerDetail.tsx:8 @@ -7467,7 +7467,7 @@ msgstr "" #: src/tables/company/CompanyTable.tsx:111 #: src/tables/purchasing/SupplierPartTable.tsx:113 msgid "Manufacturer" -msgstr "" +msgstr "제조업체" #: src/pages/company/CompanyDetail.tsx:149 #: src/pages/company/CustomerDetail.tsx:8 @@ -7484,7 +7484,7 @@ msgstr "" #: src/tables/sales/SalesOrderTable.tsx:148 #: src/tables/stock/StockTrackingTable.tsx:185 msgid "Customer" -msgstr "" +msgstr "고객" #: src/pages/company/CompanyDetail.tsx:175 #~ msgid "Edit company" @@ -7492,11 +7492,11 @@ msgstr "" #: src/pages/company/CompanyDetail.tsx:182 msgid "Company Details" -msgstr "" +msgstr "회사 상세 정보" #: src/pages/company/CompanyDetail.tsx:188 msgid "Supplied Parts" -msgstr "" +msgstr "공급 부품" #: src/pages/company/CompanyDetail.tsx:189 #~ msgid "Delete company" @@ -7504,79 +7504,79 @@ msgstr "" #: src/pages/company/CompanyDetail.tsx:195 msgid "Manufactured Parts" -msgstr "" +msgstr "제조된 부품" #: src/pages/company/CompanyDetail.tsx:242 msgid "Assigned Stock" -msgstr "" +msgstr "할당된 재고" #: src/pages/company/CompanyDetail.tsx:289 #: src/tables/company/CompanyTable.tsx:92 msgid "Edit Company" -msgstr "" +msgstr "회사 편집" #: src/pages/company/CompanyDetail.tsx:297 msgid "Delete Company" -msgstr "" +msgstr "회사 삭제" #: src/pages/company/CompanyDetail.tsx:312 msgid "Company Actions" -msgstr "" +msgstr "회사의 조치" #: src/pages/company/ManufacturerPartDetail.tsx:77 #: src/pages/company/SupplierPartDetail.tsx:90 msgid "Internal Part" -msgstr "" +msgstr "내부 부품" #: src/pages/company/ManufacturerPartDetail.tsx:111 msgid "Manufacturer Part Number" -msgstr "" +msgstr "제조업체 부품 번호" #: src/pages/company/ManufacturerPartDetail.tsx:128 #: src/pages/company/SupplierPartDetail.tsx:114 msgid "External Link" -msgstr "" +msgstr "외부링크" #: src/pages/company/ManufacturerPartDetail.tsx:147 #: src/pages/company/SupplierPartDetail.tsx:233 #: src/pages/part/PartDetail.tsx:764 msgid "Part Details" -msgstr "" +msgstr "부품 상세 정보" #: src/pages/company/ManufacturerPartDetail.tsx:150 msgid "Manufacturer Details" -msgstr "" +msgstr "제조사 상세 정보" #: src/pages/company/ManufacturerPartDetail.tsx:159 msgid "Manufacturer Part Details" -msgstr "" +msgstr "제조사 부품 상세 정보" #: src/pages/company/ManufacturerPartDetail.tsx:165 #: src/pages/company/SupplierPartDetail.tsx:253 #: src/pages/purchasing/PurchaseOrderDetail.tsx:391 msgid "Received Stock" -msgstr "" +msgstr "입고된 재고" #: src/pages/company/ManufacturerPartDetail.tsx:212 #: src/tables/purchasing/ManufacturerPartTable.tsx:128 msgid "Edit Manufacturer Part" -msgstr "" +msgstr "제조업체 부품 편집" #: src/pages/company/ManufacturerPartDetail.tsx:219 #: src/tables/purchasing/ManufacturerPartTable.tsx:115 #: src/tables/purchasing/ManufacturerPartTable.tsx:135 #: src/tables/purchasing/ManufacturerPartTable.tsx:176 msgid "Add Manufacturer Part" -msgstr "" +msgstr "제조업체 부품 추가" #: src/pages/company/ManufacturerPartDetail.tsx:231 #: src/tables/purchasing/ManufacturerPartTable.tsx:146 msgid "Delete Manufacturer Part" -msgstr "" +msgstr "제조업체 부품 삭제" #: src/pages/company/ManufacturerPartDetail.tsx:246 msgid "Manufacturer Part Actions" -msgstr "" +msgstr "제조업체 부품 작업" #: src/pages/company/ManufacturerPartDetail.tsx:281 #~ msgid "ManufacturerPart" @@ -7585,7 +7585,7 @@ msgstr "" #: src/pages/company/SupplierPartDetail.tsx:105 #: src/tables/part/RelatedPartTable.tsx:83 msgid "Part Description" -msgstr "" +msgstr "부품 설명" #: src/pages/company/SupplierPartDetail.tsx:180 #: src/tables/part/PartPurchaseOrdersTable.tsx:73 @@ -7593,97 +7593,97 @@ msgstr "" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:229 #: src/tables/purchasing/SupplierPartTable.tsx:169 msgid "Pack Quantity" -msgstr "" +msgstr "팩 수량" #: src/pages/company/SupplierPartDetail.tsx:205 msgid "Supplier Availability" -msgstr "" +msgstr "공급업체 재고 현황" #: src/pages/company/SupplierPartDetail.tsx:213 msgid "Availability Updated" -msgstr "" +msgstr "재고 현황이 업데이트되었습니다." #: src/pages/company/SupplierPartDetail.tsx:238 msgid "Availability" -msgstr "" +msgstr "재고 현황" #: src/pages/company/SupplierPartDetail.tsx:247 msgid "Supplier Part Details" -msgstr "" +msgstr "공급업체 부품 상세 정보" #: src/pages/company/SupplierPartDetail.tsx:280 #: src/pages/part/PartPricingPanel.tsx:113 #: src/pages/part/pricing/PricingOverviewPanel.tsx:239 msgid "Supplier Pricing" -msgstr "" +msgstr "공급업체 가격" #: src/pages/company/SupplierPartDetail.tsx:314 msgid "Supplier Part Actions" -msgstr "" +msgstr "협력업체 부품 작업" #: src/pages/company/SupplierPartDetail.tsx:338 #: src/tables/purchasing/SupplierPartTable.tsx:283 msgid "Edit Supplier Part" -msgstr "" +msgstr "협력업체 부품 편집" #: src/pages/company/SupplierPartDetail.tsx:346 #: src/tables/purchasing/SupplierPartTable.tsx:308 msgid "Delete Supplier Part" -msgstr "" +msgstr "협력업체 부품 삭제" #: src/pages/company/SupplierPartDetail.tsx:354 #: src/tables/purchasing/SupplierPartTable.tsx:203 #: src/tables/purchasing/SupplierPartTable.tsx:292 msgid "Add Supplier Part" -msgstr "" +msgstr "협력업체 부품 추가" #: src/pages/company/SupplierPartDetail.tsx:394 #: src/pages/part/PartDetail.tsx:1000 msgid "No Stock" -msgstr "" +msgstr "재고 없음" #: src/pages/core/CoreIndex.tsx:46 #: src/pages/core/GroupDetail.tsx:81 #: src/pages/core/UserDetail.tsx:224 msgid "System Overview" -msgstr "" +msgstr "시스템 개요" #: src/pages/core/GroupDetail.tsx:45 msgid "Group Name" -msgstr "" +msgstr "그룹 이름" #: src/pages/core/GroupDetail.tsx:52 #: src/pages/core/GroupDetail.tsx:67 #: src/tables/settings/GroupTable.tsx:85 msgid "Group Details" -msgstr "" +msgstr "그룹 상세 정보" #: src/pages/core/GroupDetail.tsx:55 #: src/tables/settings/GroupTable.tsx:112 msgid "Group Roles" -msgstr "" +msgstr "그룹 역할" #: src/pages/core/UserDetail.tsx:175 #: src/tables/ColumnRenderers.tsx:622 msgid "User Information" -msgstr "" +msgstr "사용자 정보" #: src/pages/core/UserDetail.tsx:176 msgid "User Permissions" -msgstr "" +msgstr "사용자 권한" #: src/pages/core/UserDetail.tsx:178 msgid "User Profile" -msgstr "" +msgstr "사용자 프로필" #: src/pages/core/UserDetail.tsx:188 #: src/tables/settings/UserTable.tsx:164 msgid "User Details" -msgstr "" +msgstr "사용자 상세 정보" #: src/pages/core/UserDetail.tsx:206 msgid "Normal user" -msgstr "" +msgstr "일반 사용자" #: src/pages/core/UserDetail.tsx:206 #~ msgid "Basic user" @@ -7694,100 +7694,100 @@ msgstr "" #: src/tables/settings/ErrorTable.tsx:63 #: src/tables/settings/ErrorTable.tsx:108 msgid "Path" -msgstr "" +msgstr "길" #: src/pages/part/CategoryDetail.tsx:119 msgid "Parent Category" -msgstr "" +msgstr "상위 카테고리" #: src/pages/part/CategoryDetail.tsx:142 #: src/pages/part/CategoryDetail.tsx:279 msgid "Subcategories" -msgstr "" +msgstr "하위 카테고리" #: src/pages/part/CategoryDetail.tsx:149 #: src/pages/stock/LocationDetail.tsx:143 #: src/tables/part/PartCategoryTable.tsx:91 #: src/tables/stock/StockLocationTable.tsx:43 msgid "Structural" -msgstr "" +msgstr "구조용" #: src/pages/part/CategoryDetail.tsx:155 msgid "Parent default location" -msgstr "" +msgstr "상위 기본 위치" #: src/pages/part/CategoryDetail.tsx:162 msgid "Default location" -msgstr "" +msgstr "기본 위치" #: src/pages/part/CategoryDetail.tsx:173 msgid "Top level part category" -msgstr "" +msgstr "최상위 부품 범주" #: src/pages/part/CategoryDetail.tsx:183 #: src/pages/part/CategoryDetail.tsx:251 #: src/tables/part/PartCategoryTable.tsx:125 msgid "Edit Part Category" -msgstr "" +msgstr "부품 카테고리 편집" #: src/pages/part/CategoryDetail.tsx:192 msgid "Move items to parent category" -msgstr "" +msgstr "항목을 상위 카테고리로 이동" #: src/pages/part/CategoryDetail.tsx:196 #: src/pages/stock/LocationDetail.tsx:262 msgid "Delete items" -msgstr "" +msgstr "항목 삭제" #: src/pages/part/CategoryDetail.tsx:204 #: src/pages/part/CategoryDetail.tsx:256 msgid "Delete Part Category" -msgstr "" +msgstr "부품 카테고리 삭제" #: src/pages/part/CategoryDetail.tsx:207 msgid "Parts Action" -msgstr "" +msgstr "부품 작업" #: src/pages/part/CategoryDetail.tsx:208 msgid "Action for parts in this category" -msgstr "" +msgstr "이 카테고리의 부품에 대한 작업" #: src/pages/part/CategoryDetail.tsx:214 msgid "Child Categories Action" -msgstr "" +msgstr "어린이 카테고리 액션" #: src/pages/part/CategoryDetail.tsx:215 msgid "Action for child categories in this category" -msgstr "" +msgstr "이 카테고리의 하위 카테고리에 대한 조치" #: src/pages/part/CategoryDetail.tsx:247 #: src/tables/part/PartCategoryTable.tsx:146 msgid "Category Actions" -msgstr "" +msgstr "카테고리 조치" #: src/pages/part/CategoryDetail.tsx:273 msgid "Category Details" -msgstr "" +msgstr "카테고리 상세 정보" #: src/pages/part/PartAllocationPanel.tsx:21 #: src/pages/stock/StockDetail.tsx:555 #: src/tables/part/PartTable.tsx:122 msgid "Build Order Allocations" -msgstr "" +msgstr "생산 주문 할당" #: src/pages/part/PartAllocationPanel.tsx:31 #: src/pages/stock/StockDetail.tsx:570 #: src/tables/part/PartTable.tsx:130 msgid "Sales Order Allocations" -msgstr "" +msgstr "판매 주문 할당" #: src/pages/part/PartDetail.tsx:177 msgid "Validating BOM" -msgstr "" +msgstr "BOM 검증" #: src/pages/part/PartDetail.tsx:178 msgid "BOM validated" -msgstr "" +msgstr "BOM 검증됨" #: src/pages/part/PartDetail.tsx:187 #~ msgid "Bill of materials scheduled for validation" @@ -7797,40 +7797,40 @@ msgstr "" #: src/pages/part/PartDetail.tsx:196 #: src/pages/part/PartDetail.tsx:245 msgid "Validate BOM" -msgstr "" +msgstr "BOM 검증" #: src/pages/part/PartDetail.tsx:197 msgid "Do you want to validate the bill of materials for this assembly?" -msgstr "" +msgstr "이 조립품의 BOM을 검증하시겠습니까?" #: src/pages/part/PartDetail.tsx:223 msgid "BOM Validated" -msgstr "" +msgstr "BOM 검증 완료" #: src/pages/part/PartDetail.tsx:224 msgid "The Bill of Materials for this part has been validated" -msgstr "" +msgstr "이 부품의 BOM이 검증되었습니다" #: src/pages/part/PartDetail.tsx:228 #: src/pages/part/PartDetail.tsx:233 msgid "BOM Not Validated" -msgstr "" +msgstr "BOM이 검증되지 않음" #: src/pages/part/PartDetail.tsx:229 msgid "The Bill of Materials for this part has previously been checked, but requires revalidation" -msgstr "" +msgstr "이 부품의 BOM은 이전에 확인되었지만 다시 검증해야 합니다" #: src/pages/part/PartDetail.tsx:234 msgid "The Bill of Materials for this part has not yet been validated" -msgstr "" +msgstr "이 부품의 BOM은 아직 검증되지 않았습니다" #: src/pages/part/PartDetail.tsx:265 msgid "Validated On" -msgstr "" +msgstr "검증 일시" #: src/pages/part/PartDetail.tsx:270 msgid "Validated By" -msgstr "" +msgstr "검증자" #: src/pages/part/PartDetail.tsx:286 #~ msgid "Variant Stock" @@ -7850,30 +7850,30 @@ msgstr "" #: src/pages/part/PartDetail.tsx:441 msgid "Variant of" -msgstr "" +msgstr "다음의 변형" #: src/pages/part/PartDetail.tsx:449 msgid "Revision of" -msgstr "" +msgstr "다음의 리비전" #: src/pages/part/PartDetail.tsx:470 #: src/tables/ColumnRenderers.tsx:390 #: src/tables/ColumnRenderers.tsx:399 msgid "Default Location" -msgstr "" +msgstr "기본 위치" #: src/pages/part/PartDetail.tsx:477 msgid "Category Default Location" -msgstr "" +msgstr "범주 기본 위치" #: src/pages/part/PartDetail.tsx:484 msgid "Units" -msgstr "" +msgstr "단위" #: src/pages/part/PartDetail.tsx:491 #: src/tables/settings/PendingTasksTable.tsx:51 msgid "Keywords" -msgstr "" +msgstr "키워드" #: src/pages/part/PartDetail.tsx:510 #~ msgid "Stocktake By" @@ -7885,49 +7885,49 @@ msgstr "" #: src/tables/part/PartTable.tsx:316 #: src/tables/sales/SalesOrderLineItemTable.tsx:134 msgid "Available Stock" -msgstr "" +msgstr "사용 가능한 재고" #: src/pages/part/PartDetail.tsx:525 #: src/tables/bom/BomTable.tsx:335 #: src/tables/build/BuildLineTable.tsx:273 #: src/tables/sales/SalesOrderLineItemTable.tsx:176 msgid "On order" -msgstr "" +msgstr "주문시" #: src/pages/part/PartDetail.tsx:532 msgid "Required for Orders" -msgstr "" +msgstr "주문에 필수" #: src/pages/part/PartDetail.tsx:543 msgid "Allocated to Build Orders" -msgstr "" +msgstr "생산 주문에 할당됨" #: src/pages/part/PartDetail.tsx:555 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "판매 주문에 할당됨" #: src/pages/part/PartDetail.tsx:582 msgid "Minimum Stock" -msgstr "" +msgstr "최소 재고" #: src/pages/part/PartDetail.tsx:597 #: src/tables/part/ParametricPartTable.tsx:24 #: src/tables/part/PartTable.tsx:204 msgid "Locked" -msgstr "" +msgstr "잠김" #: src/pages/part/PartDetail.tsx:603 msgid "Template Part" -msgstr "" +msgstr "템플릿 부분" #: src/pages/part/PartDetail.tsx:608 #: src/tables/bom/BomTable.tsx:428 msgid "Assembled Part" -msgstr "" +msgstr "조립부품" #: src/pages/part/PartDetail.tsx:613 msgid "Component Part" -msgstr "" +msgstr "구성 부품" #: src/pages/part/PartDetail.tsx:613 #~ msgid "Scheduling" @@ -7936,20 +7936,20 @@ msgstr "" #: src/pages/part/PartDetail.tsx:618 #: src/tables/bom/BomTable.tsx:413 msgid "Testable Part" -msgstr "" +msgstr "테스트 가능한 부분" #: src/pages/part/PartDetail.tsx:624 #: src/tables/bom/BomTable.tsx:418 msgid "Trackable Part" -msgstr "" +msgstr "추적 가능한 부분" #: src/pages/part/PartDetail.tsx:629 msgid "Purchaseable Part" -msgstr "" +msgstr "구매 가능한 부품" #: src/pages/part/PartDetail.tsx:635 msgid "Saleable Part" -msgstr "" +msgstr "판매 가능 부품" #: src/pages/part/PartDetail.tsx:655 #: src/pages/purchasing/PurchaseOrderDetail.tsx:272 @@ -7957,28 +7957,28 @@ msgstr "" #: src/pages/sales/SalesOrderDetail.tsx:243 #: src/tables/ColumnRenderers.tsx:707 msgid "Creation Date" -msgstr "" +msgstr "생성 날짜" #: src/pages/part/PartDetail.tsx:660 #: src/tables/ColumnRenderers.tsx:639 #: src/tables/Filter.tsx:433 msgid "Created By" -msgstr "" +msgstr "작성자" #: src/pages/part/PartDetail.tsx:674 msgid "Default Expiry" -msgstr "" +msgstr "기본 만료" #: src/pages/part/PartDetail.tsx:679 msgid "days" -msgstr "" +msgstr "날" #: src/pages/part/PartDetail.tsx:689 #: src/pages/part/pricing/BomPricingPanel.tsx:78 #: src/pages/part/pricing/VariantPricingPanel.tsx:95 #: src/tables/part/PartTable.tsx:180 msgid "Price Range" -msgstr "" +msgstr "가격대" #: src/pages/part/PartDetail.tsx:698 #~ msgid "Default Supplier" @@ -7986,51 +7986,51 @@ msgstr "" #: src/pages/part/PartDetail.tsx:699 msgid "Latest Serial Number" -msgstr "" +msgstr "최신 시리얼 번호" #: src/pages/part/PartDetail.tsx:732 msgid "Select Part Revision" -msgstr "" +msgstr "부품 리비전 선택" #: src/pages/part/PartDetail.tsx:789 msgid "Variants" -msgstr "" +msgstr "변형" #: src/pages/part/PartDetail.tsx:796 #: src/pages/stock/StockDetail.tsx:542 msgid "Allocations" -msgstr "" +msgstr "할당" #: src/pages/part/PartDetail.tsx:803 msgid "Bill of Materials" -msgstr "" +msgstr "BOM" #: src/pages/part/PartDetail.tsx:815 msgid "Used In" -msgstr "" +msgstr "사용 위치" #: src/pages/part/PartDetail.tsx:822 msgid "Part Pricing" -msgstr "" +msgstr "부품 가격" #: src/pages/part/PartDetail.tsx:892 msgid "Test Templates" -msgstr "" +msgstr "테스트 템플릿" #: src/pages/part/PartDetail.tsx:914 msgid "Related Parts" -msgstr "" +msgstr "관련 부품" #: src/pages/part/PartDetail.tsx:926 #: src/tables/ColumnRenderers.tsx:73 #: src/tables/bom/BomTable.tsx:657 #: src/tables/part/PartTestTemplateTable.tsx:258 msgid "Part is Locked" -msgstr "" +msgstr "부품이 잠겨 있습니다" #: src/pages/part/PartDetail.tsx:931 msgid "Part parameters cannot be edited, as the part is locked" -msgstr "" +msgstr "부품이 잠겨 있어 파라미터를 편집할 수 없습니다" #: src/pages/part/PartDetail.tsx:956 #~ msgid "Count part stock" @@ -8044,45 +8044,45 @@ msgstr "" #: src/tables/part/PartTestTemplateTable.tsx:112 #: src/tables/stock/StockItemTestResultTable.tsx:405 msgid "Required" -msgstr "" +msgstr "필요" #: src/pages/part/PartDetail.tsx:1030 msgid "Deficit" -msgstr "" +msgstr "부족분" #: src/pages/part/PartDetail.tsx:1070 #: src/tables/part/PartTable.tsx:398 #: src/tables/part/PartTable.tsx:452 msgid "Add Part" -msgstr "" +msgstr "부품 추가" #: src/pages/part/PartDetail.tsx:1084 msgid "Delete Part" -msgstr "" +msgstr "부품 삭제" #: src/pages/part/PartDetail.tsx:1093 msgid "Deleting this part cannot be reversed" -msgstr "" +msgstr "이 부분을 삭제하면 되돌릴 수 없습니다." #: src/pages/part/PartDetail.tsx:1156 #: src/pages/stock/StockDetail.tsx:885 msgid "Order" -msgstr "" +msgstr "주문하다" #: src/pages/part/PartDetail.tsx:1157 #: src/pages/stock/StockDetail.tsx:886 #: src/tables/build/BuildLineTable.tsx:790 msgid "Order Stock" -msgstr "" +msgstr "재고 주문" #: src/pages/part/PartDetail.tsx:1169 msgid "Search by serial number" -msgstr "" +msgstr "시리얼 번호로 검색" #: src/pages/part/PartDetail.tsx:1177 #: src/tables/part/PartTable.tsx:509 msgid "Part Actions" -msgstr "" +msgstr "부품 작업" #: src/pages/part/PartIndex.tsx:29 #~ msgid "Categories" @@ -8090,41 +8090,41 @@ msgstr "" #: src/pages/part/PartPricingPanel.tsx:72 msgid "No pricing data found for this part." -msgstr "" +msgstr "이 부품에 대한 가격 데이터를 찾을 수 없습니다." #: src/pages/part/PartPricingPanel.tsx:87 #: src/pages/part/pricing/PricingOverviewPanel.tsx:332 msgid "Pricing Overview" -msgstr "" +msgstr "가격 개요" #: src/pages/part/PartPricingPanel.tsx:93 msgid "Purchase History" -msgstr "" +msgstr "구매 내역" #: src/pages/part/PartPricingPanel.tsx:107 #: src/pages/part/pricing/PricingOverviewPanel.tsx:211 msgid "Internal Pricing" -msgstr "" +msgstr "내부 가격" #: src/pages/part/PartPricingPanel.tsx:122 #: src/pages/part/pricing/PricingOverviewPanel.tsx:221 msgid "BOM Pricing" -msgstr "" +msgstr "BOM 가격" #: src/pages/part/PartPricingPanel.tsx:129 #: src/pages/part/pricing/PricingOverviewPanel.tsx:249 msgid "Variant Pricing" -msgstr "" +msgstr "변형 가격" #: src/pages/part/PartPricingPanel.tsx:141 #: src/pages/part/pricing/PricingOverviewPanel.tsx:258 msgid "Sale Pricing" -msgstr "" +msgstr "판매 가격" #: src/pages/part/PartPricingPanel.tsx:147 #: src/pages/part/pricing/PricingOverviewPanel.tsx:267 msgid "Sale History" -msgstr "" +msgstr "판매 내역" #: src/pages/part/PartSchedulingDetail.tsx:51 #: src/pages/part/PartSchedulingDetail.tsx:291 @@ -8161,44 +8161,44 @@ msgstr "" #: src/pages/part/PartStockHistoryDetail.tsx:83 msgid "Edit Stocktake Entry" -msgstr "" +msgstr "재고 실사 항목 편집" #: src/pages/part/PartStockHistoryDetail.tsx:91 msgid "Delete Stocktake Entry" -msgstr "" +msgstr "재고 실사 항목 삭제" #: src/pages/part/PartStockHistoryDetail.tsx:109 msgid "Stocktake report scheduled for generation" -msgstr "" +msgstr "재고 실사 보고서 생성이 예약되었습니다" #: src/pages/part/PartStockHistoryDetail.tsx:123 msgid "Stock Quantity" -msgstr "" +msgstr "재고 수량" #: src/pages/part/PartStockHistoryDetail.tsx:129 #: src/pages/part/PartStockHistoryDetail.tsx:242 #: src/pages/stock/StockDetail.tsx:402 #: src/tables/stock/StockItemTable.tsx:125 msgid "Stock Value" -msgstr "" +msgstr "재고 가치" #: src/pages/part/PartStockHistoryDetail.tsx:201 msgid "Generate Stocktake Entry" -msgstr "" +msgstr "재고 실사 항목 생성" #: src/pages/part/PartStockHistoryDetail.tsx:271 #: src/pages/part/pricing/PricingOverviewPanel.tsx:334 msgid "Minimum Value" -msgstr "" +msgstr "최소값" #: src/pages/part/PartStockHistoryDetail.tsx:277 #: src/pages/part/pricing/PricingOverviewPanel.tsx:335 msgid "Maximum Value" -msgstr "" +msgstr "최대값" #: src/pages/part/PartStockHistoryDetail.tsx:304 msgid "Stocktake Entries" -msgstr "" +msgstr "재고 실사 항목" #: src/pages/part/PartStocktakeDetail.tsx:104 #: src/tables/settings/StocktakeReportTable.tsx:72 @@ -8221,26 +8221,26 @@ msgstr "" #: src/tables/sales/SalesOrderLineItemTable.tsx:120 #: src/tables/sales/SalesOrderTable.tsx:197 msgid "Total Price" -msgstr "" +msgstr "총가격" #: src/pages/part/pricing/BomPricingPanel.tsx:77 #: src/pages/part/pricing/BomPricingPanel.tsx:101 #: src/tables/bom/UsedInTable.tsx:59 #: src/tables/part/PartTable.tsx:228 msgid "Component" -msgstr "" +msgstr "요소" #: src/pages/part/pricing/BomPricingPanel.tsx:80 #: src/pages/part/pricing/VariantPricingPanel.tsx:35 #: src/pages/part/pricing/VariantPricingPanel.tsx:97 msgid "Minimum Price" -msgstr "" +msgstr "최저 가격" #: src/pages/part/pricing/BomPricingPanel.tsx:81 #: src/pages/part/pricing/VariantPricingPanel.tsx:43 #: src/pages/part/pricing/VariantPricingPanel.tsx:98 msgid "Maximum Price" -msgstr "" +msgstr "최고 가격" #: src/pages/part/pricing/BomPricingPanel.tsx:112 #~ msgid "Minimum Total Price" @@ -8262,80 +8262,80 @@ msgstr "" #: src/tables/purchasing/SupplierPriceBreakTable.tsx:84 #: src/tables/stock/StockItemTable.tsx:113 msgid "Unit Price" -msgstr "" +msgstr "단가" #: src/pages/part/pricing/BomPricingPanel.tsx:216 msgid "Pie Chart" -msgstr "" +msgstr "원형 차트" #: src/pages/part/pricing/BomPricingPanel.tsx:217 msgid "Bar Chart" -msgstr "" +msgstr "막대 차트" #: src/pages/part/pricing/PriceBreakPanel.tsx:58 #: src/pages/part/pricing/PriceBreakPanel.tsx:111 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:134 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:162 msgid "Add Price Break" -msgstr "" +msgstr "가격 구간 추가" #: src/pages/part/pricing/PriceBreakPanel.tsx:71 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:146 msgid "Edit Price Break" -msgstr "" +msgstr "가격 구간 편집" #: src/pages/part/pricing/PriceBreakPanel.tsx:81 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:154 msgid "Delete Price Break" -msgstr "" +msgstr "가격 구간 삭제" #: src/pages/part/pricing/PriceBreakPanel.tsx:95 msgid "Price Break" -msgstr "" +msgstr "가격 구간" #: src/pages/part/pricing/PriceBreakPanel.tsx:171 msgid "Price" -msgstr "" +msgstr "가격" #: src/pages/part/pricing/PricingOverviewPanel.tsx:74 msgid "Refreshing pricing data" -msgstr "" +msgstr "가격 데이터 새로고침 중" #: src/pages/part/pricing/PricingOverviewPanel.tsx:94 msgid "Pricing data updated" -msgstr "" +msgstr "가격 데이터가 업데이트되었습니다." #: src/pages/part/pricing/PricingOverviewPanel.tsx:101 msgid "Failed to update pricing data" -msgstr "" +msgstr "가격 데이터를 업데이트하지 못했습니다." #: src/pages/part/pricing/PricingOverviewPanel.tsx:129 msgid "Edit Pricing" -msgstr "" +msgstr "가격 수정" #: src/pages/part/pricing/PricingOverviewPanel.tsx:141 msgid "Pricing Category" -msgstr "" +msgstr "가격 카테고리" #: src/pages/part/pricing/PricingOverviewPanel.tsx:160 msgid "Minimum" -msgstr "" +msgstr "최저한의" #: src/pages/part/pricing/PricingOverviewPanel.tsx:173 msgid "Maximum" -msgstr "" +msgstr "최고" #: src/pages/part/pricing/PricingOverviewPanel.tsx:192 msgid "Override Pricing" -msgstr "" +msgstr "가격 재정의" #: src/pages/part/pricing/PricingOverviewPanel.tsx:203 msgid "Overall Pricing" -msgstr "" +msgstr "전체 가격" #: src/pages/part/pricing/PricingOverviewPanel.tsx:229 msgid "Purchase Pricing" -msgstr "" +msgstr "구매 가격" #: src/pages/part/pricing/PricingOverviewPanel.tsx:288 #: src/pages/purchasing/PurchaseOrderDetail.tsx:311 @@ -8346,51 +8346,51 @@ msgstr "" #: src/tables/settings/TemplateTable.tsx:250 #: src/tables/stock/StockItemTable.tsx:154 msgid "Last Updated" -msgstr "" +msgstr "마지막 업데이트" #: src/pages/part/pricing/PricingOverviewPanel.tsx:292 msgid "Pricing Not Set" -msgstr "" +msgstr "가격이 설정되지 않음" #: src/pages/part/pricing/PricingOverviewPanel.tsx:293 msgid "Pricing data has not been calculated for this part" -msgstr "" +msgstr "이 부품에 대한 가격 데이터가 계산되지 않았습니다." #: src/pages/part/pricing/PricingOverviewPanel.tsx:297 msgid "Pricing Actions" -msgstr "" +msgstr "가격 책정 조치" #: src/pages/part/pricing/PricingOverviewPanel.tsx:300 msgid "Refresh" -msgstr "" +msgstr "새로고침" #: src/pages/part/pricing/PricingOverviewPanel.tsx:301 msgid "Refresh pricing data" -msgstr "" +msgstr "가격 데이터 새로고침" #: src/pages/part/pricing/PricingOverviewPanel.tsx:316 msgid "Edit pricing data" -msgstr "" +msgstr "가격 데이터 편집" #: src/pages/part/pricing/PricingPanel.tsx:24 msgid "No data available" -msgstr "" +msgstr "사용할 수 있는 데이터가 없습니다" #: src/pages/part/pricing/PricingPanel.tsx:65 msgid "No Data" -msgstr "" +msgstr "데이터 없음" #: src/pages/part/pricing/PricingPanel.tsx:66 msgid "No pricing data available" -msgstr "" +msgstr "사용할 수 있는 가격 데이터가 없습니다" #: src/pages/part/pricing/PricingPanel.tsx:77 msgid "Loading pricing data" -msgstr "" +msgstr "가격 데이터 불러오는 중" #: src/pages/part/pricing/PurchaseHistoryPanel.tsx:48 msgid "Purchase Price" -msgstr "" +msgstr "구매 가격" #: src/pages/part/pricing/SaleHistoryPanel.tsx:24 #~ msgid "Sale Order" @@ -8399,31 +8399,31 @@ msgstr "" #: src/pages/part/pricing/SaleHistoryPanel.tsx:44 #: src/pages/part/pricing/SaleHistoryPanel.tsx:87 msgid "Sale Price" -msgstr "" +msgstr "판매가" #: src/pages/part/pricing/SupplierPricingPanel.tsx:69 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:75 msgid "Supplier Price" -msgstr "" +msgstr "공급업체 가격" #: src/pages/part/pricing/VariantPricingPanel.tsx:29 #: src/pages/part/pricing/VariantPricingPanel.tsx:94 msgid "Variant Part" -msgstr "" +msgstr "변형 부품" #: src/pages/purchasing/PurchaseOrderDetail.tsx:90 msgid "Edit Purchase Order" -msgstr "" +msgstr "발주서 편집" #: src/pages/purchasing/PurchaseOrderDetail.tsx:126 #: src/tables/purchasing/PurchaseOrderTable.tsx:172 #: src/tables/purchasing/PurchaseOrderTable.tsx:186 msgid "Add Purchase Order" -msgstr "" +msgstr "발주서 추가" #: src/pages/purchasing/PurchaseOrderDetail.tsx:148 msgid "Supplier Reference" -msgstr "" +msgstr "공급업체 참조" #: src/pages/purchasing/PurchaseOrderDetail.tsx:159 #: src/pages/sales/ReturnOrderDetail.tsx:126 @@ -8435,18 +8435,18 @@ msgstr "" #: src/pages/sales/ReturnOrderDetail.tsx:161 #: src/pages/sales/SalesOrderDetail.tsx:145 msgid "Completed Line Items" -msgstr "" +msgstr "완료된 광고 항목" #: src/pages/purchasing/PurchaseOrderDetail.tsx:197 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:270 msgid "Destination" -msgstr "" +msgstr "목적지" #: src/pages/purchasing/PurchaseOrderDetail.tsx:203 #: src/pages/sales/ReturnOrderDetail.tsx:168 #: src/pages/sales/SalesOrderDetail.tsx:162 msgid "Order Currency" -msgstr "" +msgstr "주문 통화" #: src/pages/purchasing/PurchaseOrderDetail.tsx:207 #: src/pages/sales/ReturnOrderDetail.tsx:183 @@ -8458,25 +8458,25 @@ msgstr "" #: src/pages/sales/ReturnOrderDetail.tsx:175 #: src/pages/sales/SalesOrderDetail.tsx:168 msgid "Total Cost" -msgstr "" +msgstr "총비용" #: src/pages/purchasing/PurchaseOrderDetail.tsx:238 #: src/pages/sales/ReturnOrderDetail.tsx:216 #: src/pages/sales/SalesOrderDetail.tsx:209 msgid "Contact Email" -msgstr "" +msgstr "연락처 이메일" #: src/pages/purchasing/PurchaseOrderDetail.tsx:246 #: src/pages/sales/ReturnOrderDetail.tsx:224 #: src/pages/sales/SalesOrderDetail.tsx:217 msgid "Contact Phone" -msgstr "" +msgstr "연락 전화" #: src/pages/purchasing/PurchaseOrderDetail.tsx:279 #: src/pages/sales/ReturnOrderDetail.tsx:258 #: src/pages/sales/SalesOrderDetail.tsx:250 msgid "Issue Date" -msgstr "" +msgstr "발행일" #: src/pages/purchasing/PurchaseOrderDetail.tsx:304 #: src/pages/sales/ReturnOrderDetail.tsx:282 @@ -8485,13 +8485,13 @@ msgstr "" #: src/tables/build/BuildOrderTable.tsx:141 #: src/tables/part/PartPurchaseOrdersTable.tsx:106 msgid "Completion Date" -msgstr "" +msgstr "완료 날짜" #: src/pages/purchasing/PurchaseOrderDetail.tsx:343 #: src/pages/sales/ReturnOrderDetail.tsx:321 #: src/pages/sales/SalesOrderDetail.tsx:359 msgid "Order Details" -msgstr "" +msgstr "주문 상세 정보" #: src/pages/purchasing/PurchaseOrderDetail.tsx:349 #: src/pages/purchasing/PurchaseOrderDetail.tsx:358 @@ -8501,52 +8501,52 @@ msgstr "" #: src/pages/sales/SalesOrderDetail.tsx:365 #: src/pages/sales/SalesOrderDetail.tsx:374 msgid "Line Items" -msgstr "" +msgstr "광고 항목" #: src/pages/purchasing/PurchaseOrderDetail.tsx:373 #: src/pages/sales/ReturnOrderDetail.tsx:351 #: src/pages/sales/SalesOrderDetail.tsx:388 msgid "Extra Line Items" -msgstr "" +msgstr "추가 품목" #: src/pages/purchasing/PurchaseOrderDetail.tsx:420 msgid "Issue Purchase Order" -msgstr "" +msgstr "발주서 발행" #: src/pages/purchasing/PurchaseOrderDetail.tsx:428 msgid "Cancel Purchase Order" -msgstr "" +msgstr "발주서 취소" #: src/pages/purchasing/PurchaseOrderDetail.tsx:436 msgid "Hold Purchase Order" -msgstr "" +msgstr "발주서 보류" #: src/pages/purchasing/PurchaseOrderDetail.tsx:444 msgid "Complete Purchase Order" -msgstr "" +msgstr "발주서 완료" #: src/pages/purchasing/PurchaseOrderDetail.tsx:500 #: src/pages/sales/ReturnOrderDetail.tsx:511 #: src/pages/sales/SalesOrderDetail.tsx:564 msgid "Order Actions" -msgstr "" +msgstr "주문 조치" #: src/pages/sales/ReturnOrderDetail.tsx:115 #: src/pages/sales/SalesOrderDetail.tsx:105 #: src/pages/sales/SalesOrderShipmentDetail.tsx:131 #: src/tables/sales/SalesOrderTable.tsx:156 msgid "Customer Reference" -msgstr "" +msgstr "고객 레퍼런스" #: src/pages/sales/ReturnOrderDetail.tsx:196 msgid "Return Address" -msgstr "" +msgstr "반송 주소" #: src/pages/sales/ReturnOrderDetail.tsx:202 #: src/pages/sales/SalesOrderDetail.tsx:195 #: src/pages/sales/SalesOrderShipmentDetail.tsx:178 msgid "Not specified" -msgstr "" +msgstr "지정되지 않음" #: src/pages/sales/ReturnOrderDetail.tsx:349 #~ msgid "Order canceled" @@ -8554,117 +8554,117 @@ msgstr "" #: src/pages/sales/ReturnOrderDetail.tsx:404 msgid "Edit Return Order" -msgstr "" +msgstr "반품 주문 편집" #: src/pages/sales/ReturnOrderDetail.tsx:422 #: src/tables/sales/ReturnOrderTable.tsx:176 #: src/tables/sales/ReturnOrderTable.tsx:190 msgid "Add Return Order" -msgstr "" +msgstr "반품 주문 추가" #: src/pages/sales/ReturnOrderDetail.tsx:431 msgid "Issue Return Order" -msgstr "" +msgstr "반품 주문 발행" #: src/pages/sales/ReturnOrderDetail.tsx:439 msgid "Cancel Return Order" -msgstr "" +msgstr "반품 주문 취소" #: src/pages/sales/ReturnOrderDetail.tsx:447 msgid "Hold Return Order" -msgstr "" +msgstr "반품 주문 보류" #: src/pages/sales/ReturnOrderDetail.tsx:455 msgid "Complete Return Order" -msgstr "" +msgstr "반품 주문 완료" #: src/pages/sales/SalesOrderDetail.tsx:154 msgid "Completed Shipments" -msgstr "" +msgstr "완료된 출하" #: src/pages/sales/SalesOrderDetail.tsx:189 #: src/pages/sales/SalesOrderShipmentDetail.tsx:167 msgid "Shipping Address" -msgstr "" +msgstr "배송 주소" #: src/pages/sales/SalesOrderDetail.tsx:326 msgid "Edit Sales Order" -msgstr "" +msgstr "판매 주문 편집" #: src/pages/sales/SalesOrderDetail.tsx:348 #: src/tables/sales/SalesOrderTable.tsx:122 #: src/tables/sales/SalesOrderTable.tsx:136 msgid "Add Sales Order" -msgstr "" +msgstr "판매 주문 추가" #: src/pages/sales/SalesOrderDetail.tsx:406 #: src/tables/sales/SalesOrderTable.tsx:166 msgid "Shipments" -msgstr "" +msgstr "출하" #: src/pages/sales/SalesOrderDetail.tsx:458 msgid "Issue Sales Order" -msgstr "" +msgstr "판매 주문 발행" #: src/pages/sales/SalesOrderDetail.tsx:466 msgid "Cancel Sales Order" -msgstr "" +msgstr "판매 주문 취소" #: src/pages/sales/SalesOrderDetail.tsx:474 msgid "Hold Sales Order" -msgstr "" +msgstr "판매 주문 보류" #: src/pages/sales/SalesOrderDetail.tsx:482 msgid "Ship Sales Order" -msgstr "" +msgstr "판매 주문 출하" #: src/pages/sales/SalesOrderDetail.tsx:484 msgid "Ship this order?" -msgstr "" +msgstr "이 주문을 출하하시겠습니까?" #: src/pages/sales/SalesOrderDetail.tsx:485 msgid "Order shipped" -msgstr "" +msgstr "주문이 출하되었습니다" #: src/pages/sales/SalesOrderDetail.tsx:493 msgid "Complete Sales Order" -msgstr "" +msgstr "판매 주문 완료" #: src/pages/sales/SalesOrderDetail.tsx:538 msgid "Ship Order" -msgstr "" +msgstr "주문 출하" #: src/pages/sales/SalesOrderShipmentDetail.tsx:139 #: src/tables/sales/SalesOrderShipmentTable.tsx:150 msgid "Shipment Reference" -msgstr "" +msgstr "출하 참조" #: src/pages/sales/SalesOrderShipmentDetail.tsx:145 msgid "Tracking Number" -msgstr "" +msgstr "운송장 번호" #: src/pages/sales/SalesOrderShipmentDetail.tsx:153 msgid "Invoice Number" -msgstr "" +msgstr "송장 번호" #: src/pages/sales/SalesOrderShipmentDetail.tsx:188 msgid "Allocated Items" -msgstr "" +msgstr "할당된 항목" #: src/pages/sales/SalesOrderShipmentDetail.tsx:193 msgid "Checked By" -msgstr "" +msgstr "확인자" #: src/pages/sales/SalesOrderShipmentDetail.tsx:199 msgid "Not checked" -msgstr "" +msgstr "확인되지 않음" #: src/pages/sales/SalesOrderShipmentDetail.tsx:205 #: src/tables/ColumnRenderers.tsx:723 #: src/tables/sales/SalesOrderAllocationTable.tsx:181 #: src/tables/sales/SalesOrderShipmentTable.tsx:184 msgid "Shipment Date" -msgstr "" +msgstr "출하일" #: src/pages/sales/SalesOrderShipmentDetail.tsx:211 #~ msgid "Assigned Items" @@ -8673,101 +8673,101 @@ msgstr "" #: src/pages/sales/SalesOrderShipmentDetail.tsx:213 #: src/tables/sales/SalesOrderShipmentTable.tsx:188 msgid "Delivery Date" -msgstr "" +msgstr "배송일" #: src/pages/sales/SalesOrderShipmentDetail.tsx:252 msgid "Shipment Details" -msgstr "" +msgstr "출하 상세 정보" #: src/pages/sales/SalesOrderShipmentDetail.tsx:296 #: src/pages/sales/SalesOrderShipmentDetail.tsx:400 #: src/tables/sales/SalesOrderShipmentTable.tsx:98 msgid "Edit Shipment" -msgstr "" +msgstr "출하 편집" #: src/pages/sales/SalesOrderShipmentDetail.tsx:303 #: src/pages/sales/SalesOrderShipmentDetail.tsx:419 #: src/tables/sales/SalesOrderShipmentTable.tsx:90 msgid "Cancel Shipment" -msgstr "" +msgstr "출하 취소" #: src/pages/sales/SalesOrderShipmentDetail.tsx:333 #: src/tables/part/PartPurchaseOrdersTable.tsx:122 msgid "Pending" -msgstr "" +msgstr "보류 중" #: src/pages/sales/SalesOrderShipmentDetail.tsx:339 #: src/tables/sales/SalesOrderShipmentTable.tsx:163 #: src/tables/sales/SalesOrderShipmentTable.tsx:294 msgid "Checked" -msgstr "" +msgstr "체크됨" #: src/pages/sales/SalesOrderShipmentDetail.tsx:345 msgid "Not Checked" -msgstr "" +msgstr "미확인" #: src/pages/sales/SalesOrderShipmentDetail.tsx:351 #: src/tables/sales/SalesOrderShipmentTable.tsx:170 #: src/tables/sales/SalesOrderShipmentTable.tsx:299 msgid "Shipped" -msgstr "" +msgstr "출하됨" #: src/pages/sales/SalesOrderShipmentDetail.tsx:357 #: src/tables/sales/SalesOrderShipmentTable.tsx:177 #: src/tables/sales/SalesOrderShipmentTable.tsx:304 #: src/tables/settings/EmailTable.tsx:31 msgid "Delivered" -msgstr "" +msgstr "배달됨" #: src/pages/sales/SalesOrderShipmentDetail.tsx:372 msgid "Send Shipment" -msgstr "" +msgstr "출하 전송" #: src/pages/sales/SalesOrderShipmentDetail.tsx:395 msgid "Shipment Actions" -msgstr "" +msgstr "출하 작업" #: src/pages/sales/SalesOrderShipmentDetail.tsx:404 msgid "Check" -msgstr "" +msgstr "확인하다" #: src/pages/sales/SalesOrderShipmentDetail.tsx:405 msgid "Mark shipment as checked" -msgstr "" +msgstr "출하를 확인됨으로 표시" #: src/pages/sales/SalesOrderShipmentDetail.tsx:411 msgid "Uncheck" -msgstr "" +msgstr "선택 취소" #: src/pages/sales/SalesOrderShipmentDetail.tsx:412 msgid "Mark shipment as unchecked" -msgstr "" +msgstr "출하를 미확인으로 표시" #: src/pages/stock/LocationDetail.tsx:119 msgid "Parent Location" -msgstr "" +msgstr "상위 위치" #: src/pages/stock/LocationDetail.tsx:137 #: src/pages/stock/LocationDetail.tsx:185 msgid "Sublocations" -msgstr "" +msgstr "하위 위치" #: src/pages/stock/LocationDetail.tsx:155 #: src/tables/stock/StockLocationTable.tsx:57 msgid "Location Type" -msgstr "" +msgstr "위치 유형" #: src/pages/stock/LocationDetail.tsx:166 msgid "Top level stock location" -msgstr "" +msgstr "최상위 재고 위치" #: src/pages/stock/LocationDetail.tsx:179 msgid "Location Details" -msgstr "" +msgstr "위치 상세 정보" #: src/pages/stock/LocationDetail.tsx:225 msgid "Default Parts" -msgstr "" +msgstr "기본 부품" #: src/pages/stock/LocationDetail.tsx:243 #~ msgid "Child Locations Action" @@ -8777,30 +8777,30 @@ msgstr "" #: src/pages/stock/LocationDetail.tsx:411 #: src/tables/stock/StockLocationTable.tsx:124 msgid "Edit Stock Location" -msgstr "" +msgstr "재고 위치 편집" #: src/pages/stock/LocationDetail.tsx:258 msgid "Move items to parent location" -msgstr "" +msgstr "항목을 상위 위치로 이동" #: src/pages/stock/LocationDetail.tsx:270 #: src/pages/stock/LocationDetail.tsx:416 msgid "Delete Stock Location" -msgstr "" +msgstr "재고 위치 삭제" #: src/pages/stock/LocationDetail.tsx:273 msgid "Items Action" -msgstr "" +msgstr "항목 작업" #: src/pages/stock/LocationDetail.tsx:275 msgid "Action for stock items in this location" -msgstr "" +msgstr "이 위치의 재고 품목에 대한 작업" #: src/pages/stock/LocationDetail.tsx:280 #: src/pages/stock/LocationDetail.tsx:407 #: src/tables/stock/StockLocationTable.tsx:145 msgid "Location Actions" -msgstr "" +msgstr "위치 작업" #: src/pages/stock/LocationDetail.tsx:280 #~ msgid "Locations Action" @@ -8808,53 +8808,53 @@ msgstr "" #: src/pages/stock/LocationDetail.tsx:282 msgid "Action for child locations in this location" -msgstr "" +msgstr "이 위치의 하위 위치에 대한 작업" #: src/pages/stock/LocationDetail.tsx:317 msgid "Scan Stock Item" -msgstr "" +msgstr "재고 품목 스캔" #: src/pages/stock/LocationDetail.tsx:335 #: src/pages/stock/StockDetail.tsx:814 msgid "Scanned stock item into location" -msgstr "" +msgstr "재고 품목을 위치로 스캔했습니다." #: src/pages/stock/LocationDetail.tsx:341 #: src/pages/stock/StockDetail.tsx:820 msgid "Error scanning stock item" -msgstr "" +msgstr "재고 품목 스캔 중 오류 발생" #: src/pages/stock/LocationDetail.tsx:348 msgid "Scan Stock Location" -msgstr "" +msgstr "재고 위치 스캔" #: src/pages/stock/LocationDetail.tsx:360 msgid "Scanned stock location into location" -msgstr "" +msgstr "스캔된 재고 위치를 위치로" #: src/pages/stock/LocationDetail.tsx:366 msgid "Error scanning stock location" -msgstr "" +msgstr "재고 위치 스캔 중 오류 발생" #: src/pages/stock/LocationDetail.tsx:384 msgid "Scan in stock items" -msgstr "" +msgstr "재고 품목 스캔하여 넣기" #: src/pages/stock/LocationDetail.tsx:386 msgid "Scan item into this location" -msgstr "" +msgstr "이 위치로 항목 스캔" #: src/pages/stock/LocationDetail.tsx:390 msgid "Scan in container" -msgstr "" +msgstr "컨테이너 스캔하여 넣기" #: src/pages/stock/LocationDetail.tsx:392 msgid "Scan container into this location" -msgstr "" +msgstr "이 위치로 컨테이너 스캔" #: src/pages/stock/StockDetail.tsx:147 msgid "Base Part" -msgstr "" +msgstr "베이스 부분" #: src/pages/stock/StockDetail.tsx:155 #~ msgid "Link custom barcode to stock item" @@ -8874,7 +8874,7 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:206 msgid "Previous serial number" -msgstr "" +msgstr "이전 시리얼 번호" #: src/pages/stock/StockDetail.tsx:217 #~ msgid "Delete stock item" @@ -8882,35 +8882,35 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:228 msgid "Find serial number" -msgstr "" +msgstr "시리얼 번호 찾기" #: src/pages/stock/StockDetail.tsx:234 msgid "Next serial number" -msgstr "" +msgstr "다음 시리얼 번호" #: src/pages/stock/StockDetail.tsx:272 msgid "Allocated to Orders" -msgstr "" +msgstr "주문에 할당됨" #: src/pages/stock/StockDetail.tsx:305 msgid "Installed In" -msgstr "" +msgstr "설치 위치" #: src/pages/stock/StockDetail.tsx:325 msgid "Parent Item" -msgstr "" +msgstr "상위 항목" #: src/pages/stock/StockDetail.tsx:329 msgid "Parent stock item" -msgstr "" +msgstr "모재품목" #: src/pages/stock/StockDetail.tsx:335 msgid "Consumed By" -msgstr "" +msgstr "사용한 대상" #: src/pages/stock/StockDetail.tsx:432 msgid "Last Stocktake" -msgstr "" +msgstr "최근 재고 실사" #: src/pages/stock/StockDetail.tsx:433 #~ msgid "Duplicate stock item" @@ -8918,7 +8918,7 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:526 msgid "Stock Details" -msgstr "" +msgstr "재고 상세 정보" #: src/pages/stock/StockDetail.tsx:571 #~ msgid "Test Data" @@ -8926,15 +8926,15 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:601 msgid "Installed Items" -msgstr "" +msgstr "설치된 항목" #: src/pages/stock/StockDetail.tsx:608 msgid "Child Items" -msgstr "" +msgstr "하위 항목" #: src/pages/stock/StockDetail.tsx:662 msgid "Edit Stock Item" -msgstr "" +msgstr "재고 품목 편집" #: src/pages/stock/StockDetail.tsx:671 #: src/tables/stock/StockItemTable.tsx:452 @@ -8953,15 +8953,15 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:704 msgid "Items Created" -msgstr "" +msgstr "항목이 생성되었습니다" #: src/pages/stock/StockDetail.tsx:705 msgid "Created {n} stock items" -msgstr "" +msgstr "재고 품목 {n}개가 생성되었습니다" #: src/pages/stock/StockDetail.tsx:722 msgid "Delete Stock Item" -msgstr "" +msgstr "재고 품목 삭제" #: src/pages/stock/StockDetail.tsx:762 #~ msgid "Return Stock Item" @@ -8973,7 +8973,7 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:772 msgid "Serialize Stock Item" -msgstr "" +msgstr "재고 품목 일련번호 지정" #: src/pages/stock/StockDetail.tsx:777 #~ msgid "Item returned to stock" @@ -8981,23 +8981,23 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:788 msgid "Stock item serialized" -msgstr "" +msgstr "재고 품목에 일련번호가 지정되었습니다" #: src/pages/stock/StockDetail.tsx:796 msgid "Scan Into Location" -msgstr "" +msgstr "위치로 스캔" #: src/pages/stock/StockDetail.tsx:854 msgid "Scan into location" -msgstr "" +msgstr "스캔하여 위치로 이동" #: src/pages/stock/StockDetail.tsx:856 msgid "Scan this item into a location" -msgstr "" +msgstr "이 항목을 위치로 스캔" #: src/pages/stock/StockDetail.tsx:868 msgid "Stock Operations" -msgstr "" +msgstr "재고 운영" #: src/pages/stock/StockDetail.tsx:868 #~ msgid "Count stock" @@ -9006,11 +9006,11 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:873 #: src/tables/build/BuildOutputTable.tsx:571 msgid "Serialize" -msgstr "" +msgstr "일련번호 지정" #: src/pages/stock/StockDetail.tsx:874 msgid "Serialize stock" -msgstr "" +msgstr "재고에 일련번호 지정" #: src/pages/stock/StockDetail.tsx:890 #~ msgid "Return from customer" @@ -9018,7 +9018,7 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:899 msgid "Stock Item Actions" -msgstr "" +msgstr "재고 품목 작업" #: src/pages/stock/StockDetail.tsx:900 #~ msgid "Transfer" @@ -9035,21 +9035,21 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:969 #: src/tables/stock/StockItemTable.tsx:258 msgid "Stale" -msgstr "" +msgstr "탁한" #: src/pages/stock/StockDetail.tsx:975 #: src/tables/stock/StockItemTable.tsx:252 msgid "Expired" -msgstr "" +msgstr "만료됨" #: src/pages/stock/StockDetail.tsx:981 msgid "Unavailable" -msgstr "" +msgstr "없는" #: src/states/IconState.tsx:47 #: src/states/IconState.tsx:77 msgid "Error loading icon package from server" -msgstr "" +msgstr "서버에서 아이콘 패키지를 불러오는 중 오류 발생" #: src/tables/ColumnRenderers.tsx:41 #~ msgid "Part is locked" @@ -9057,11 +9057,11 @@ msgstr "" #: src/tables/ColumnRenderers.tsx:68 msgid "Part is not active" -msgstr "" +msgstr "부품이 활성화되지 않았습니다." #: src/tables/ColumnRenderers.tsx:78 msgid "You are subscribed to notifications for this part" -msgstr "" +msgstr "이 부품의 알림을 구독 중입니다" #: src/tables/ColumnRenderers.tsx:93 #~ msgid "No location set" @@ -9069,73 +9069,73 @@ msgstr "" #: src/tables/ColumnRenderers.tsx:162 msgid "This stock item is in production" -msgstr "" +msgstr "이 재고 품목은 생산 중입니다." #: src/tables/ColumnRenderers.tsx:169 msgid "This stock item has been assigned to a sales order" -msgstr "" +msgstr "이 재고 품목은 판매 주문에 지정되었습니다." #: src/tables/ColumnRenderers.tsx:176 msgid "This stock item has been assigned to a customer" -msgstr "" +msgstr "이 재고 품목은 고객에게 할당되었습니다." #: src/tables/ColumnRenderers.tsx:183 msgid "This stock item is installed in another stock item" -msgstr "" +msgstr "이 재고 품목은 다른 재고 품목에 설치되어 있습니다." #: src/tables/ColumnRenderers.tsx:190 msgid "This stock item has been consumed by a build order" -msgstr "" +msgstr "이 재고 품목은 생산 주문에서 사용되었습니다" #: src/tables/ColumnRenderers.tsx:197 msgid "This stock item is unavailable" -msgstr "" +msgstr "이 재고 품목을 이용할 수 없습니다" #: src/tables/ColumnRenderers.tsx:203 msgid "This stock item has expired" -msgstr "" +msgstr "이 재고 품목은 만료되었습니다." #: src/tables/ColumnRenderers.tsx:207 msgid "This stock item is stale" -msgstr "" +msgstr "이 재고 품목은 오래되었습니다." #: src/tables/ColumnRenderers.tsx:219 msgid "This stock item is over-allocated" -msgstr "" +msgstr "이 재고 항목은 초과 할당되었습니다." #: src/tables/ColumnRenderers.tsx:227 msgid "This stock item is fully allocated" -msgstr "" +msgstr "이 재고 품목은 전부 할당되었습니다" #: src/tables/ColumnRenderers.tsx:234 msgid "This stock item is partially allocated" -msgstr "" +msgstr "이 재고 품목은 일부 할당되었습니다" #: src/tables/ColumnRenderers.tsx:252 #: src/tables/build/BuildLineTable.tsx:308 #: src/tables/sales/SalesOrderLineItemTable.tsx:156 msgid "No stock available" -msgstr "" +msgstr "재고가 없습니다" #: src/tables/ColumnRenderers.tsx:262 msgid "This stock item has been depleted" -msgstr "" +msgstr "본 상품은 재고가 소진되었습니다" #: src/tables/ColumnRenderers.tsx:283 #: src/tables/bom/BomTable.tsx:352 #: src/tables/part/PartTable.tsx:172 #: src/tables/sales/SalesOrderLineItemTable.tsx:185 msgid "Stock Information" -msgstr "" +msgstr "재고 정보" #: src/tables/ColumnRenderers.tsx:545 #: src/tables/build/BuildOutputTable.tsx:660 msgid "Allocated Lines" -msgstr "" +msgstr "할당된 항목" #: src/tables/ColumnRenderers.tsx:774 msgid "Line Item" -msgstr "" +msgstr "광고 항목" #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" @@ -9171,278 +9171,278 @@ msgstr "" #: src/tables/Filter.tsx:117 msgid "Has Batch Code" -msgstr "" +msgstr "배치 코드 있음" #: src/tables/Filter.tsx:118 msgid "Show items which have a batch code" -msgstr "" +msgstr "배치 코드가 있는 항목 표시" #: src/tables/Filter.tsx:126 msgid "Filter items by batch code" -msgstr "" +msgstr "배치 코드로 항목 필터링" #: src/tables/Filter.tsx:135 msgid "Show items which are in stock" -msgstr "" +msgstr "재고가 있는 품목 표시" #: src/tables/Filter.tsx:142 msgid "Is Serialized" -msgstr "" +msgstr "일련번호 있음" #: src/tables/Filter.tsx:143 msgid "Show items which have a serial number" -msgstr "" +msgstr "시리얼 번호가 있는 항목 표시" #: src/tables/Filter.tsx:150 #: src/tables/build/BuildAllocatedStockTable.tsx:134 msgid "Serial" -msgstr "" +msgstr "시리얼 번호" #: src/tables/Filter.tsx:151 msgid "Filter items by serial number" -msgstr "" +msgstr "시리얼 번호로 항목 필터링" #: src/tables/Filter.tsx:159 msgid "Serial Below" -msgstr "" +msgstr "시리얼 번호 이하" #: src/tables/Filter.tsx:160 msgid "Show items with serial numbers less than or equal to a given value" -msgstr "" +msgstr "지정한 값 이하의 시리얼 번호를 가진 항목 표시" #: src/tables/Filter.tsx:168 msgid "Serial Above" -msgstr "" +msgstr "시리얼 번호 이상" #: src/tables/Filter.tsx:169 msgid "Show items with serial numbers greater than or equal to a given value" -msgstr "" +msgstr "지정한 값 이상의 시리얼 번호를 가진 항목 표시" #: src/tables/Filter.tsx:178 msgid "Assigned to me" -msgstr "" +msgstr "나에게 할당됨" #: src/tables/Filter.tsx:179 msgid "Show orders assigned to me" -msgstr "" +msgstr "나에게 할당된 주문 표시" #: src/tables/Filter.tsx:186 #: src/tables/sales/SalesOrderAllocationTable.tsx:89 msgid "Outstanding" -msgstr "" +msgstr "미처리" #: src/tables/Filter.tsx:187 msgid "Show outstanding items" -msgstr "" +msgstr "미처리 항목 표시" #: src/tables/Filter.tsx:195 msgid "Show overdue items" -msgstr "" +msgstr "기한이 지난 항목 표시" #: src/tables/Filter.tsx:202 msgid "Minimum Date" -msgstr "" +msgstr "최소 날짜" #: src/tables/Filter.tsx:203 msgid "Show items after this date" -msgstr "" +msgstr "이 날짜 이후의 항목 표시" #: src/tables/Filter.tsx:211 msgid "Maximum Date" -msgstr "" +msgstr "최대 날짜" #: src/tables/Filter.tsx:212 msgid "Show items before this date" -msgstr "" +msgstr "이 날짜 이전의 항목 표시" #: src/tables/Filter.tsx:220 msgid "Created Before" -msgstr "" +msgstr "다음 날짜 이전 생성" #: src/tables/Filter.tsx:221 msgid "Show items created before this date" -msgstr "" +msgstr "이 날짜 이전에 생성된 항목 표시" #: src/tables/Filter.tsx:229 msgid "Created After" -msgstr "" +msgstr "다음 날짜 이후 생성" #: src/tables/Filter.tsx:230 msgid "Show items created after this date" -msgstr "" +msgstr "이 날짜 이후에 생성된 항목 표시" #: src/tables/Filter.tsx:238 msgid "Start Date Before" -msgstr "" +msgstr "시작 날짜 이전" #: src/tables/Filter.tsx:239 msgid "Show items with a start date before this date" -msgstr "" +msgstr "이 날짜 이전 시작일을 가진 항목 표시" #: src/tables/Filter.tsx:247 msgid "Start Date After" -msgstr "" +msgstr "다음 이후 시작 날짜" #: src/tables/Filter.tsx:248 msgid "Show items with a start date after this date" -msgstr "" +msgstr "이 날짜 이후 시작일을 가진 항목 표시" #: src/tables/Filter.tsx:256 msgid "Target Date Before" -msgstr "" +msgstr "이전 목표 날짜" #: src/tables/Filter.tsx:257 msgid "Show items with a target date before this date" -msgstr "" +msgstr "이 날짜 이전 목표일을 가진 항목 표시" #: src/tables/Filter.tsx:265 msgid "Target Date After" -msgstr "" +msgstr "이후 목표 날짜" #: src/tables/Filter.tsx:266 msgid "Show items with a target date after this date" -msgstr "" +msgstr "이 날짜 이후 목표일을 가진 항목 표시" #: src/tables/Filter.tsx:274 msgid "Completed Before" -msgstr "" +msgstr "이전에 완료됨" #: src/tables/Filter.tsx:275 msgid "Show items completed before this date" -msgstr "" +msgstr "이 날짜 이전에 완료된 항목 표시" #: src/tables/Filter.tsx:283 msgid "Completed After" -msgstr "" +msgstr "다음 이후 완료" #: src/tables/Filter.tsx:284 msgid "Show items completed after this date" -msgstr "" +msgstr "이 날짜 이후에 완료된 항목 표시" #: src/tables/Filter.tsx:292 #: src/tables/stock/StockItemTable.tsx:284 msgid "Updated After" -msgstr "" +msgstr "업데이트일 이후" #: src/tables/Filter.tsx:293 msgid "Show orders updated after this date" -msgstr "" +msgstr "이 날짜 이후에 업데이트된 주문 표시" #: src/tables/Filter.tsx:301 #: src/tables/stock/StockItemTable.tsx:278 msgid "Updated Before" -msgstr "" +msgstr "업데이트일 이전" #: src/tables/Filter.tsx:302 msgid "Show orders updated before this date" -msgstr "" +msgstr "이 날짜 이전에 업데이트된 주문 표시" #: src/tables/Filter.tsx:314 msgid "Has Project Code" -msgstr "" +msgstr "프로젝트 코드가 있음" #: src/tables/Filter.tsx:315 msgid "Show orders with an assigned project code" -msgstr "" +msgstr "할당된 프로젝트 코드로 주문 표시" #: src/tables/Filter.tsx:324 msgid "Include Variants" -msgstr "" +msgstr "변형 포함" #: src/tables/Filter.tsx:325 msgid "Include results for part variants" -msgstr "" +msgstr "부품 변형 결과 포함" #: src/tables/Filter.tsx:335 #: src/tables/part/PartPurchaseOrdersTable.tsx:133 msgid "Filter by order status" -msgstr "" +msgstr "주문 상태로 필터링" #: src/tables/Filter.tsx:347 msgid "Filter by project code" -msgstr "" +msgstr "프로젝트 코드로 필터링" #: src/tables/Filter.tsx:380 msgid "Filter by responsible owner" -msgstr "" +msgstr "책임 소유자별로 필터링" #: src/tables/Filter.tsx:396 #: src/tables/settings/ApiTokenTable.tsx:128 #: src/tables/stock/StockTrackingTable.tsx:226 msgid "Filter by user" -msgstr "" +msgstr "사용자별로 필터링" #: src/tables/Filter.tsx:408 msgid "Filter by manufacturer" -msgstr "" +msgstr "제조업체별로 필터링" #: src/tables/Filter.tsx:421 msgid "Filter by supplier" -msgstr "" +msgstr "공급업체로 필터링" #: src/tables/Filter.tsx:434 msgid "Filter by user who created the order" -msgstr "" +msgstr "주문 생성 사용자로 필터링" #: src/tables/Filter.tsx:442 msgid "Filter by user who issued the order" -msgstr "" +msgstr "주문 발행 사용자로 필터링" #: src/tables/Filter.tsx:450 msgid "Filter by part category" -msgstr "" +msgstr "부품 카테고리별로 필터링" #: src/tables/Filter.tsx:461 msgid "Filter by stock location" -msgstr "" +msgstr "재고 위치별로 필터링" #: src/tables/FilterSelectDrawer.tsx:97 msgid "Remove filter" -msgstr "" +msgstr "필터 제거" #: src/tables/FilterSelectDrawer.tsx:143 #: src/tables/FilterSelectDrawer.tsx:145 #: src/tables/FilterSelectDrawer.tsx:192 msgid "Select filter value" -msgstr "" +msgstr "필터 값 선택" #: src/tables/FilterSelectDrawer.tsx:157 msgid "Enter filter value" -msgstr "" +msgstr "필터 값을 입력하세요" #: src/tables/FilterSelectDrawer.tsx:179 msgid "Select date value" -msgstr "" +msgstr "날짜 값 선택" #: src/tables/FilterSelectDrawer.tsx:301 msgid "Select filter" -msgstr "" +msgstr "필터 선택" #: src/tables/FilterSelectDrawer.tsx:302 msgid "Filter" -msgstr "" +msgstr "필터" #: src/tables/FilterSelectDrawer.tsx:354 #: src/tables/InvenTreeTableHeader.tsx:263 msgid "Table Filters" -msgstr "" +msgstr "테이블 필터" #: src/tables/FilterSelectDrawer.tsx:392 msgid "Add Filter" -msgstr "" +msgstr "필터 추가" #: src/tables/FilterSelectDrawer.tsx:401 msgid "Clear Filters" -msgstr "" +msgstr "필터 지우기" #: src/tables/InvenTreeTable.tsx:52 #: src/tables/InvenTreeTable.tsx:526 msgid "No records found" -msgstr "" +msgstr "기록을 찾을 수 없습니다" #: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" -msgstr "" +msgstr "테이블 옵션을 불러오는 중 오류 발생" #: src/tables/InvenTreeTable.tsx:250 #~ msgid "Failed to load table options" @@ -9470,7 +9470,7 @@ msgstr "" #: src/tables/InvenTreeTable.tsx:571 msgid "Server returned incorrect data type" -msgstr "" +msgstr "서버가 잘못된 데이터 유형을 반환했습니다." #: src/tables/InvenTreeTable.tsx:594 #: src/tables/InvenTreeTable.tsx:595 @@ -9479,7 +9479,7 @@ msgstr "" #: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" -msgstr "" +msgstr "테이블 데이터를 불러오는 중 오류 발생" #: src/tables/InvenTreeTable.tsx:655 #: src/tables/InvenTreeTable.tsx:656 @@ -9496,49 +9496,49 @@ msgstr "" #: src/tables/InvenTreeTable.tsx:733 msgid "View details" -msgstr "" +msgstr "상세 보기" #: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" -msgstr "" +msgstr "<<<모델>>> 보기" #: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" -msgstr "" +msgstr "선택한 항목 삭제" #: src/tables/InvenTreeTableHeader.tsx:111 msgid "Are you sure you want to delete the selected items?" -msgstr "" +msgstr "선택한 항목을 삭제하시겠습니까?" #: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" -msgstr "" +msgstr "이 작업은 취소할 수 없습니다." #: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" -msgstr "" +msgstr "삭제된 항목" #: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" -msgstr "" +msgstr "항목을 삭제하지 못했습니다." #: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" -msgstr "" +msgstr "맞춤 표 필터가 활성화되었습니다." #: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 msgid "Delete selected records" -msgstr "" +msgstr "선택한 기록 삭제" #: src/tables/InvenTreeTableHeader.tsx:226 msgid "Refresh data" -msgstr "" +msgstr "데이터 새로 고침" #: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" -msgstr "" +msgstr "활성 필터" #: src/tables/TableHoverCard.tsx:35 #~ msgid "item-{idx}" @@ -9550,26 +9550,26 @@ msgstr "" #: src/tables/bom/BomTable.tsx:98 msgid "This BOM item is defined for a different parent" -msgstr "" +msgstr "이 BOM 항목은 다른 상위 항목에 대해 정의되었습니다." #: src/tables/bom/BomTable.tsx:114 msgid "Part Information" -msgstr "" +msgstr "부품정보" #: src/tables/bom/BomTable.tsx:117 msgid "This BOM item has not been validated" -msgstr "" +msgstr "이 BOM 항목은 아직 검증되지 않았습니다" #: src/tables/bom/BomTable.tsx:234 msgid "Substitutes" -msgstr "" +msgstr "대체 부품" #: src/tables/bom/BomTable.tsx:296 #: src/tables/sales/SalesOrderLineItemTable.tsx:137 #: src/tables/sales/SalesOrderLineItemTable.tsx:195 #: src/tables/sales/SalesOrderLineItemTable.tsx:212 msgid "Virtual part" -msgstr "" +msgstr "가상 부품" #: src/tables/bom/BomTable.tsx:301 #~ msgid "Create BOM Item" @@ -9579,7 +9579,7 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:282 #: src/tables/part/PartTable.tsx:146 msgid "External stock" -msgstr "" +msgstr "외부 재고" #: src/tables/bom/BomTable.tsx:310 #~ msgid "Show asssmbled items" @@ -9588,13 +9588,13 @@ msgstr "" #: src/tables/bom/BomTable.tsx:317 #: src/tables/build/BuildLineTable.tsx:245 msgid "Includes substitute stock" -msgstr "" +msgstr "대체재고 포함" #: src/tables/bom/BomTable.tsx:326 #: src/tables/build/BuildLineTable.tsx:255 #: src/tables/sales/SalesOrderLineItemTable.tsx:162 msgid "Includes variant stock" -msgstr "" +msgstr "변형 재고 포함" #: src/tables/bom/BomTable.tsx:331 #~ msgid "Edit Bom Item" @@ -9607,7 +9607,7 @@ msgstr "" #: src/tables/bom/BomTable.tsx:343 #: src/tables/part/PartTable.tsx:115 msgid "Building" -msgstr "" +msgstr "생산 중" #: src/tables/bom/BomTable.tsx:348 #~ msgid "Delete Bom Item" @@ -9629,176 +9629,176 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:498 #: src/tables/build/BuildLineTable.tsx:539 msgid "Consumable item" -msgstr "" +msgstr "소모성 아이템" #: src/tables/bom/BomTable.tsx:396 msgid "No available stock" -msgstr "" +msgstr "사용 가능한 재고 없음" #: src/tables/bom/BomTable.tsx:414 #: src/tables/build/BuildLineTable.tsx:219 msgid "Show testable items" -msgstr "" +msgstr "테스트 가능한 항목 표시" #: src/tables/bom/BomTable.tsx:419 msgid "Show trackable items" -msgstr "" +msgstr "추적 가능한 항목 표시" #: src/tables/bom/BomTable.tsx:423 #: src/tables/purchasing/ManufacturerPartParametricTable.tsx:42 #: src/tables/purchasing/ManufacturerPartTable.tsx:154 #: src/tables/purchasing/SupplierPartTable.tsx:259 msgid "Active Part" -msgstr "" +msgstr "활성 부품" #: src/tables/bom/BomTable.tsx:424 msgid "Show active items" -msgstr "" +msgstr "활성 항목 표시" #: src/tables/bom/BomTable.tsx:429 #: src/tables/build/BuildLineTable.tsx:214 msgid "Show assembled items" -msgstr "" +msgstr "조립 항목 표시" #: src/tables/bom/BomTable.tsx:434 msgid "Show virtual items" -msgstr "" +msgstr "가상 아이템 표시" #: src/tables/bom/BomTable.tsx:439 msgid "Show items with available stock" -msgstr "" +msgstr "재고가 있는 항목 표시" #: src/tables/bom/BomTable.tsx:444 msgid "Show items on order" -msgstr "" +msgstr "주문한 항목 표시" #: src/tables/bom/BomTable.tsx:448 msgid "Validated" -msgstr "" +msgstr "검증됨" #: src/tables/bom/BomTable.tsx:449 msgid "Show validated items" -msgstr "" +msgstr "검증된 항목 표시" #: src/tables/bom/BomTable.tsx:453 #: src/tables/bom/UsedInTable.tsx:85 msgid "Inherited" -msgstr "" +msgstr "상속됨" #: src/tables/bom/BomTable.tsx:454 #: src/tables/bom/UsedInTable.tsx:86 msgid "Show inherited items" -msgstr "" +msgstr "상속된 항목 표시" #: src/tables/bom/BomTable.tsx:458 msgid "Allow Variants" -msgstr "" +msgstr "변형 허용" #: src/tables/bom/BomTable.tsx:459 msgid "Show items which allow variant substitution" -msgstr "" +msgstr "변형 대체를 허용하는 항목 표시" #: src/tables/bom/BomTable.tsx:463 #: src/tables/bom/UsedInTable.tsx:90 #: src/tables/build/BuildLineTable.tsx:208 msgid "Optional" -msgstr "" +msgstr "선택 사항" #: src/tables/bom/BomTable.tsx:464 #: src/tables/bom/UsedInTable.tsx:91 msgid "Show optional items" -msgstr "" +msgstr "선택 항목 표시" #: src/tables/bom/BomTable.tsx:468 #: src/tables/build/BuildLineTable.tsx:203 msgid "Consumable" -msgstr "" +msgstr "소모품" #: src/tables/bom/BomTable.tsx:469 msgid "Show consumable items" -msgstr "" +msgstr "소모성 아이템 표시" #: src/tables/bom/BomTable.tsx:473 #: src/tables/part/PartTable.tsx:310 msgid "Has Pricing" -msgstr "" +msgstr "가격 있음" #: src/tables/bom/BomTable.tsx:474 msgid "Show items with pricing" -msgstr "" +msgstr "가격이 포함된 항목 표시" #: src/tables/bom/BomTable.tsx:496 msgid "Import BOM Data" -msgstr "" +msgstr "BOM 데이터 가져오기" #: src/tables/bom/BomTable.tsx:507 #: src/tables/bom/BomTable.tsx:631 msgid "Add BOM Item" -msgstr "" +msgstr "BOM 항목 추가" #: src/tables/bom/BomTable.tsx:512 msgid "BOM item created" -msgstr "" +msgstr "BOM 항목이 생성되었습니다." #: src/tables/bom/BomTable.tsx:519 #: src/tables/bom/UsedInTable.tsx:111 msgid "Edit BOM Item" -msgstr "" +msgstr "BOM 항목 편집" #: src/tables/bom/BomTable.tsx:521 #: src/tables/bom/UsedInTable.tsx:115 msgid "BOM item updated" -msgstr "" +msgstr "BOM 항목이 업데이트되었습니다." #: src/tables/bom/BomTable.tsx:528 msgid "Delete BOM Item" -msgstr "" +msgstr "BOM 항목 삭제" #: src/tables/bom/BomTable.tsx:529 msgid "BOM item deleted" -msgstr "" +msgstr "BOM 항목이 삭제되었습니다." #: src/tables/bom/BomTable.tsx:549 msgid "BOM item validated" -msgstr "" +msgstr "BOM 항목이 검증되었습니다." #: src/tables/bom/BomTable.tsx:558 msgid "Failed to validate BOM item" -msgstr "" +msgstr "BOM 항목을 검증하지 못했습니다." #: src/tables/bom/BomTable.tsx:570 msgid "View BOM" -msgstr "" +msgstr "BOM 보기" #: src/tables/bom/BomTable.tsx:581 msgid "Validate BOM Line" -msgstr "" +msgstr "BOM 행 검증" #: src/tables/bom/BomTable.tsx:600 msgid "Edit Substitutes" -msgstr "" +msgstr "대체 부품 편집" #: src/tables/bom/BomTable.tsx:625 msgid "Add BOM Items" -msgstr "" +msgstr "BOM 항목 추가" #: src/tables/bom/BomTable.tsx:633 msgid "Add a single BOM item" -msgstr "" +msgstr "단일 BOM 항목 추가" #: src/tables/bom/BomTable.tsx:637 #: src/tables/general/ParameterTable.tsx:202 #: src/tables/part/PartTable.tsx:549 msgid "Import from File" -msgstr "" +msgstr "파일에서 가져오기" #: src/tables/bom/BomTable.tsx:639 msgid "Import BOM items from a file" -msgstr "" +msgstr "파일에서 BOM 항목 가져오기" #: src/tables/bom/BomTable.tsx:662 msgid "Bill of materials cannot be edited, as the part is locked" -msgstr "" +msgstr "부품이 잠겨 있으므로 BOM을 편집할 수 없습니다." #: src/tables/bom/UsedInTable.tsx:41 #: src/tables/build/BuildLineTable.tsx:213 @@ -9807,29 +9807,29 @@ msgstr "" #: src/tables/part/PartTable.tsx:210 #: src/tables/stock/StockItemTable.tsx:187 msgid "Assembly" -msgstr "" +msgstr "조립품" #: src/tables/bom/UsedInTable.tsx:96 msgid "Show active assemblies" -msgstr "" +msgstr "활성 조립품 표시" #: src/tables/bom/UsedInTable.tsx:100 #: src/tables/part/PartTable.tsx:240 #: src/tables/part/PartVariantTable.tsx:30 msgid "Trackable" -msgstr "" +msgstr "추적 가능" #: src/tables/bom/UsedInTable.tsx:101 msgid "Show trackable assemblies" -msgstr "" +msgstr "추적 가능한 조립품 표시" #: src/tables/build/BuildAllocatedStockTable.tsx:67 msgid "Allocated to Output" -msgstr "" +msgstr "결과물에 할당됨" #: src/tables/build/BuildAllocatedStockTable.tsx:68 msgid "Show items allocated to a build output" -msgstr "" +msgstr "생산 결과물에 할당된 항목 표시" #: src/tables/build/BuildAllocatedStockTable.tsx:73 #: src/tables/build/BuildOrderTable.tsx:197 @@ -9847,7 +9847,7 @@ msgstr "" #: src/tables/sales/SalesOrderAllocationTable.tsx:123 #: src/tables/sales/SalesOrderShipmentTable.tsx:145 msgid "Order Status" -msgstr "" +msgstr "주문 상태" #: src/tables/build/BuildAllocatedStockTable.tsx:164 #~ msgid "Edit Build Item" @@ -9856,7 +9856,7 @@ msgstr "" #: src/tables/build/BuildAllocatedStockTable.tsx:166 #: src/tables/build/BuildLineTable.tsx:657 msgid "Edit Stock Allocation" -msgstr "" +msgstr "재고 할당 편집" #: src/tables/build/BuildAllocatedStockTable.tsx:174 #~ msgid "Delete Build Item" @@ -9866,7 +9866,7 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:670 #: src/tables/sales/SalesOrderAllocationTable.tsx:217 msgid "Remove Allocated Stock" -msgstr "" +msgstr "할당된 재고 제거" #: src/tables/build/BuildAllocatedStockTable.tsx:180 #: src/tables/build/BuildLineTable.tsx:663 @@ -9877,27 +9877,27 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:675 #: src/tables/sales/SalesOrderAllocationTable.tsx:220 msgid "Are you sure you want to remove this allocated stock from the order?" -msgstr "" +msgstr "할당된 재고를 주문에서 제거하시겠습니까?" #: src/tables/build/BuildAllocatedStockTable.tsx:199 #: src/tables/build/BuildLineTable.tsx:690 msgid "Consuming allocated stock" -msgstr "" +msgstr "할당된 재고를 소비합니다." #: src/tables/build/BuildAllocatedStockTable.tsx:200 #: src/tables/build/BuildLineTable.tsx:691 msgid "Stock consumed successfully" -msgstr "" +msgstr "재고가 성공적으로 소비되었습니다." #: src/tables/build/BuildAllocatedStockTable.tsx:260 msgid "Consume" -msgstr "" +msgstr "소비하다" #: src/tables/build/BuildAllocatedStockTable.tsx:277 #: src/tables/build/BuildLineTable.tsx:117 #: src/tables/sales/SalesOrderAllocationTable.tsx:247 msgid "Remove allocated stock" -msgstr "" +msgstr "할당된 재고 제거" #: src/tables/build/BuildLineTable.tsx:59 #~ msgid "Show lines with available stock" @@ -9905,11 +9905,11 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:126 msgid "View Stock Item" -msgstr "" +msgstr "재고 품목 보기" #: src/tables/build/BuildLineTable.tsx:189 msgid "Show fully allocated lines" -msgstr "" +msgstr "완전히 할당된 항목 표시" #: src/tables/build/BuildLineTable.tsx:189 #~ msgid "Show allocated lines" @@ -9917,90 +9917,90 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:194 msgid "Show fully consumed lines" -msgstr "" +msgstr "완전히 소모된 항목 표시" #: src/tables/build/BuildLineTable.tsx:199 msgid "Show items with sufficient available stock" -msgstr "" +msgstr "재고가 충분한 품목 표시" #: src/tables/build/BuildLineTable.tsx:204 msgid "Show consumable lines" -msgstr "" +msgstr "소모성 항목 표시" #: src/tables/build/BuildLineTable.tsx:209 msgid "Show optional lines" -msgstr "" +msgstr "선택 항목 표시" #: src/tables/build/BuildLineTable.tsx:218 #: src/tables/part/PartTable.tsx:234 msgid "Testable" -msgstr "" +msgstr "테스트 가능" #: src/tables/build/BuildLineTable.tsx:223 #: src/tables/stock/StockItemTable.tsx:242 msgid "Tracked" -msgstr "" +msgstr "추적됨" #: src/tables/build/BuildLineTable.tsx:224 msgid "Show tracked lines" -msgstr "" +msgstr "추적된 항목 표시" #: src/tables/build/BuildLineTable.tsx:229 msgid "Show items with stock on order" -msgstr "" +msgstr "주문된 재고가 있는 항목 표시" #: src/tables/build/BuildLineTable.tsx:264 #: src/tables/sales/SalesOrderLineItemTable.tsx:168 msgid "In production" -msgstr "" +msgstr "생산 중" #: src/tables/build/BuildLineTable.tsx:292 msgid "Insufficient stock" -msgstr "" +msgstr "재고 부족" #: src/tables/build/BuildLineTable.tsx:377 msgid "Gets Inherited" -msgstr "" +msgstr "상속됨" #: src/tables/build/BuildLineTable.tsx:390 msgid "Unit Quantity" -msgstr "" +msgstr "단위 수량" #: src/tables/build/BuildLineTable.tsx:417 msgid "Setup Quantity" -msgstr "" +msgstr "설정 수량" #: src/tables/build/BuildLineTable.tsx:426 msgid "Attrition" -msgstr "" +msgstr "마찰" #: src/tables/build/BuildLineTable.tsx:434 msgid "Rounding Multiple" -msgstr "" +msgstr "반올림 배수" #: src/tables/build/BuildLineTable.tsx:443 msgid "BOM Information" -msgstr "" +msgstr "BOM 정보" #: src/tables/build/BuildLineTable.tsx:517 #: src/tables/part/PartBuildAllocationsTable.tsx:102 msgid "Fully allocated" -msgstr "" +msgstr "완전히 할당됨" #: src/tables/build/BuildLineTable.tsx:565 #: src/tables/sales/SalesOrderLineItemTable.tsx:309 msgid "Create Build Order" -msgstr "" +msgstr "생산 주문 생성" #: src/tables/build/BuildLineTable.tsx:577 #: src/tables/build/BuildOutputTable.tsx:223 msgid "Allocating stock to build order" -msgstr "" +msgstr "생산 주문에 재고 할당 중" #: src/tables/build/BuildLineTable.tsx:578 #: src/tables/build/BuildOutputTable.tsx:224 msgid "Stock allocation complete" -msgstr "" +msgstr "재고 할당이 완료되었습니다" #: src/tables/build/BuildLineTable.tsx:585 #~ msgid "Auto allocation in progress" @@ -10015,11 +10015,11 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:247 #: src/tables/build/BuildOutputTable.tsx:482 msgid "Auto Allocate Stock" -msgstr "" +msgstr "재고 자동 할당" #: src/tables/build/BuildLineTable.tsx:603 msgid "Automatically allocate untracked BOM items to this build according to the selected options" -msgstr "" +msgstr "선택한 옵션에 따라 추적되지 않는 BOM 항목을 이 생산에 자동 할당합니다" #: src/tables/build/BuildLineTable.tsx:623 #: src/tables/build/BuildLineTable.tsx:637 @@ -10028,28 +10028,28 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:393 #: src/tables/build/BuildOutputTable.tsx:398 msgid "Deallocate Stock" -msgstr "" +msgstr "재고 할당 해제" #: src/tables/build/BuildLineTable.tsx:639 msgid "Deallocate all untracked stock for this build order" -msgstr "" +msgstr "이 생산 주문의 모든 비추적 재고 할당 해제" #: src/tables/build/BuildLineTable.tsx:641 msgid "Deallocate stock from the selected line item" -msgstr "" +msgstr "선택한 항목에서 재고 할당 해제" #: src/tables/build/BuildLineTable.tsx:645 msgid "Stock has been deallocated" -msgstr "" +msgstr "재고 할당이 취소되었습니다" #: src/tables/build/BuildLineTable.tsx:800 msgid "Build Stock" -msgstr "" +msgstr "생산 재고" #: src/tables/build/BuildLineTable.tsx:813 #: src/tables/sales/SalesOrderLineItemTable.tsx:485 msgid "View Part" -msgstr "" +msgstr "부품 보기" #: src/tables/build/BuildOrderTable.tsx:116 #~ msgid "Cascade" @@ -10083,28 +10083,28 @@ msgstr "" #: src/tables/sales/ReturnOrderTable.tsx:94 #: src/tables/sales/SalesOrderTable.tsx:92 msgid "Has Target Date" -msgstr "" +msgstr "목표 날짜 있음" #: src/tables/build/BuildOrderTable.tsx:172 #: src/tables/purchasing/PurchaseOrderTable.tsx:95 #: src/tables/sales/ReturnOrderTable.tsx:95 #: src/tables/sales/SalesOrderTable.tsx:93 msgid "Show orders with a target date" -msgstr "" +msgstr "목표 날짜가 포함된 주문 표시" #: src/tables/build/BuildOrderTable.tsx:177 #: src/tables/purchasing/PurchaseOrderTable.tsx:100 #: src/tables/sales/ReturnOrderTable.tsx:100 #: src/tables/sales/SalesOrderTable.tsx:98 msgid "Has Start Date" -msgstr "" +msgstr "시작일이 있음" #: src/tables/build/BuildOrderTable.tsx:178 #: src/tables/purchasing/PurchaseOrderTable.tsx:101 #: src/tables/sales/ReturnOrderTable.tsx:101 #: src/tables/sales/SalesOrderTable.tsx:99 msgid "Show orders with a start date" -msgstr "" +msgstr "시작 날짜가 포함된 주문 표시" #: src/tables/build/BuildOrderTable.tsx:179 #~ msgid "Filter by user who issued this order" @@ -10112,7 +10112,7 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:102 msgid "Build Output Stock Allocation" -msgstr "" +msgstr "생산 결과물 재고 할당" #: src/tables/build/BuildOutputTable.tsx:161 #~ msgid "Delete build output" @@ -10124,7 +10124,7 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:248 msgid "Automatically allocate tracked BOM items to this build according to the selected options" -msgstr "" +msgstr "선택한 옵션에 따라 추적되는 BOM 항목을 이 생산에 자동 할당합니다" #: src/tables/build/BuildOutputTable.tsx:304 #~ msgid "Edit build output" @@ -10133,34 +10133,34 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:327 #: src/tables/build/BuildOutputTable.tsx:523 msgid "Add Build Output" -msgstr "" +msgstr "생산 결과물 추가" #: src/tables/build/BuildOutputTable.tsx:330 msgid "Build output created" -msgstr "" +msgstr "생산 결과물이 생성되었습니다" #: src/tables/build/BuildOutputTable.tsx:384 #: src/tables/build/BuildOutputTable.tsx:593 msgid "Edit Build Output" -msgstr "" +msgstr "생산 결과물 편집" #: src/tables/build/BuildOutputTable.tsx:400 msgid "This action will deallocate all stock from the selected build output" -msgstr "" +msgstr "이 작업은 선택한 생산 결과물의 모든 재고 할당을 해제합니다" #: src/tables/build/BuildOutputTable.tsx:425 msgid "Serialize Build Output" -msgstr "" +msgstr "생산 결과물 일련번호 지정" #: src/tables/build/BuildOutputTable.tsx:443 #: src/tables/part/PartTestResultTable.tsx:319 #: src/tables/stock/StockItemTable.tsx:182 msgid "Filter by stock status" -msgstr "" +msgstr "재고 상태로 필터링" #: src/tables/build/BuildOutputTable.tsx:490 msgid "Complete selected outputs" -msgstr "" +msgstr "선택한 결과물 완료" #: src/tables/build/BuildOutputTable.tsx:498 #~ msgid "View Build Output" @@ -10168,80 +10168,80 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:501 msgid "Scrap selected outputs" -msgstr "" +msgstr "선택한 결과물 폐기" #: src/tables/build/BuildOutputTable.tsx:512 msgid "Cancel selected outputs" -msgstr "" +msgstr "선택한 결과물 취소" #: src/tables/build/BuildOutputTable.tsx:543 msgid "Allocate" -msgstr "" +msgstr "할당하다" #: src/tables/build/BuildOutputTable.tsx:544 msgid "Allocate stock to build output" -msgstr "" +msgstr "생산 결과물에 재고 할당" #: src/tables/build/BuildOutputTable.tsx:557 msgid "Deallocate" -msgstr "" +msgstr "할당 해제" #: src/tables/build/BuildOutputTable.tsx:558 msgid "Deallocate stock from build output" -msgstr "" +msgstr "생산 결과물에서 재고 할당 해제" #: src/tables/build/BuildOutputTable.tsx:572 msgid "Serialize build output" -msgstr "" +msgstr "생산 결과물 일련번호 지정" #: src/tables/build/BuildOutputTable.tsx:583 msgid "Complete build output" -msgstr "" +msgstr "생산 결과물 완료" #: src/tables/build/BuildOutputTable.tsx:600 msgid "Scrap" -msgstr "" +msgstr "권투 시합" #: src/tables/build/BuildOutputTable.tsx:601 msgid "Scrap build output" -msgstr "" +msgstr "생산 결과물 폐기" #: src/tables/build/BuildOutputTable.tsx:611 msgid "Cancel build output" -msgstr "" +msgstr "생산 결과물 취소" #: src/tables/build/BuildOutputTable.tsx:675 msgid "Required Tests" -msgstr "" +msgstr "필수 테스트" #: src/tables/build/BuildOutputTable.tsx:751 msgid "External Build" -msgstr "" +msgstr "외부 생산" #: src/tables/build/BuildOutputTable.tsx:753 msgid "This build order is fulfilled by an external purchase order" -msgstr "" +msgstr "이 생산 주문은 외부 발주서로 이행됩니다" #: src/tables/company/AddressTable.tsx:122 #: src/tables/company/AddressTable.tsx:187 msgid "Add Address" -msgstr "" +msgstr "주소 추가" #: src/tables/company/AddressTable.tsx:127 msgid "Address created" -msgstr "" +msgstr "주소가 생성되었습니다" #: src/tables/company/AddressTable.tsx:136 msgid "Edit Address" -msgstr "" +msgstr "주소 편집" #: src/tables/company/AddressTable.tsx:144 msgid "Delete Address" -msgstr "" +msgstr "주소 삭제" #: src/tables/company/AddressTable.tsx:145 msgid "Are you sure you want to delete this address?" -msgstr "" +msgstr "이 주소를 삭제하시겠습니까?" #: src/tables/company/CompanyTable.tsx:71 #~ msgid "New Company" @@ -10250,43 +10250,43 @@ msgstr "" #: src/tables/company/CompanyTable.tsx:79 #: src/tables/company/CompanyTable.tsx:130 msgid "Add Company" -msgstr "" +msgstr "회사 추가" #: src/tables/company/CompanyTable.tsx:102 msgid "Show active companies" -msgstr "" +msgstr "활성 회사 표시" #: src/tables/company/CompanyTable.tsx:107 msgid "Show companies which are suppliers" -msgstr "" +msgstr "공급업체인 회사 표시" #: src/tables/company/CompanyTable.tsx:112 msgid "Show companies which are manufacturers" -msgstr "" +msgstr "제조업체인 회사 보기" #: src/tables/company/CompanyTable.tsx:117 msgid "Show companies which are customers" -msgstr "" +msgstr "고객인 회사 표시" #: src/tables/company/ContactTable.tsx:99 msgid "Edit Contact" -msgstr "" +msgstr "연락처 편집" #: src/tables/company/ContactTable.tsx:106 msgid "Add Contact" -msgstr "" +msgstr "연락처 추가" #: src/tables/company/ContactTable.tsx:117 msgid "Delete Contact" -msgstr "" +msgstr "연락처 삭제" #: src/tables/company/ContactTable.tsx:158 msgid "Add contact" -msgstr "" +msgstr "연락처 추가" #: src/tables/general/AttachmentTable.tsx:108 msgid "Uploading file {filename}" -msgstr "" +msgstr "{filename} 파일 업로드 중" #: src/tables/general/AttachmentTable.tsx:139 #~ msgid "File uploaded" @@ -10299,23 +10299,23 @@ msgstr "" #: src/tables/general/AttachmentTable.tsx:160 #: src/tables/general/AttachmentTable.tsx:174 msgid "Uploading File" -msgstr "" +msgstr "파일 업로드 중" #: src/tables/general/AttachmentTable.tsx:185 msgid "File Uploaded" -msgstr "" +msgstr "파일이 업로드됨" #: src/tables/general/AttachmentTable.tsx:186 msgid "File {name} uploaded successfully" -msgstr "" +msgstr "{name} 파일이 성공적으로 업로드되었습니다" #: src/tables/general/AttachmentTable.tsx:202 msgid "File could not be uploaded" -msgstr "" +msgstr "파일을 업로드할 수 없습니다." #: src/tables/general/AttachmentTable.tsx:253 msgid "Upload Attachment" -msgstr "" +msgstr "첨부파일 업로드" #: src/tables/general/AttachmentTable.tsx:254 #~ msgid "Upload attachment" @@ -10323,55 +10323,55 @@ msgstr "" #: src/tables/general/AttachmentTable.tsx:263 msgid "Edit Attachment" -msgstr "" +msgstr "첨부파일 편집" #: src/tables/general/AttachmentTable.tsx:277 msgid "Delete Attachment" -msgstr "" +msgstr "첨부파일 삭제" #: src/tables/general/AttachmentTable.tsx:287 msgid "Is Link" -msgstr "" +msgstr "링크인가" #: src/tables/general/AttachmentTable.tsx:288 msgid "Show link attachments" -msgstr "" +msgstr "링크 첨부파일 표시" #: src/tables/general/AttachmentTable.tsx:292 msgid "Is File" -msgstr "" +msgstr "파일임" #: src/tables/general/AttachmentTable.tsx:293 msgid "Show file attachments" -msgstr "" +msgstr "파일 첨부파일 표시" #: src/tables/general/AttachmentTable.tsx:302 msgid "Add attachment" -msgstr "" +msgstr "첨부파일 추가" #: src/tables/general/AttachmentTable.tsx:313 msgid "Add external link" -msgstr "" +msgstr "외부 링크 추가" #: src/tables/general/AttachmentTable.tsx:361 msgid "No attachments found" -msgstr "" +msgstr "첨부파일이 없습니다." #: src/tables/general/AttachmentTable.tsx:400 msgid "Drag attachment file here to upload" -msgstr "" +msgstr "첨부파일을 여기에 끌어다 놓아 업로드하세요" #: src/tables/general/BarcodeScanTable.tsx:35 msgid "Item" -msgstr "" +msgstr "목" #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" -msgstr "" +msgstr "모델" #: src/tables/general/BarcodeScanTable.tsx:75 msgid "View Item" -msgstr "" +msgstr "항목 보기" #: src/tables/general/ExtraLineItemTable.tsx:97 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:298 @@ -10381,167 +10381,167 @@ msgstr "" #: src/tables/sales/SalesOrderLineItemTable.tsx:248 #: src/tables/sales/SalesOrderLineItemTable.tsx:355 msgid "Add Line Item" -msgstr "" +msgstr "항목 추가" #: src/tables/general/ExtraLineItemTable.tsx:110 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:321 #: src/tables/sales/ReturnOrderLineItemTable.tsx:98 #: src/tables/sales/SalesOrderLineItemTable.tsx:267 msgid "Edit Line Item" -msgstr "" +msgstr "항목 편집" #: src/tables/general/ExtraLineItemTable.tsx:119 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:330 #: src/tables/sales/ReturnOrderLineItemTable.tsx:107 #: src/tables/sales/SalesOrderLineItemTable.tsx:276 msgid "Delete Line Item" -msgstr "" +msgstr "항목 삭제" #: src/tables/general/ExtraLineItemTable.tsx:157 msgid "Add Extra Line Item" -msgstr "" +msgstr "추가 항목 추가" #: src/tables/general/ParameterTable.tsx:88 msgid "Internal Units" -msgstr "" +msgstr "내부 단위" #: src/tables/general/ParameterTable.tsx:108 #: src/tables/general/ParameterTable.tsx:123 #: src/tables/settings/TemplateTable.tsx:262 msgid "Updated By" -msgstr "" +msgstr "업데이트한 사용자" #: src/tables/general/ParameterTable.tsx:118 msgid "Show parameters for enabled templates" -msgstr "" +msgstr "활성화된 템플릿의 파라미터 표시" #: src/tables/general/ParameterTable.tsx:124 msgid "Filter by user who last updated the parameter" -msgstr "" +msgstr "파라미터를 마지막으로 업데이트한 사용자로 필터링" #: src/tables/general/ParameterTable.tsx:149 msgid "Import Parameters" -msgstr "" +msgstr "매개변수 가져오기" #: src/tables/general/ParameterTable.tsx:160 #: src/tables/general/ParametricDataTable.tsx:271 #: src/tables/general/ParametricDataTable.tsx:402 msgid "Add Parameter" -msgstr "" +msgstr "매개변수 추가" #: src/tables/general/ParameterTable.tsx:171 #: src/tables/general/ParameterTable.tsx:218 #: src/tables/general/ParametricDataTable.tsx:295 msgid "Edit Parameter" -msgstr "" +msgstr "매개변수 편집" #: src/tables/general/ParameterTable.tsx:179 #: src/tables/general/ParameterTable.tsx:226 msgid "Delete Parameter" -msgstr "" +msgstr "매개변수 삭제" #: src/tables/general/ParameterTable.tsx:187 msgid "Add Parameters" -msgstr "" +msgstr "매개변수 추가" #: src/tables/general/ParameterTable.tsx:193 msgid "Create Parameter" -msgstr "" +msgstr "매개변수 생성" #: src/tables/general/ParameterTable.tsx:195 msgid "Create a new parameter" -msgstr "" +msgstr "새 매개변수 생성" #: src/tables/general/ParameterTable.tsx:204 msgid "Import parameters from a file" -msgstr "" +msgstr "파일에서 매개변수 가져오기" #: src/tables/general/ParameterTemplateTable.tsx:52 #: src/tables/general/ParameterTemplateTable.tsx:201 msgid "Add Parameter Template" -msgstr "" +msgstr "매개변수 템플릿 추가" #: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Duplicate Parameter Template" -msgstr "" +msgstr "중복 매개변수 템플릿" #: src/tables/general/ParameterTemplateTable.tsx:82 msgid "Delete Parameter Template" -msgstr "" +msgstr "매개변수 템플릿 삭제" #: src/tables/general/ParameterTemplateTable.tsx:89 msgid "Edit Parameter Template" -msgstr "" +msgstr "매개변수 템플릿 편집" #: src/tables/general/ParameterTemplateTable.tsx:142 msgid "Checkbox" -msgstr "" +msgstr "체크박스" #: src/tables/general/ParameterTemplateTable.tsx:143 msgid "Show checkbox templates" -msgstr "" +msgstr "체크박스 템플릿 표시" #: src/tables/general/ParameterTemplateTable.tsx:147 msgid "Has choices" -msgstr "" +msgstr "선택권 있음" #: src/tables/general/ParameterTemplateTable.tsx:148 msgid "Show templates with choices" -msgstr "" +msgstr "선택 항목이 있는 템플릿 표시" #: src/tables/general/ParameterTemplateTable.tsx:152 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" -msgstr "" +msgstr "단위 있음" #: src/tables/general/ParameterTemplateTable.tsx:153 msgid "Show templates with units" -msgstr "" +msgstr "단위가 포함된 템플릿 표시" #: src/tables/general/ParameterTemplateTable.tsx:158 msgid "Show enabled templates" -msgstr "" +msgstr "활성화된 템플릿 표시" #: src/tables/general/ParameterTemplateTable.tsx:162 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" -msgstr "" +msgstr "모델 유형" #: src/tables/general/ParameterTemplateTable.tsx:163 msgid "Filter by model type" -msgstr "" +msgstr "모델 유형으로 필터링" #: src/tables/general/ParametricDataTable.tsx:79 msgid "Click to edit" -msgstr "" +msgstr "수정하려면 클릭하세요." #: src/tables/general/ParametricDataTableFilters.tsx:36 msgid "True" -msgstr "" +msgstr "진실" #: src/tables/general/ParametricDataTableFilters.tsx:37 msgid "False" -msgstr "" +msgstr "거짓" #: src/tables/general/ParametricDataTableFilters.tsx:47 #: src/tables/general/ParametricDataTableFilters.tsx:80 msgid "Select a choice" -msgstr "" +msgstr "선택지를 고르세요" #: src/tables/general/ParametricDataTableFilters.tsx:100 msgid "Enter a value" -msgstr "" +msgstr "값을 입력하세요" #: src/tables/machine/MachineListTable.tsx:133 msgid "Machine restarted" -msgstr "" +msgstr "장비가 재시작되었습니다" #: src/tables/machine/MachineListTable.tsx:235 #: src/tables/machine/MachineListTable.tsx:297 #: src/tables/machine/MachineListTable.tsx:729 msgid "Edit machine" -msgstr "" +msgstr "장비 편집" #: src/tables/machine/MachineListTable.tsx:235 #~ msgid "Are you sure you want to remove the machine \"{0}\"?" @@ -10550,26 +10550,26 @@ msgstr "" #: src/tables/machine/MachineListTable.tsx:249 #: src/tables/machine/MachineListTable.tsx:301 msgid "Delete machine" -msgstr "" +msgstr "장비 삭제" #: src/tables/machine/MachineListTable.tsx:250 #: src/tables/machine/MachineListTable.tsx:692 msgid "Machine successfully deleted." -msgstr "" +msgstr "장비가 성공적으로 삭제되었습니다." #: src/tables/machine/MachineListTable.tsx:255 #: src/tables/machine/MachineListTable.tsx:697 msgid "Are you sure you want to remove this machine?" -msgstr "" +msgstr "이 장비를 삭제하시겠습니까?" #: src/tables/machine/MachineListTable.tsx:285 msgid "Machine" -msgstr "" +msgstr "장비" #: src/tables/machine/MachineListTable.tsx:290 #: src/tables/machine/MachineListTable.tsx:568 msgid "Restart required" -msgstr "" +msgstr "다시 시작해야 함" #: src/tables/machine/MachineListTable.tsx:291 #~ msgid "Machine information" @@ -10577,19 +10577,19 @@ msgstr "" #: src/tables/machine/MachineListTable.tsx:294 msgid "Machine Actions" -msgstr "" +msgstr "장비 작업" #: src/tables/machine/MachineListTable.tsx:306 msgid "Restart" -msgstr "" +msgstr "다시 시작" #: src/tables/machine/MachineListTable.tsx:308 msgid "Restart machine" -msgstr "" +msgstr "장비 재시작" #: src/tables/machine/MachineListTable.tsx:310 msgid "manual restart required" -msgstr "" +msgstr "수동으로 다시 시작해야 함" #: src/tables/machine/MachineListTable.tsx:315 #~ msgid "Machine Information" @@ -10597,29 +10597,29 @@ msgstr "" #: src/tables/machine/MachineListTable.tsx:343 msgid "General" -msgstr "" +msgstr "일반적인" #: src/tables/machine/MachineListTable.tsx:353 #: src/tables/machine/MachineListTable.tsx:804 msgid "Machine Type" -msgstr "" +msgstr "장비 유형" #: src/tables/machine/MachineListTable.tsx:366 msgid "Machine Driver" -msgstr "" +msgstr "장비 드라이버" #: src/tables/machine/MachineListTable.tsx:381 msgid "Initialized" -msgstr "" +msgstr "초기화됨" #: src/tables/machine/MachineListTable.tsx:410 #: src/tables/machine/MachineTypeTable.tsx:305 msgid "No errors reported" -msgstr "" +msgstr "보고된 오류 없음" #: src/tables/machine/MachineListTable.tsx:431 msgid "Properties" -msgstr "" +msgstr "속성" #: src/tables/machine/MachineListTable.tsx:494 #~ msgid "Create machine" @@ -10627,7 +10627,7 @@ msgstr "" #: src/tables/machine/MachineListTable.tsx:521 msgid "Driver Settings" -msgstr "" +msgstr "드라이버 설정" #: src/tables/machine/MachineListTable.tsx:561 #~ msgid "Machine detail" @@ -10635,40 +10635,40 @@ msgstr "" #: src/tables/machine/MachineListTable.tsx:648 msgid "Add Machine" -msgstr "" +msgstr "장비 추가" #: src/tables/machine/MachineListTable.tsx:691 #: src/tables/machine/MachineListTable.tsx:736 msgid "Delete Machine" -msgstr "" +msgstr "장비 삭제" #: src/tables/machine/MachineListTable.tsx:704 msgid "Edit Machine" -msgstr "" +msgstr "장비 편집" #: src/tables/machine/MachineListTable.tsx:718 msgid "Restart Machine" -msgstr "" +msgstr "장비 재시작" #: src/tables/machine/MachineListTable.tsx:749 msgid "Add machine" -msgstr "" +msgstr "장비 추가" #: src/tables/machine/MachineListTable.tsx:765 msgid "Machine Detail" -msgstr "" +msgstr "장비 상세 정보" #: src/tables/machine/MachineListTable.tsx:813 msgid "Driver" -msgstr "" +msgstr "운전사" #: src/tables/machine/MachineTypeTable.tsx:72 msgid "Driver Type" -msgstr "" +msgstr "드라이버 유형" #: src/tables/machine/MachineTypeTable.tsx:76 msgid "Builtin driver" -msgstr "" +msgstr "내장 드라이버" #: src/tables/machine/MachineTypeTable.tsx:99 #~ msgid "Machine type information" @@ -10676,15 +10676,15 @@ msgstr "" #: src/tables/machine/MachineTypeTable.tsx:126 msgid "Not Found" -msgstr "" +msgstr "찾을 수 없음" #: src/tables/machine/MachineTypeTable.tsx:129 msgid "Machine type not found." -msgstr "" +msgstr "장비 유형을 찾을 수 없습니다." #: src/tables/machine/MachineTypeTable.tsx:139 msgid "Machine Type Information" -msgstr "" +msgstr "장비 유형 정보" #: src/tables/machine/MachineTypeTable.tsx:148 #~ msgid "Available drivers" @@ -10693,33 +10693,33 @@ msgstr "" #: src/tables/machine/MachineTypeTable.tsx:154 #: src/tables/machine/MachineTypeTable.tsx:253 msgid "Slug" -msgstr "" +msgstr "강타" #: src/tables/machine/MachineTypeTable.tsx:165 #: src/tables/machine/MachineTypeTable.tsx:274 msgid "Provider plugin" -msgstr "" +msgstr "공급자 플러그인" #: src/tables/machine/MachineTypeTable.tsx:177 #: src/tables/machine/MachineTypeTable.tsx:286 msgid "Provider file" -msgstr "" +msgstr "공급자 파일" #: src/tables/machine/MachineTypeTable.tsx:192 msgid "Available Drivers" -msgstr "" +msgstr "사용 가능한 드라이버" #: src/tables/machine/MachineTypeTable.tsx:232 msgid "Machine driver not found." -msgstr "" +msgstr "장비 드라이버를 찾을 수 없습니다." #: src/tables/machine/MachineTypeTable.tsx:240 msgid "Machine driver information" -msgstr "" +msgstr "장비 드라이버 정보" #: src/tables/machine/MachineTypeTable.tsx:260 msgid "Machine type" -msgstr "" +msgstr "장비 유형" #: src/tables/machine/MachineTypeTable.tsx:338 #~ msgid "Machine type detail" @@ -10731,41 +10731,41 @@ msgstr "" #: src/tables/machine/MachineTypeTable.tsx:360 msgid "Builtin type" -msgstr "" +msgstr "내장형" #: src/tables/machine/MachineTypeTable.tsx:369 msgid "Machine Type Detail" -msgstr "" +msgstr "장비 유형 상세 정보" #: src/tables/machine/MachineTypeTable.tsx:379 msgid "Machine Driver Detail" -msgstr "" +msgstr "장비 드라이버 상세 정보" #: src/tables/notifications/NotificationTable.tsx:26 msgid "Age" -msgstr "" +msgstr "기간" #: src/tables/notifications/NotificationTable.tsx:37 msgid "Notification" -msgstr "" +msgstr "공고" #: src/tables/notifications/NotificationTable.tsx:41 #: src/tables/plugin/PluginErrorTable.tsx:39 #: src/tables/settings/ErrorTable.tsx:50 msgid "Message" -msgstr "" +msgstr "메시지" #: src/tables/part/ParametricPartTable.tsx:20 msgid "Show active parts" -msgstr "" +msgstr "활성 부품 표시" #: src/tables/part/ParametricPartTable.tsx:25 msgid "Show locked parts" -msgstr "" +msgstr "잠긴 부분 표시" #: src/tables/part/ParametricPartTable.tsx:30 msgid "Show assembly parts" -msgstr "" +msgstr "조립 부품 표시" #: src/tables/part/ParametricPartTable.tsx:82 #~ msgid "Edit parameter" @@ -10783,75 +10783,75 @@ msgstr "" #: src/tables/part/PartBuildAllocationsTable.tsx:64 msgid "Assembly IPN" -msgstr "" +msgstr "조립 IPN" #: src/tables/part/PartBuildAllocationsTable.tsx:73 msgid "Part IPN" -msgstr "" +msgstr "부분 IPN" #: src/tables/part/PartBuildAllocationsTable.tsx:91 msgid "Required Stock" -msgstr "" +msgstr "필수재고" #: src/tables/part/PartBuildAllocationsTable.tsx:124 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:382 msgid "View Build Order" -msgstr "" +msgstr "생산 주문 보기" #: src/tables/part/PartCategoryTable.tsx:52 msgid "You are subscribed to notifications for this category" -msgstr "" +msgstr "이 카테고리의 알림을 구독 중입니다" #: src/tables/part/PartCategoryTable.tsx:86 #: src/tables/part/PartTable.tsx:222 msgid "Include Subcategories" -msgstr "" +msgstr "하위 카테고리 포함" #: src/tables/part/PartCategoryTable.tsx:87 msgid "Include subcategories in results" -msgstr "" +msgstr "결과에 하위 카테고리 포함" #: src/tables/part/PartCategoryTable.tsx:92 msgid "Show structural categories" -msgstr "" +msgstr "구조적 카테고리 표시" #: src/tables/part/PartCategoryTable.tsx:97 msgid "Show categories to which the user is subscribed" -msgstr "" +msgstr "사용자가 구독 중인 카테고리 표시" #: src/tables/part/PartCategoryTable.tsx:106 msgid "New Part Category" -msgstr "" +msgstr "새 부품 범주" #: src/tables/part/PartCategoryTable.tsx:133 msgid "Set Parent Category" -msgstr "" +msgstr "상위 카테고리 설정" #: src/tables/part/PartCategoryTable.tsx:151 #: src/tables/stock/StockLocationTable.tsx:150 msgid "Set Parent" -msgstr "" +msgstr "상위 설정" #: src/tables/part/PartCategoryTable.tsx:153 msgid "Set parent category for the selected items" -msgstr "" +msgstr "선택한 항목의 상위 카테고리 설정" #: src/tables/part/PartCategoryTable.tsx:164 msgid "Add Part Category" -msgstr "" +msgstr "부품 카테고리 추가" #: src/tables/part/PartCategoryTemplateTable.tsx:49 #: src/tables/part/PartCategoryTemplateTable.tsx:143 msgid "Add Category Parameter" -msgstr "" +msgstr "카테고리 매개변수 추가" #: src/tables/part/PartCategoryTemplateTable.tsx:57 msgid "Edit Category Parameter" -msgstr "" +msgstr "카테고리 매개변수 편집" #: src/tables/part/PartCategoryTemplateTable.tsx:65 msgid "Delete Category Parameter" -msgstr "" +msgstr "카테고리 매개변수 삭제" #: src/tables/part/PartCategoryTemplateTable.tsx:93 #~ msgid "[{0}]" @@ -10877,104 +10877,104 @@ msgstr "" #: src/tables/part/PartPurchaseOrdersTable.tsx:79 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:193 msgid "Total Quantity" -msgstr "" +msgstr "총수량" #: src/tables/part/PartPurchaseOrdersTable.tsx:123 msgid "Show pending orders" -msgstr "" +msgstr "보류 중인 주문 표시" #: src/tables/part/PartPurchaseOrdersTable.tsx:128 msgid "Show received items" -msgstr "" +msgstr "입고된 항목 표시" #: src/tables/part/PartSalesAllocationsTable.tsx:88 #: src/tables/sales/SalesOrderShipmentTable.tsx:258 msgid "View Sales Order" -msgstr "" +msgstr "판매 주문 보기" #: src/tables/part/PartTable.tsx:100 msgid "Minimum stock" -msgstr "" +msgstr "최소 재고" #: src/tables/part/PartTable.tsx:199 msgid "Filter by part active status" -msgstr "" +msgstr "부품 활성 상태로 필터링" #: src/tables/part/PartTable.tsx:205 msgid "Filter by part locked status" -msgstr "" +msgstr "부품 잠금 상태로 필터링" #: src/tables/part/PartTable.tsx:211 msgid "Filter by assembly attribute" -msgstr "" +msgstr "조립 속성으로 필터링" #: src/tables/part/PartTable.tsx:216 msgid "BOM Valid" -msgstr "" +msgstr "유효한 BOM" #: src/tables/part/PartTable.tsx:217 msgid "Filter by parts with a valid BOM" -msgstr "" +msgstr "유효한 BOM이 있는 부품으로 필터링" #: src/tables/part/PartTable.tsx:223 msgid "Include parts in subcategories" -msgstr "" +msgstr "하위 범주에 부품 포함" #: src/tables/part/PartTable.tsx:229 msgid "Filter by component attribute" -msgstr "" +msgstr "구성품 속성으로 필터링" #: src/tables/part/PartTable.tsx:235 msgid "Filter by testable attribute" -msgstr "" +msgstr "테스트 가능 속성으로 필터링" #: src/tables/part/PartTable.tsx:241 msgid "Filter by trackable attribute" -msgstr "" +msgstr "추적 가능 속성으로 필터링" #: src/tables/part/PartTable.tsx:247 msgid "Filter by parts which have units" -msgstr "" +msgstr "단위가 있는 부품으로 필터링" #: src/tables/part/PartTable.tsx:252 msgid "Has IPN" -msgstr "" +msgstr "IPN 있음" #: src/tables/part/PartTable.tsx:253 msgid "Filter by parts which have an internal part number" -msgstr "" +msgstr "내부 부품 번호가 있는 부품으로 필터링" #: src/tables/part/PartTable.tsx:258 msgid "Has Stock" -msgstr "" +msgstr "재고 있음" #: src/tables/part/PartTable.tsx:259 msgid "Filter by parts which have stock" -msgstr "" +msgstr "재고가 있는 부품으로 필터링" #: src/tables/part/PartTable.tsx:265 msgid "Filter by parts which have low stock" -msgstr "" +msgstr "재고가 부족한 부품으로 필터링" #: src/tables/part/PartTable.tsx:270 msgid "Purchaseable" -msgstr "" +msgstr "구매 가능" #: src/tables/part/PartTable.tsx:271 msgid "Filter by parts which are purchaseable" -msgstr "" +msgstr "구매 가능한 부품으로 필터링" #: src/tables/part/PartTable.tsx:276 msgid "Salable" -msgstr "" +msgstr "팔리는" #: src/tables/part/PartTable.tsx:277 msgid "Filter by parts which are salable" -msgstr "" +msgstr "판매 가능한 부품으로 필터링" #: src/tables/part/PartTable.tsx:283 msgid "Filter by parts which are virtual" -msgstr "" +msgstr "가상 부품으로 필터링" #: src/tables/part/PartTable.tsx:287 #~ msgid "Not Virtual" @@ -10982,43 +10982,43 @@ msgstr "" #: src/tables/part/PartTable.tsx:288 msgid "Is Template" -msgstr "" +msgstr "템플릿임" #: src/tables/part/PartTable.tsx:289 msgid "Filter by parts which are templates" -msgstr "" +msgstr "템플릿 부품으로 필터링" #: src/tables/part/PartTable.tsx:294 msgid "Is Variant" -msgstr "" +msgstr "변형인가" #: src/tables/part/PartTable.tsx:295 msgid "Filter by parts which are variants" -msgstr "" +msgstr "변형 부품으로 필터링" #: src/tables/part/PartTable.tsx:300 msgid "Is Revision" -msgstr "" +msgstr "리비전임" #: src/tables/part/PartTable.tsx:301 msgid "Filter by parts which are revisions" -msgstr "" +msgstr "리비전 부품으로 필터링" #: src/tables/part/PartTable.tsx:305 msgid "Has Revisions" -msgstr "" +msgstr "리비전 있음" #: src/tables/part/PartTable.tsx:306 msgid "Filter by parts which have revisions" -msgstr "" +msgstr "리비전이 있는 부품으로 필터링" #: src/tables/part/PartTable.tsx:311 msgid "Filter by parts which have pricing information" -msgstr "" +msgstr "가격 정보가 있는 부품으로 필터링" #: src/tables/part/PartTable.tsx:317 msgid "Filter by parts which have available stock" -msgstr "" +msgstr "사용 가능한 재고가 있는 부품으로 필터링" #: src/tables/part/PartTable.tsx:322 #~ msgid "Has Stocktake" @@ -11026,7 +11026,7 @@ msgstr "" #: src/tables/part/PartTable.tsx:323 msgid "Filter by parts to which the user is subscribed" -msgstr "" +msgstr "사용자가 구독한 부품으로 필터링" #: src/tables/part/PartTable.tsx:323 #~ msgid "Filter by parts which have stocktake information" @@ -11034,44 +11034,44 @@ msgstr "" #: src/tables/part/PartTable.tsx:378 msgid "Import Parts" -msgstr "" +msgstr "부품 수입" #: src/tables/part/PartTable.tsx:467 #: src/tables/part/PartTable.tsx:515 msgid "Set Category" -msgstr "" +msgstr "카테고리 설정" #: src/tables/part/PartTable.tsx:517 msgid "Set category for selected parts" -msgstr "" +msgstr "선택한 부품에 대한 카테고리 설정" #: src/tables/part/PartTable.tsx:527 msgid "Order selected parts" -msgstr "" +msgstr "선택한 부품 주문" #: src/tables/part/PartTable.tsx:537 msgid "Add Parts" -msgstr "" +msgstr "부품 추가" #: src/tables/part/PartTable.tsx:543 msgid "Create Part" -msgstr "" +msgstr "부품 생성" #: src/tables/part/PartTable.tsx:545 msgid "Create a new part" -msgstr "" +msgstr "새 부품 생성" #: src/tables/part/PartTable.tsx:551 msgid "Import parts from a file" -msgstr "" +msgstr "파일에서 부품 가져오기" #: src/tables/part/PartTable.tsx:556 msgid "Import from Supplier" -msgstr "" +msgstr "공급업체로부터 수입" #: src/tables/part/PartTable.tsx:558 msgid "Import parts from a supplier plugin" -msgstr "" +msgstr "공급업체 플러그인에서 부품 가져오기" #: src/tables/part/PartTestResultTable.tsx:103 #: src/tables/part/PartTestResultTable.tsx:181 @@ -11081,147 +11081,147 @@ msgstr "" #: src/tables/stock/StockItemTestResultTable.tsx:369 #: src/tables/stock/StockItemTestResultTable.tsx:430 msgid "Add Test Result" -msgstr "" +msgstr "테스트 결과 추가" #: src/tables/part/PartTestResultTable.tsx:110 #: src/tables/stock/StockItemTestResultTable.tsx:298 msgid "Test result added" -msgstr "" +msgstr "테스트 결과가 추가되었습니다" #: src/tables/part/PartTestResultTable.tsx:142 msgid "Add Test Results" -msgstr "" +msgstr "테스트 결과 추가" #: src/tables/part/PartTestResultTable.tsx:152 msgid "Test results added" -msgstr "" +msgstr "테스트 결과가 추가되었습니다" #: src/tables/part/PartTestResultTable.tsx:180 #: src/tables/stock/StockItemTestResultTable.tsx:197 msgid "No Result" -msgstr "" +msgstr "결과 없음" #: src/tables/part/PartTestResultTable.tsx:307 msgid "Show build outputs currently in production" -msgstr "" +msgstr "현재 생산 중인 생산 결과물 표시" #: src/tables/part/PartTestTemplateTable.tsx:56 msgid "Test is defined for a parent template part" -msgstr "" +msgstr "테스트가 상위 템플릿 부품에 정의되어 있습니다" #: src/tables/part/PartTestTemplateTable.tsx:70 msgid "Template Details" -msgstr "" +msgstr "템플릿 상세 정보" #: src/tables/part/PartTestTemplateTable.tsx:80 msgid "Results" -msgstr "" +msgstr "결과" #: src/tables/part/PartTestTemplateTable.tsx:113 msgid "Show required tests" -msgstr "" +msgstr "필수 테스트 표시" #: src/tables/part/PartTestTemplateTable.tsx:118 msgid "Show enabled tests" -msgstr "" +msgstr "활성화된 테스트 표시" #: src/tables/part/PartTestTemplateTable.tsx:122 msgid "Requires Value" -msgstr "" +msgstr "가치가 필요함" #: src/tables/part/PartTestTemplateTable.tsx:123 msgid "Show tests that require a value" -msgstr "" +msgstr "값이 필요한 테스트 표시" #: src/tables/part/PartTestTemplateTable.tsx:127 msgid "Requires Attachment" -msgstr "" +msgstr "첨부 파일이 필요합니다" #: src/tables/part/PartTestTemplateTable.tsx:128 msgid "Show tests that require an attachment" -msgstr "" +msgstr "첨부파일이 필요한 테스트 표시" #: src/tables/part/PartTestTemplateTable.tsx:132 msgid "Include Inherited" -msgstr "" +msgstr "상속 항목 포함" #: src/tables/part/PartTestTemplateTable.tsx:133 msgid "Show tests from inherited templates" -msgstr "" +msgstr "상속된 템플릿의 테스트 표시" #: src/tables/part/PartTestTemplateTable.tsx:137 msgid "Has Results" -msgstr "" +msgstr "결과 있음" #: src/tables/part/PartTestTemplateTable.tsx:138 msgid "Show tests which have recorded results" -msgstr "" +msgstr "결과가 기록된 테스트 표시" #: src/tables/part/PartTestTemplateTable.tsx:160 #: src/tables/part/PartTestTemplateTable.tsx:243 msgid "Add Test Template" -msgstr "" +msgstr "테스트 템플릿 추가" #: src/tables/part/PartTestTemplateTable.tsx:176 msgid "Edit Test Template" -msgstr "" +msgstr "테스트 템플릿 편집" #: src/tables/part/PartTestTemplateTable.tsx:187 msgid "Delete Test Template" -msgstr "" +msgstr "테스트 템플릿 삭제" #: src/tables/part/PartTestTemplateTable.tsx:189 msgid "This action cannot be reversed" -msgstr "" +msgstr "이 작업은 되돌릴 수 없습니다." #: src/tables/part/PartTestTemplateTable.tsx:191 msgid "Any tests results associated with this template will be deleted" -msgstr "" +msgstr "이 템플릿에 연결된 모든 테스트 결과가 삭제됩니다" #: src/tables/part/PartTestTemplateTable.tsx:209 msgid "View Parent Part" -msgstr "" +msgstr "상위 부품 보기" #: src/tables/part/PartTestTemplateTable.tsx:263 msgid "Part templates cannot be edited, as the part is locked" -msgstr "" +msgstr "부품이 잠겨 있으므로 부품 템플릿을 편집할 수 없습니다." #: src/tables/part/PartThumbTable.tsx:123 msgid "Image updated" -msgstr "" +msgstr "이미지가 업데이트되었습니다" #: src/tables/part/PartThumbTable.tsx:124 msgid "The image has been updated successfully" -msgstr "" +msgstr "이미지가 성공적으로 업데이트되었습니다." #: src/tables/part/PartThumbTable.tsx:233 msgid "Select" -msgstr "" +msgstr "선택하다" #: src/tables/part/PartVariantTable.tsx:16 msgid "Show active variants" -msgstr "" +msgstr "활성 변형 표시" #: src/tables/part/PartVariantTable.tsx:20 msgid "Template" -msgstr "" +msgstr "주형" #: src/tables/part/PartVariantTable.tsx:21 msgid "Show template variants" -msgstr "" +msgstr "템플릿 변형 표시" #: src/tables/part/PartVariantTable.tsx:26 msgid "Show virtual variants" -msgstr "" +msgstr "가상 변형 표시" #: src/tables/part/PartVariantTable.tsx:31 msgid "Show trackable variants" -msgstr "" +msgstr "추적 가능한 변형 표시" #: src/tables/part/RelatedPartTable.tsx:105 #: src/tables/part/RelatedPartTable.tsx:138 msgid "Add Related Part" -msgstr "" +msgstr "관련 부품 추가" #: src/tables/part/RelatedPartTable.tsx:109 #~ msgid "Add related part" @@ -11229,45 +11229,45 @@ msgstr "" #: src/tables/part/RelatedPartTable.tsx:120 msgid "Delete Related Part" -msgstr "" +msgstr "관련 부품 삭제" #: src/tables/part/RelatedPartTable.tsx:127 msgid "Edit Related Part" -msgstr "" +msgstr "관련 부품 편집" #: src/tables/part/SelectionListTable.tsx:64 #: src/tables/part/SelectionListTable.tsx:115 msgid "Add Selection List" -msgstr "" +msgstr "선택 목록 추가" #: src/tables/part/SelectionListTable.tsx:76 msgid "Edit Selection List" -msgstr "" +msgstr "선택 목록 편집" #: src/tables/part/SelectionListTable.tsx:84 msgid "Delete Selection List" -msgstr "" +msgstr "선택 목록 삭제" #: src/tables/plugin/PluginErrorTable.tsx:31 msgid "Stage" -msgstr "" +msgstr "단계" #: src/tables/plugin/PluginListTable.tsx:43 msgid "Plugin is active" -msgstr "" +msgstr "플러그인이 활성 상태입니다" #: src/tables/plugin/PluginListTable.tsx:49 msgid "Plugin is inactive" -msgstr "" +msgstr "플러그인이 비활성 상태입니다" #: src/tables/plugin/PluginListTable.tsx:56 msgid "Plugin is not installed" -msgstr "" +msgstr "플러그인이 설치되어 있지 않습니다" #: src/tables/plugin/PluginListTable.tsx:78 #: src/tables/settings/ExportSessionTable.tsx:33 msgid "Plugin" -msgstr "" +msgstr "플러그인" #: src/tables/plugin/PluginListTable.tsx:95 #~ msgid "Plugin with key {pluginKey} not found" @@ -11280,7 +11280,7 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:106 #: src/tables/plugin/PluginListTable.tsx:430 msgid "Mandatory" -msgstr "" +msgstr "필수적인" #: src/tables/plugin/PluginListTable.tsx:113 #~ msgid "Plugin with id {id} not found" @@ -11288,7 +11288,7 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:120 msgid "Description not available" -msgstr "" +msgstr "설명을 사용할 수 없습니다" #: src/tables/plugin/PluginListTable.tsx:122 #~ msgid "Plugin information" @@ -11310,11 +11310,11 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:159 msgid "Confirm plugin activation" -msgstr "" +msgstr "플러그인 활성화 확인" #: src/tables/plugin/PluginListTable.tsx:160 msgid "Confirm plugin deactivation" -msgstr "" +msgstr "플러그인 비활성화 확인" #: src/tables/plugin/PluginListTable.tsx:163 #~ msgid "Package information" @@ -11322,15 +11322,15 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:165 msgid "The selected plugin will be activated" -msgstr "" +msgstr "선택한 플러그인이 활성화됩니다" #: src/tables/plugin/PluginListTable.tsx:166 msgid "The selected plugin will be deactivated" -msgstr "" +msgstr "선택한 플러그인이 비활성화됩니다" #: src/tables/plugin/PluginListTable.tsx:184 msgid "Deactivate" -msgstr "" +msgstr "비활성화" #: src/tables/plugin/PluginListTable.tsx:197 #~ msgid "Plugin settings" @@ -11338,40 +11338,40 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:198 msgid "Activate" -msgstr "" +msgstr "활성화" #: src/tables/plugin/PluginListTable.tsx:199 msgid "Activate selected plugin" -msgstr "" +msgstr "선택한 플러그인 활성화" #: src/tables/plugin/PluginListTable.tsx:211 msgid "Update selected plugin" -msgstr "" +msgstr "선택한 플러그인 업데이트" #: src/tables/plugin/PluginListTable.tsx:229 #: src/tables/stock/InstalledItemsTable.tsx:98 msgid "Uninstall" -msgstr "" +msgstr "제거" #: src/tables/plugin/PluginListTable.tsx:230 msgid "Uninstall selected plugin" -msgstr "" +msgstr "선택한 플러그인 제거" #: src/tables/plugin/PluginListTable.tsx:248 msgid "Delete selected plugin configuration" -msgstr "" +msgstr "선택한 플러그인 설정 삭제" #: src/tables/plugin/PluginListTable.tsx:264 msgid "Activate Plugin" -msgstr "" +msgstr "플러그인 활성화" #: src/tables/plugin/PluginListTable.tsx:271 msgid "The plugin was activated" -msgstr "" +msgstr "플러그인이 활성화되었습니다" #: src/tables/plugin/PluginListTable.tsx:272 msgid "The plugin was deactivated" -msgstr "" +msgstr "플러그인이 비활성화되었습니다" #: src/tables/plugin/PluginListTable.tsx:280 #~ msgid "Install plugin" @@ -11380,19 +11380,19 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:285 #: src/tables/plugin/PluginListTable.tsx:377 msgid "Install Plugin" -msgstr "" +msgstr "플러그인 설치" #: src/tables/plugin/PluginListTable.tsx:298 msgid "Install" -msgstr "" +msgstr "설치하다" #: src/tables/plugin/PluginListTable.tsx:299 msgid "Plugin installed successfully" -msgstr "" +msgstr "플러그인이 성공적으로 설치되었습니다" #: src/tables/plugin/PluginListTable.tsx:304 msgid "Uninstall Plugin" -msgstr "" +msgstr "플러그인 제거" #: src/tables/plugin/PluginListTable.tsx:308 #~ msgid "This action cannot be undone." @@ -11400,23 +11400,23 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:316 msgid "Confirm plugin uninstall" -msgstr "" +msgstr "플러그인 제거 확인" #: src/tables/plugin/PluginListTable.tsx:319 msgid "The selected plugin will be uninstalled." -msgstr "" +msgstr "선택한 플러그인이 제거됩니다." #: src/tables/plugin/PluginListTable.tsx:324 msgid "Plugin uninstalled successfully" -msgstr "" +msgstr "플러그인이 성공적으로 제거되었습니다" #: src/tables/plugin/PluginListTable.tsx:332 msgid "Delete Plugin" -msgstr "" +msgstr "플러그인 삭제" #: src/tables/plugin/PluginListTable.tsx:333 msgid "Deleting this plugin configuration will remove all associated settings and data. Are you sure you want to delete this plugin?" -msgstr "" +msgstr "이 플러그인 설정을 삭제하면 관련된 모든 설정과 데이터가 제거됩니다. 이 플러그인을 삭제하시겠습니까?" #: src/tables/plugin/PluginListTable.tsx:338 #~ msgid "Deactivate Plugin" @@ -11424,11 +11424,11 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:346 msgid "Plugins reloaded" -msgstr "" +msgstr "플러그인을 다시 불러왔습니다" #: src/tables/plugin/PluginListTable.tsx:347 msgid "Plugins were reloaded successfully" -msgstr "" +msgstr "플러그인이 성공적으로 다시 불러와졌습니다" #: src/tables/plugin/PluginListTable.tsx:354 #~ msgid "The following plugin will be activated" @@ -11440,7 +11440,7 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:370 msgid "Reload Plugins" -msgstr "" +msgstr "플러그인 다시 불러오기" #: src/tables/plugin/PluginListTable.tsx:376 #~ msgid "Activating plugin" @@ -11456,7 +11456,7 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:393 msgid "Plugin Detail" -msgstr "" +msgstr "플러그인 상세 정보" #: src/tables/plugin/PluginListTable.tsx:403 #~ msgid "Error updating plugin" @@ -11464,12 +11464,12 @@ msgstr "" #: src/tables/plugin/PluginListTable.tsx:435 msgid "Sample" -msgstr "" +msgstr "견본" #: src/tables/plugin/PluginListTable.tsx:440 #: src/tables/stock/StockItemTable.tsx:226 msgid "Installed" -msgstr "" +msgstr "설치됨" #: src/tables/plugin/PluginListTable.tsx:615 #~ msgid "Plugin detail" @@ -11491,22 +11491,22 @@ msgstr "" #: src/tables/purchasing/ManufacturerPartTable.tsx:100 #: src/tables/purchasing/SupplierPartTable.tsx:122 msgid "MPN" -msgstr "" +msgstr "MPN" #: src/tables/purchasing/ManufacturerPartParametricTable.tsx:43 #: src/tables/purchasing/ManufacturerPartTable.tsx:155 msgid "Show manufacturer parts for active internal parts." -msgstr "" +msgstr "활성 내부 부품의 제조사 부품 표시" #: src/tables/purchasing/ManufacturerPartParametricTable.tsx:48 #: src/tables/purchasing/ManufacturerPartTable.tsx:160 msgid "Active Manufacturer" -msgstr "" +msgstr "활성 제조업체" #: src/tables/purchasing/ManufacturerPartParametricTable.tsx:49 #: src/tables/purchasing/ManufacturerPartTable.tsx:162 msgid "Show manufacturer parts for active manufacturers." -msgstr "" +msgstr "활성 제조사의 제조사 부품 표시" #: src/tables/purchasing/ManufacturerPartTable.tsx:63 #~ msgid "Create Manufacturer Part" @@ -11527,23 +11527,23 @@ msgstr "" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:109 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:398 msgid "Import Line Items" -msgstr "" +msgstr "항목 가져오기" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:233 msgid "Supplier Code" -msgstr "" +msgstr "공급업체 코드" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:241 msgid "Supplier Link" -msgstr "" +msgstr "공급업체 링크" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:248 msgid "Manufacturer Code" -msgstr "" +msgstr "제조업체 코드" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:282 msgid "Show line items which have been received" -msgstr "" +msgstr "입고된 항목 표시" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:344 #: src/tables/sales/ReturnOrderLineItemTable.tsx:160 @@ -11553,15 +11553,15 @@ msgstr "" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:351 msgid "Receive line item" -msgstr "" +msgstr "항목 입고" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:415 msgid "Receive items" -msgstr "" +msgstr "항목 입고" #: src/tables/purchasing/SupplierPartTable.tsx:160 msgid "Base units" -msgstr "" +msgstr "기본 단위" #: src/tables/purchasing/SupplierPartTable.tsx:193 #~ msgid "Supplier part updated" @@ -11577,89 +11577,89 @@ msgstr "" #: src/tables/purchasing/SupplierPartTable.tsx:226 msgid "Add supplier part" -msgstr "" +msgstr "협력업체 부품 추가" #: src/tables/purchasing/SupplierPartTable.tsx:234 msgid "Import supplier part" -msgstr "" +msgstr "공급업체 부품 가져오기" #: src/tables/purchasing/SupplierPartTable.tsx:250 msgid "Show active supplier parts" -msgstr "" +msgstr "활성 협력업체 부품 표시" #: src/tables/purchasing/SupplierPartTable.tsx:255 msgid "Show primary supplier parts" -msgstr "" +msgstr "주요 협력업체 부품 표시" #: src/tables/purchasing/SupplierPartTable.tsx:260 msgid "Show active internal parts" -msgstr "" +msgstr "활성 내부 부품 표시" #: src/tables/purchasing/SupplierPartTable.tsx:264 msgid "Active Supplier" -msgstr "" +msgstr "활성 공급업체" #: src/tables/purchasing/SupplierPartTable.tsx:265 msgid "Show active suppliers" -msgstr "" +msgstr "활성 공급업체 표시" #: src/tables/purchasing/SupplierPartTable.tsx:270 msgid "Show supplier parts with stock" -msgstr "" +msgstr "재고가 있는 공급업체 부품 표시" #: src/tables/sales/ReturnOrderLineItemTable.tsx:157 msgid "Received Date" -msgstr "" +msgstr "입고일" #: src/tables/sales/ReturnOrderLineItemTable.tsx:171 msgid "Show items which have been received" -msgstr "" +msgstr "입고된 항목 표시" #: src/tables/sales/ReturnOrderLineItemTable.tsx:176 msgid "Filter by line item status" -msgstr "" +msgstr "항목 상태로 필터링" #: src/tables/sales/ReturnOrderLineItemTable.tsx:194 msgid "Receive selected items" -msgstr "" +msgstr "선택한 항목 입고" #: src/tables/sales/ReturnOrderLineItemTable.tsx:229 msgid "Receive Item" -msgstr "" +msgstr "항목 입고" #: src/tables/sales/SalesOrderAllocationTable.tsx:90 msgid "Show outstanding allocations" -msgstr "" +msgstr "미해결 할당 표시" #: src/tables/sales/SalesOrderAllocationTable.tsx:94 msgid "Assigned to Shipment" -msgstr "" +msgstr "출하에 할당됨" #: src/tables/sales/SalesOrderAllocationTable.tsx:95 msgid "Show allocations assigned to a shipment" -msgstr "" +msgstr "출하에 할당된 항목 표시" #: src/tables/sales/SalesOrderAllocationTable.tsx:155 msgid "Available Quantity" -msgstr "" +msgstr "사용 가능 수량" #: src/tables/sales/SalesOrderAllocationTable.tsx:162 msgid "Allocated Quantity" -msgstr "" +msgstr "할당 수량" #: src/tables/sales/SalesOrderAllocationTable.tsx:176 #: src/tables/sales/SalesOrderAllocationTable.tsx:190 msgid "No shipment" -msgstr "" +msgstr "출하 없음" #: src/tables/sales/SalesOrderAllocationTable.tsx:188 msgid "Not shipped" -msgstr "" +msgstr "출하되지 않음" #: src/tables/sales/SalesOrderAllocationTable.tsx:210 #: src/tables/sales/SalesOrderAllocationTable.tsx:234 msgid "Edit Allocation" -msgstr "" +msgstr "할당 편집" #: src/tables/sales/SalesOrderAllocationTable.tsx:218 #: src/tables/sales/SalesOrderAllocationTable.tsx:241 @@ -11669,15 +11669,15 @@ msgstr "" #: src/tables/sales/SalesOrderAllocationTable.tsx:260 #: src/tables/sales/SalesOrderAllocationTable.tsx:261 msgid "View Shipment" -msgstr "" +msgstr "출하 보기" #: src/tables/sales/SalesOrderAllocationTable.tsx:316 msgid "Assign to Shipment" -msgstr "" +msgstr "출하에 할당" #: src/tables/sales/SalesOrderAllocationTable.tsx:332 msgid "Assign to shipment" -msgstr "" +msgstr "출하에 할당" #: src/tables/sales/SalesOrderLineItemTable.tsx:280 #~ msgid "Allocate stock" @@ -11685,7 +11685,7 @@ msgstr "" #: src/tables/sales/SalesOrderLineItemTable.tsx:289 msgid "Allocate Serial Numbers" -msgstr "" +msgstr "일련번호 할당" #: src/tables/sales/SalesOrderLineItemTable.tsx:291 #~ msgid "Allocate Serials" @@ -11693,27 +11693,27 @@ msgstr "" #: src/tables/sales/SalesOrderLineItemTable.tsx:297 msgid "Stock allocated successfully" -msgstr "" +msgstr "재고 할당이 성공적으로 완료되었습니다." #: src/tables/sales/SalesOrderLineItemTable.tsx:341 msgid "Show lines which are fully allocated" -msgstr "" +msgstr "완전히 할당된 항목 표시" #: src/tables/sales/SalesOrderLineItemTable.tsx:346 msgid "Show lines which are completed" -msgstr "" +msgstr "완료된 항목 표시" #: src/tables/sales/SalesOrderLineItemTable.tsx:419 msgid "Allocate serials" -msgstr "" +msgstr "시리얼 번호 할당" #: src/tables/sales/SalesOrderLineItemTable.tsx:437 msgid "Build stock" -msgstr "" +msgstr "생산 재고" #: src/tables/sales/SalesOrderLineItemTable.tsx:455 msgid "Order stock" -msgstr "" +msgstr "주문 재고" #: src/tables/sales/SalesOrderShipmentTable.tsx:51 #~ msgid "Delete Shipment" @@ -11721,140 +11721,140 @@ msgstr "" #: src/tables/sales/SalesOrderShipmentTable.tsx:79 msgid "Create Shipment" -msgstr "" +msgstr "출하 생성" #: src/tables/sales/SalesOrderShipmentTable.tsx:80 msgid "Shipment created" -msgstr "" +msgstr "출하가 생성되었습니다" #: src/tables/sales/SalesOrderShipmentTable.tsx:159 msgid "Items" -msgstr "" +msgstr "품목" #: src/tables/sales/SalesOrderShipmentTable.tsx:243 msgid "Edit shipment" -msgstr "" +msgstr "출하 편집" #: src/tables/sales/SalesOrderShipmentTable.tsx:251 msgid "Cancel shipment" -msgstr "" +msgstr "출하 취소" #: src/tables/sales/SalesOrderShipmentTable.tsx:281 msgid "Add shipment" -msgstr "" +msgstr "출하 추가" #: src/tables/sales/SalesOrderShipmentTable.tsx:295 msgid "Show shipments which have been checked" -msgstr "" +msgstr "확인된 출하 표시" #: src/tables/sales/SalesOrderShipmentTable.tsx:300 msgid "Show shipments which have been shipped" -msgstr "" +msgstr "출하된 항목 표시" #: src/tables/sales/SalesOrderShipmentTable.tsx:305 msgid "Show shipments which have been delivered" -msgstr "" +msgstr "배송 완료된 출하 표시" #: src/tables/settings/ApiTokenTable.tsx:31 #: src/tables/settings/ApiTokenTable.tsx:45 msgid "Generate Token" -msgstr "" +msgstr "토큰 생성" #: src/tables/settings/ApiTokenTable.tsx:33 msgid "Token generated" -msgstr "" +msgstr "토큰 생성" #: src/tables/settings/ApiTokenTable.tsx:68 #: src/tables/settings/ApiTokenTable.tsx:118 msgid "Revoked" -msgstr "" +msgstr "폐기됨" #: src/tables/settings/ApiTokenTable.tsx:72 #: src/tables/settings/ApiTokenTable.tsx:180 msgid "Token" -msgstr "" +msgstr "토큰" #: src/tables/settings/ApiTokenTable.tsx:79 msgid "In Use" -msgstr "" +msgstr "사용 중" #: src/tables/settings/ApiTokenTable.tsx:88 msgid "Last Seen" -msgstr "" +msgstr "마지막으로 본" #: src/tables/settings/ApiTokenTable.tsx:93 msgid "Expiry" -msgstr "" +msgstr "만료" #: src/tables/settings/ApiTokenTable.tsx:119 msgid "Show revoked tokens" -msgstr "" +msgstr "폐기된 토큰 표시" #: src/tables/settings/ApiTokenTable.tsx:138 msgid "Revoke" -msgstr "" +msgstr "폐기" #: src/tables/settings/ApiTokenTable.tsx:162 msgid "Error revoking token" -msgstr "" +msgstr "토큰 폐기 중 오류 발생" #: src/tables/settings/ApiTokenTable.tsx:185 msgid "Tokens are only shown once - make sure to note it down." -msgstr "" +msgstr "토큰은 한 번만 표시됩니다. 꼭 기록해 두세요." #: src/tables/settings/BarcodeScanHistoryTable.tsx:60 msgid "Barcode Information" -msgstr "" +msgstr "바코드 정보" #: src/tables/settings/BarcodeScanHistoryTable.tsx:85 msgid "Endpoint" -msgstr "" +msgstr "엔드포인트" #: src/tables/settings/BarcodeScanHistoryTable.tsx:89 #: src/tables/settings/BarcodeScanHistoryTable.tsx:208 #: src/tables/stock/StockItemTestResultTable.tsx:191 msgid "Result" -msgstr "" +msgstr "결과" #: src/tables/settings/BarcodeScanHistoryTable.tsx:97 msgid "Context" -msgstr "" +msgstr "문맥" #: src/tables/settings/BarcodeScanHistoryTable.tsx:118 msgid "Response" -msgstr "" +msgstr "응답" #: src/tables/settings/BarcodeScanHistoryTable.tsx:209 msgid "Filter by result" -msgstr "" +msgstr "결과로 필터링" #: src/tables/settings/BarcodeScanHistoryTable.tsx:223 msgid "Delete Barcode Scan Record" -msgstr "" +msgstr "바코드 스캔 기록 삭제" #: src/tables/settings/BarcodeScanHistoryTable.tsx:249 msgid "Barcode Scan Details" -msgstr "" +msgstr "바코드 스캔 상세 정보" #: src/tables/settings/BarcodeScanHistoryTable.tsx:259 msgid "Logging Disabled" -msgstr "" +msgstr "로깅 비활성화됨" #: src/tables/settings/BarcodeScanHistoryTable.tsx:261 msgid "Barcode logging is not enabled" -msgstr "" +msgstr "바코드 로깅이 활성화되지 않았습니다." #: src/tables/settings/CustomStateTable.tsx:63 msgid "Status Group" -msgstr "" +msgstr "상태 그룹" #: src/tables/settings/CustomStateTable.tsx:84 msgid "Logical State" -msgstr "" +msgstr "논리적 상태" #: src/tables/settings/CustomStateTable.tsx:96 msgid "Identifier" -msgstr "" +msgstr "식별자" #: src/tables/settings/CustomStateTable.tsx:115 #~ msgid "Add state" @@ -11862,88 +11862,88 @@ msgstr "" #: src/tables/settings/CustomStateTable.tsx:153 msgid "Edit State" -msgstr "" +msgstr "상태 편집" #: src/tables/settings/CustomStateTable.tsx:161 msgid "Delete State" -msgstr "" +msgstr "상태 삭제" #: src/tables/settings/CustomUnitsTable.tsx:54 msgid "Add Custom Unit" -msgstr "" +msgstr "사용자 지정 단위 추가" #: src/tables/settings/CustomUnitsTable.tsx:64 msgid "Edit Custom Unit" -msgstr "" +msgstr "사용자 지정 단위 편집" #: src/tables/settings/CustomUnitsTable.tsx:72 msgid "Delete Custom Unit" -msgstr "" +msgstr "사용자 지정 단위 삭제" #: src/tables/settings/CustomUnitsTable.tsx:103 msgid "Add custom unit" -msgstr "" +msgstr "사용자 지정 단위 추가" #: src/tables/settings/EmailTable.tsx:25 msgid "Announced" -msgstr "" +msgstr "발표됨" #: src/tables/settings/EmailTable.tsx:27 msgid "Sent" -msgstr "" +msgstr "전송된" #: src/tables/settings/EmailTable.tsx:29 msgid "Failed" -msgstr "" +msgstr "실패한" #: src/tables/settings/EmailTable.tsx:33 msgid "Read" -msgstr "" +msgstr "읽다" #: src/tables/settings/EmailTable.tsx:35 msgid "Confirmed" -msgstr "" +msgstr "확인됨" #: src/tables/settings/EmailTable.tsx:43 #: src/tables/settings/EmailTable.tsx:58 msgid "Send Test Email" -msgstr "" +msgstr "테스트 이메일 보내기" #: src/tables/settings/EmailTable.tsx:45 msgid "Email sent successfully" -msgstr "" +msgstr "이메일이 성공적으로 전송되었습니다." #: src/tables/settings/EmailTable.tsx:71 msgid "Delete Email" -msgstr "" +msgstr "이메일 삭제" #: src/tables/settings/EmailTable.tsx:72 msgid "Email deleted successfully" -msgstr "" +msgstr "이메일이 삭제되었습니다." #: src/tables/settings/EmailTable.tsx:80 msgid "Subject" -msgstr "" +msgstr "주제" #: src/tables/settings/EmailTable.tsx:85 msgid "To" -msgstr "" +msgstr "에게" #: src/tables/settings/EmailTable.tsx:90 msgid "Sender" -msgstr "" +msgstr "보내는 사람" #: src/tables/settings/EmailTable.tsx:122 msgid "Direction" -msgstr "" +msgstr "방향" #: src/tables/settings/EmailTable.tsx:125 msgid "Incoming" -msgstr "" +msgstr "들어오는" #: src/tables/settings/EmailTable.tsx:125 msgid "Outgoing" -msgstr "" +msgstr "나가는" #: src/tables/settings/ErrorTable.tsx:51 #~ msgid "Delete error report" @@ -11951,85 +11951,85 @@ msgstr "" #: src/tables/settings/ErrorTable.tsx:67 msgid "Traceback" -msgstr "" +msgstr "역추적" #: src/tables/settings/ErrorTable.tsx:103 msgid "When" -msgstr "" +msgstr "언제" #: src/tables/settings/ErrorTable.tsx:113 msgid "Error Information" -msgstr "" +msgstr "오류 정보" #: src/tables/settings/ErrorTable.tsx:123 msgid "Delete Error Report" -msgstr "" +msgstr "오류 보고서 삭제" #: src/tables/settings/ErrorTable.tsx:125 msgid "Are you sure you want to delete this error report?" -msgstr "" +msgstr "이 오류 보고서를 삭제하시겠습니까?" #: src/tables/settings/ErrorTable.tsx:127 msgid "Error report deleted" -msgstr "" +msgstr "오류 보고서가 삭제되었습니다." #: src/tables/settings/ErrorTable.tsx:146 #: src/tables/settings/FailedTasksTable.tsx:65 msgid "Error Details" -msgstr "" +msgstr "오류 상세 정보" #: src/tables/settings/ExportSessionTable.tsx:28 msgid "Output Type" -msgstr "" +msgstr "출력 유형" #: src/tables/settings/ExportSessionTable.tsx:38 msgid "Exported On" -msgstr "" +msgstr "내보낸 시각" #: src/tables/settings/ExportSessionTable.tsx:59 msgid "Delete Output" -msgstr "" +msgstr "출력 삭제" #: src/tables/settings/FailedTasksTable.tsx:32 #: src/tables/settings/PendingTasksTable.tsx:28 #: src/tables/settings/ScheduledTasksTable.tsx:19 msgid "Task" -msgstr "" +msgstr "일" #: src/tables/settings/FailedTasksTable.tsx:38 #: src/tables/settings/PendingTasksTable.tsx:33 msgid "Task ID" -msgstr "" +msgstr "작업 ID" #: src/tables/settings/FailedTasksTable.tsx:42 #: src/tables/stock/StockItemTestResultTable.tsx:233 msgid "Started" -msgstr "" +msgstr "시작됨" #: src/tables/settings/FailedTasksTable.tsx:54 msgid "Attempts" -msgstr "" +msgstr "시도" #: src/tables/settings/FailedTasksTable.tsx:92 msgid "No Information" -msgstr "" +msgstr "정보 없음" #: src/tables/settings/FailedTasksTable.tsx:93 msgid "No error details are available for this task" -msgstr "" +msgstr "이 작업에 사용할 수 있는 오류 세부정보가 없습니다." #: src/tables/settings/GroupTable.tsx:71 msgid "Group with id {id} not found" -msgstr "" +msgstr "ID가 {id}인 그룹을 찾을 수 없습니다." #: src/tables/settings/GroupTable.tsx:73 msgid "An error occurred while fetching group details" -msgstr "" +msgstr "그룹 상세 정보를 불러오는 중 오류가 발생했습니다" #: src/tables/settings/GroupTable.tsx:96 #: src/tables/settings/GroupTable.tsx:257 msgid "Name of the user group" -msgstr "" +msgstr "사용자 그룹 이름" #: src/tables/settings/GroupTable.tsx:117 #~ msgid "Permission set" @@ -12038,23 +12038,23 @@ msgstr "" #: src/tables/settings/GroupTable.tsx:170 #: src/tables/settings/UserTable.tsx:316 msgid "Open Profile" -msgstr "" +msgstr "프로필 열기" #: src/tables/settings/GroupTable.tsx:185 msgid "Delete group" -msgstr "" +msgstr "그룹 삭제" #: src/tables/settings/GroupTable.tsx:186 msgid "Group deleted" -msgstr "" +msgstr "그룹이 삭제되었습니다." #: src/tables/settings/GroupTable.tsx:188 msgid "Are you sure you want to delete this group?" -msgstr "" +msgstr "이 그룹을 삭제하시겠습니까?" #: src/tables/settings/GroupTable.tsx:200 msgid "Add group" -msgstr "" +msgstr "그룹 추가" #: src/tables/settings/GroupTable.tsx:213 #~ msgid "Edit group" @@ -12062,73 +12062,73 @@ msgstr "" #: src/tables/settings/GroupTable.tsx:221 msgid "Edit Group" -msgstr "" +msgstr "그룹 편집" #: src/tables/settings/GroupTable.tsx:253 msgid "Add Group" -msgstr "" +msgstr "그룹 추가" #: src/tables/settings/ImportSessionTable.tsx:37 msgid "Delete Import Session" -msgstr "" +msgstr "가져오기 세션 삭제" #: src/tables/settings/ImportSessionTable.tsx:43 #: src/tables/settings/ImportSessionTable.tsx:130 msgid "Create Import Session" -msgstr "" +msgstr "가져오기 세션 생성" #: src/tables/settings/ImportSessionTable.tsx:73 msgid "Uploaded" -msgstr "" +msgstr "업로드됨" #: src/tables/settings/ImportSessionTable.tsx:84 msgid "Imported Rows" -msgstr "" +msgstr "가져온 행" #: src/tables/settings/ImportSessionTable.tsx:113 #: src/tables/settings/TemplateTable.tsx:403 msgid "Filter by target model type" -msgstr "" +msgstr "대상 모델 유형으로 필터링" #: src/tables/settings/ImportSessionTable.tsx:119 msgid "Filter by import session status" -msgstr "" +msgstr "가져오기 세션 상태로 필터링" #: src/tables/settings/PendingTasksTable.tsx:47 msgid "Arguments" -msgstr "" +msgstr "인수" #: src/tables/settings/PendingTasksTable.tsx:61 msgid "Remove all pending tasks" -msgstr "" +msgstr "모든 대기 중 작업 제거" #: src/tables/settings/PendingTasksTable.tsx:69 msgid "All pending tasks deleted" -msgstr "" +msgstr "모든 대기 중 작업이 삭제되었습니다" #: src/tables/settings/PendingTasksTable.tsx:76 msgid "Error while deleting all pending tasks" -msgstr "" +msgstr "모든 대기 중 작업 삭제 중 오류 발생" #: src/tables/settings/ProjectCodeTable.tsx:58 msgid "Edit Project Code" -msgstr "" +msgstr "프로젝트 코드 편집" #: src/tables/settings/ProjectCodeTable.tsx:66 msgid "Delete Project Code" -msgstr "" +msgstr "프로젝트 코드 삭제" #: src/tables/settings/ProjectCodeTable.tsx:97 msgid "Add project code" -msgstr "" +msgstr "프로젝트 코드 추가" #: src/tables/settings/ScheduledTasksTable.tsx:28 msgid "Last Run" -msgstr "" +msgstr "마지막 실행" #: src/tables/settings/ScheduledTasksTable.tsx:50 msgid "Next Run" -msgstr "" +msgstr "다음 실행" #: src/tables/settings/StocktakeReportTable.tsx:28 #~ msgid "Report" @@ -12156,11 +12156,11 @@ msgstr "" #: src/tables/settings/TemplateTable.tsx:171 msgid "Template not found" -msgstr "" +msgstr "템플릿을 찾을 수 없습니다." #: src/tables/settings/TemplateTable.tsx:173 msgid "An error occurred while fetching template details" -msgstr "" +msgstr "템플릿 상세 정보를 불러오는 중 오류가 발생했습니다" #: src/tables/settings/TemplateTable.tsx:243 #~ msgid "Add new" @@ -12172,36 +12172,36 @@ msgstr "" #: src/tables/settings/TemplateTable.tsx:272 msgid "Filename" -msgstr "" +msgstr "파일명" #: src/tables/settings/TemplateTable.tsx:295 msgid "Modify" -msgstr "" +msgstr "수정하다" #: src/tables/settings/TemplateTable.tsx:296 msgid "Modify template file" -msgstr "" +msgstr "템플릿 파일 수정" #: src/tables/settings/TemplateTable.tsx:347 #: src/tables/settings/TemplateTable.tsx:415 msgid "Edit Template" -msgstr "" +msgstr "템플릿 편집" #: src/tables/settings/TemplateTable.tsx:355 msgid "Delete template" -msgstr "" +msgstr "템플릿 삭제" #: src/tables/settings/TemplateTable.tsx:361 msgid "Add Template" -msgstr "" +msgstr "템플릿 추가" #: src/tables/settings/TemplateTable.tsx:374 msgid "Add template" -msgstr "" +msgstr "템플릿 추가" #: src/tables/settings/TemplateTable.tsx:397 msgid "Filter by enabled status" -msgstr "" +msgstr "활성화 상태로 필터링" #: src/tables/settings/TemplateTable.tsx:420 #~ msgid "Report Output" @@ -12209,23 +12209,23 @@ msgstr "" #: src/tables/settings/UserTable.tsx:123 msgid "Groups updated" -msgstr "" +msgstr "그룹이 업데이트되었습니다." #: src/tables/settings/UserTable.tsx:124 msgid "User groups updated successfully" -msgstr "" +msgstr "사용자 그룹이 업데이트되었습니다." #: src/tables/settings/UserTable.tsx:131 msgid "Error updating user groups" -msgstr "" +msgstr "사용자 그룹 업데이트 중 오류 발생" #: src/tables/settings/UserTable.tsx:150 msgid "User with id {id} not found" -msgstr "" +msgstr "ID가 {id}인 사용자를 찾을 수 없습니다." #: src/tables/settings/UserTable.tsx:152 msgid "An error occurred while fetching user details" -msgstr "" +msgstr "사용자 상세 정보를 불러오는 중 오류가 발생했습니다" #: src/tables/settings/UserTable.tsx:154 #~ msgid "No groups" @@ -12233,15 +12233,15 @@ msgstr "" #: src/tables/settings/UserTable.tsx:178 msgid "Is Active" -msgstr "" +msgstr "활성 상태임" #: src/tables/settings/UserTable.tsx:179 msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." -msgstr "" +msgstr "이 사용자를 활성 사용자로 처리할지 지정합니다. 계정을 삭제하는 대신 이 선택을 해제하세요." #: src/tables/settings/UserTable.tsx:183 msgid "Is Administrator" -msgstr "" +msgstr "관리자임" #: src/tables/settings/UserTable.tsx:183 #~ msgid "Is Staff" @@ -12249,23 +12249,23 @@ msgstr "" #: src/tables/settings/UserTable.tsx:184 msgid "Designates whether the user can log into the django admin site." -msgstr "" +msgstr "사용자가 django 관리자 사이트에 로그인할 수 있는지 지정합니다." #: src/tables/settings/UserTable.tsx:188 msgid "Is Superuser" -msgstr "" +msgstr "슈퍼유저임" #: src/tables/settings/UserTable.tsx:189 msgid "Designates that this user has all permissions without explicitly assigning them." -msgstr "" +msgstr "이 사용자가 별도 권한 할당 없이 모든 권한을 가짐을 지정합니다." #: src/tables/settings/UserTable.tsx:199 msgid "You cannot edit the rights for the currently logged-in user." -msgstr "" +msgstr "현재 로그인한 사용자의 권한은 편집할 수 없습니다." #: src/tables/settings/UserTable.tsx:218 msgid "User Groups" -msgstr "" +msgstr "사용자 그룹" #: src/tables/settings/UserTable.tsx:305 #~ msgid "Edit user" @@ -12273,39 +12273,39 @@ msgstr "" #: src/tables/settings/UserTable.tsx:333 msgid "Lock user" -msgstr "" +msgstr "사용자 잠금" #: src/tables/settings/UserTable.tsx:343 msgid "Unlock user" -msgstr "" +msgstr "사용자 잠금 해제" #: src/tables/settings/UserTable.tsx:359 msgid "Delete user" -msgstr "" +msgstr "사용자 삭제" #: src/tables/settings/UserTable.tsx:360 msgid "User deleted" -msgstr "" +msgstr "사용자가 삭제되었습니다." #: src/tables/settings/UserTable.tsx:363 msgid "Are you sure you want to delete this user?" -msgstr "" +msgstr "이 사용자를 삭제하시겠습니까?" #: src/tables/settings/UserTable.tsx:373 msgid "Set Password" -msgstr "" +msgstr "비밀번호 설정" #: src/tables/settings/UserTable.tsx:378 msgid "Password updated" -msgstr "" +msgstr "비밀번호가 업데이트되었습니다." #: src/tables/settings/UserTable.tsx:389 msgid "Add user" -msgstr "" +msgstr "사용자 추가" #: src/tables/settings/UserTable.tsx:402 msgid "Show active users" -msgstr "" +msgstr "활성 사용자 표시" #: src/tables/settings/UserTable.tsx:406 #~ msgid "Show staff users" @@ -12313,190 +12313,190 @@ msgstr "" #: src/tables/settings/UserTable.tsx:407 msgid "Show administrators" -msgstr "" +msgstr "관리자 표시" #: src/tables/settings/UserTable.tsx:412 msgid "Show superusers" -msgstr "" +msgstr "슈퍼유저 표시" #: src/tables/settings/UserTable.tsx:431 msgid "Edit User" -msgstr "" +msgstr "사용자 편집" #: src/tables/settings/UserTable.tsx:464 msgid "Add User" -msgstr "" +msgstr "사용자 추가" #: src/tables/settings/UserTable.tsx:472 msgid "Added user" -msgstr "" +msgstr "사용자가 추가되었습니다" #: src/tables/settings/UserTable.tsx:482 msgid "User updated" -msgstr "" +msgstr "사용자가 업데이트되었습니다." #: src/tables/settings/UserTable.tsx:483 msgid "User updated successfully" -msgstr "" +msgstr "사용자가 업데이트되었습니다." #: src/tables/settings/UserTable.tsx:489 msgid "Error updating user" -msgstr "" +msgstr "사용자 업데이트 중 오류 발생" #: src/tables/stock/InstalledItemsTable.tsx:37 #: src/tables/stock/InstalledItemsTable.tsx:81 msgid "Install Item" -msgstr "" +msgstr "아이템 설치" #: src/tables/stock/InstalledItemsTable.tsx:39 msgid "Item installed" -msgstr "" +msgstr "설치된 항목" #: src/tables/stock/InstalledItemsTable.tsx:50 msgid "Uninstall Item" -msgstr "" +msgstr "항목 제거" #: src/tables/stock/InstalledItemsTable.tsx:52 msgid "Item uninstalled" -msgstr "" +msgstr "항목이 제거되었습니다." #: src/tables/stock/InstalledItemsTable.tsx:99 msgid "Uninstall stock item" -msgstr "" +msgstr "재고 품목 제거" #: src/tables/stock/LocationTypesTable.tsx:44 #: src/tables/stock/LocationTypesTable.tsx:111 msgid "Add Location Type" -msgstr "" +msgstr "위치 유형 추가" #: src/tables/stock/LocationTypesTable.tsx:52 msgid "Edit Location Type" -msgstr "" +msgstr "위치 유형 편집" #: src/tables/stock/LocationTypesTable.tsx:60 msgid "Delete Location Type" -msgstr "" +msgstr "위치 유형 삭제" #: src/tables/stock/LocationTypesTable.tsx:68 msgid "Icon" -msgstr "" +msgstr "상" #: src/tables/stock/StockItemTable.tsx:159 msgid "Stocktake Date" -msgstr "" +msgstr "재고 실사일" #: src/tables/stock/StockItemTable.tsx:177 msgid "Show stock for active parts" -msgstr "" +msgstr "활성 부품의 재고 표시" #: src/tables/stock/StockItemTable.tsx:188 msgid "Show stock for assembled parts" -msgstr "" +msgstr "조립 부품의 재고 표시" #: src/tables/stock/StockItemTable.tsx:193 msgid "Show items which have been allocated" -msgstr "" +msgstr "할당된 항목 표시" #: src/tables/stock/StockItemTable.tsx:198 msgid "Show items which are available" -msgstr "" +msgstr "사용 가능한 항목 표시" #: src/tables/stock/StockItemTable.tsx:202 #: src/tables/stock/StockLocationTable.tsx:38 msgid "Include Sublocations" -msgstr "" +msgstr "하위 위치 포함" #: src/tables/stock/StockItemTable.tsx:203 msgid "Include stock in sublocations" -msgstr "" +msgstr "하위 위치에 재고 포함" #: src/tables/stock/StockItemTable.tsx:207 msgid "Depleted" -msgstr "" +msgstr "고갈됨" #: src/tables/stock/StockItemTable.tsx:208 msgid "Show depleted stock items" -msgstr "" +msgstr "소진된 재고 품목 표시" #: src/tables/stock/StockItemTable.tsx:214 msgid "Show items which are in production" -msgstr "" +msgstr "생산중인 아이템을 보여주세요" #: src/tables/stock/StockItemTable.tsx:222 msgid "Show items which have been consumed by a build order" -msgstr "" +msgstr "생산 주문에서 사용된 항목 표시" #: src/tables/stock/StockItemTable.tsx:227 msgid "Show stock items which are installed in other items" -msgstr "" +msgstr "다른 항목에 설치된 재고 품목 표시" #: src/tables/stock/StockItemTable.tsx:231 msgid "Sent to Customer" -msgstr "" +msgstr "고객에게 발송됨" #: src/tables/stock/StockItemTable.tsx:232 msgid "Show items which have been sent to a customer" -msgstr "" +msgstr "고객에게 발송된 항목 표시" #: src/tables/stock/StockItemTable.tsx:243 msgid "Show tracked items" -msgstr "" +msgstr "추적된 항목 표시" #: src/tables/stock/StockItemTable.tsx:247 msgid "Has Purchase Price" -msgstr "" +msgstr "구매 가격 있음" #: src/tables/stock/StockItemTable.tsx:248 msgid "Show items which have a purchase price" -msgstr "" +msgstr "구매 가격이 있는 항목 표시" #: src/tables/stock/StockItemTable.tsx:253 msgid "Show items which have expired" -msgstr "" +msgstr "만료된 항목 표시" #: src/tables/stock/StockItemTable.tsx:259 msgid "Show items which are stale" -msgstr "" +msgstr "오래된 항목 표시" #: src/tables/stock/StockItemTable.tsx:264 msgid "Expired Before" -msgstr "" +msgstr "만료일 이전" #: src/tables/stock/StockItemTable.tsx:265 msgid "Show items which expired before this date" -msgstr "" +msgstr "이 날짜 이전에 만료된 항목 표시" #: src/tables/stock/StockItemTable.tsx:271 msgid "Expired After" -msgstr "" +msgstr "만료일 이후" #: src/tables/stock/StockItemTable.tsx:272 msgid "Show items which expired after this date" -msgstr "" +msgstr "이 날짜 이후에 만료된 항목 표시" #: src/tables/stock/StockItemTable.tsx:279 msgid "Show items updated before this date" -msgstr "" +msgstr "이 날짜 이전에 업데이트된 항목 표시" #: src/tables/stock/StockItemTable.tsx:285 msgid "Show items updated after this date" -msgstr "" +msgstr "이 날짜 이후에 업데이트된 항목 표시" #: src/tables/stock/StockItemTable.tsx:290 msgid "Stocktake Before" -msgstr "" +msgstr "재고 실사일 이전" #: src/tables/stock/StockItemTable.tsx:291 msgid "Show items counted before this date" -msgstr "" +msgstr "이 날짜 이전에 실사된 항목 표시" #: src/tables/stock/StockItemTable.tsx:296 msgid "Stocktake After" -msgstr "" +msgstr "재고 실사일 이후" #: src/tables/stock/StockItemTable.tsx:297 msgid "Show items counted after this date" -msgstr "" +msgstr "이 날짜 이후에 실사된 항목 표시" #: src/tables/stock/StockItemTable.tsx:301 #~ msgid "Show stock for assmebled parts" @@ -12504,11 +12504,11 @@ msgstr "" #: src/tables/stock/StockItemTable.tsx:302 msgid "External Location" -msgstr "" +msgstr "외부 위치" #: src/tables/stock/StockItemTable.tsx:303 msgid "Show items in an external location" -msgstr "" +msgstr "외부 위치에 항목 표시" #: src/tables/stock/StockItemTable.tsx:362 #~ msgid "Include stock items for variant parts" @@ -12524,11 +12524,11 @@ msgstr "" #: src/tables/stock/StockItemTable.tsx:420 msgid "Stock item created" -msgstr "" +msgstr "재고 품목이 생성되었습니다" #: src/tables/stock/StockItemTable.tsx:442 msgid "Order items" -msgstr "" +msgstr "주문 항목" #: src/tables/stock/StockItemTable.tsx:528 #~ msgid "Delete stock items" @@ -12580,81 +12580,81 @@ msgstr "" #: src/tables/stock/StockItemTestResultTable.tsx:144 msgid "Test" -msgstr "" +msgstr "시험" #: src/tables/stock/StockItemTestResultTable.tsx:180 msgid "Test result for installed stock item" -msgstr "" +msgstr "설치된 재고 품목의 테스트 결과" #: src/tables/stock/StockItemTestResultTable.tsx:211 msgid "Attachment" -msgstr "" +msgstr "부착" #: src/tables/stock/StockItemTestResultTable.tsx:227 msgid "Test station" -msgstr "" +msgstr "테스트 스테이션" #: src/tables/stock/StockItemTestResultTable.tsx:249 msgid "Finished" -msgstr "" +msgstr "완성된" #: src/tables/stock/StockItemTestResultTable.tsx:307 #: src/tables/stock/StockItemTestResultTable.tsx:379 msgid "Edit Test Result" -msgstr "" +msgstr "테스트 결과 편집" #: src/tables/stock/StockItemTestResultTable.tsx:309 msgid "Test result updated" -msgstr "" +msgstr "테스트 결과가 업데이트되었습니다." #: src/tables/stock/StockItemTestResultTable.tsx:315 #: src/tables/stock/StockItemTestResultTable.tsx:388 msgid "Delete Test Result" -msgstr "" +msgstr "테스트 결과 삭제" #: src/tables/stock/StockItemTestResultTable.tsx:317 msgid "Test result deleted" -msgstr "" +msgstr "테스트 결과가 삭제되었습니다." #: src/tables/stock/StockItemTestResultTable.tsx:331 msgid "Test Passed" -msgstr "" +msgstr "테스트 통과" #: src/tables/stock/StockItemTestResultTable.tsx:332 msgid "Test result has been recorded" -msgstr "" +msgstr "테스트 결과가 기록되었습니다" #: src/tables/stock/StockItemTestResultTable.tsx:339 msgid "Failed to record test result" -msgstr "" +msgstr "테스트 결과 기록에 실패했습니다" #: src/tables/stock/StockItemTestResultTable.tsx:356 msgid "Pass Test" -msgstr "" +msgstr "테스트 통과" #: src/tables/stock/StockItemTestResultTable.tsx:406 msgid "Show results for required tests" -msgstr "" +msgstr "필수 테스트 결과 표시" #: src/tables/stock/StockItemTestResultTable.tsx:410 msgid "Include Installed" -msgstr "" +msgstr "설치된 항목 포함" #: src/tables/stock/StockItemTestResultTable.tsx:411 msgid "Show results for installed stock items" -msgstr "" +msgstr "설치된 재고 품목의 결과 표시" #: src/tables/stock/StockItemTestResultTable.tsx:415 msgid "Passed" -msgstr "" +msgstr "합격" #: src/tables/stock/StockItemTestResultTable.tsx:416 msgid "Show only passed tests" -msgstr "" +msgstr "통과한 테스트만 표시" #: src/tables/stock/StockItemTestResultTable.tsx:421 msgid "Show results for enabled tests" -msgstr "" +msgstr "활성화된 테스트 결과 표시" #: src/tables/stock/StockLocationTable.tsx:38 #~ msgid "structural" @@ -12662,7 +12662,7 @@ msgstr "" #: src/tables/stock/StockLocationTable.tsx:39 msgid "Include sublocations in results" -msgstr "" +msgstr "결과에 하위 위치 포함" #: src/tables/stock/StockLocationTable.tsx:43 #~ msgid "external" @@ -12670,52 +12670,52 @@ msgstr "" #: src/tables/stock/StockLocationTable.tsx:44 msgid "Show structural locations" -msgstr "" +msgstr "구조 위치 표시" #: src/tables/stock/StockLocationTable.tsx:49 msgid "Show external locations" -msgstr "" +msgstr "외부 위치 표시" #: src/tables/stock/StockLocationTable.tsx:53 msgid "Has location type" -msgstr "" +msgstr "위치 유형 있음" #: src/tables/stock/StockLocationTable.tsx:58 msgid "Filter by location type" -msgstr "" +msgstr "위치 유형으로 필터링" #: src/tables/stock/StockLocationTable.tsx:107 #: src/tables/stock/StockLocationTable.tsx:163 msgid "Add Stock Location" -msgstr "" +msgstr "재고 위치 추가" #: src/tables/stock/StockLocationTable.tsx:132 msgid "Set Parent Location" -msgstr "" +msgstr "상위 위치 설정" #: src/tables/stock/StockLocationTable.tsx:152 msgid "Set parent location for the selected items" -msgstr "" +msgstr "선택한 항목의 상위 위치 설정" #: src/tables/stock/StockTrackingTable.tsx:93 msgid "Old Status" -msgstr "" +msgstr "이전 상태" #: src/tables/stock/StockTrackingTable.tsx:109 msgid "Added" -msgstr "" +msgstr "추가됨" #: src/tables/stock/StockTrackingTable.tsx:114 msgid "Removed" -msgstr "" +msgstr "제거됨" #: src/tables/stock/StockTrackingTable.tsx:250 msgid "Stock item no longer exists" -msgstr "" +msgstr "재고 품목이 더 이상 존재하지 않습니다" #: src/tables/stock/StockTrackingTable.tsx:276 msgid "No user information" -msgstr "" +msgstr "사용자 정보 없음" #: src/tables/stock/TestStatisticsTable.tsx:34 #: src/tables/stock/TestStatisticsTable.tsx:64 @@ -12724,7 +12724,7 @@ msgstr "" #: src/views/MobileAppView.tsx:25 msgid "Mobile viewport detected" -msgstr "" +msgstr "모바일 화면이 감지되었습니다" #: src/views/MobileAppView.tsx:25 #~ msgid "Platform UI is optimized for Tablets and Desktops, you can use the official app for a mobile experience." @@ -12732,13 +12732,13 @@ msgstr "" #: src/views/MobileAppView.tsx:28 msgid "InvenTree UI is optimized for Tablets and Desktops, you can use the official app for a mobile experience." -msgstr "" +msgstr "InvenTree UI는 태블릿과 데스크톱에 최적화되어 있습니다. 모바일 환경에서는 공식 앱을 사용할 수 있습니다." #: src/views/MobileAppView.tsx:34 msgid "Read the docs" -msgstr "" +msgstr "문서 읽기" #: src/views/MobileAppView.tsx:42 msgid "Ignore and continue to Desktop view" -msgstr "" +msgstr "무시하고 데스크톱 보기로 계속 진행" diff --git a/src/frontend/src/locales/lt/messages.po b/src/frontend/src/locales/lt/messages.po index 46922dbeb8..00de31213e 100644 --- a/src/frontend/src/locales/lt/messages.po +++ b/src/frontend/src/locales/lt/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: lt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/lv/messages.po b/src/frontend/src/locales/lv/messages.po index 7be98d95db..4544fa6613 100644 --- a/src/frontend/src/locales/lv/messages.po +++ b/src/frontend/src/locales/lv/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: lv\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/nl/messages.po b/src/frontend/src/locales/nl/messages.po index c621108304..1811d0773e 100644 --- a/src/frontend/src/locales/nl/messages.po +++ b/src/frontend/src/locales/nl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: nl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Inloggen mislukt" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Controleer uw invoer en probeer het opnieuw." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "E-mail levering gelukt" @@ -2093,7 +2093,7 @@ msgstr "Gegevens verwerken" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Er is een fout opgetreden" @@ -5262,7 +5262,7 @@ msgstr "Interne serverfout" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Uitgelogd" @@ -5290,81 +5290,81 @@ msgstr "MFA-login succesvol" msgid "MFA details were automatically provided in the browser" msgstr "De MFA-gegevens werden automatisch verstrekt in de browser" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Succesvol uitgelogd" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Taal is gewijzigd" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Uw actieve taal is gewijzigd naar de gewenste taal in uw profiel" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Thema gewijzigd" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Uw actieve thema is gewijzigd naar het thema in uw profiel" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Check uw inbox voor een reset-link. Dit werkt alleen als u een account heeft. Controleer ook in spam box." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Reset is mislukt" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Is al ingelogd" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Er is een tegenstrijdige sessie op de server voor deze browser. Meld u eerst af." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Ingelogd" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Succesvol ingelogd" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Het instellen van MFA is mislukt" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "MFA-instellingen geslaagd" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "De MFA via TOTP is succesvol ingesteld; u moet opnieuw inloggen." -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Wachtwoord ingesteld" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Het wachtwoord is met succes ingesteld. U kunt nu inloggen met uw nieuwe wachtwoord" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Wachtwoord kon niet worden gewijzigd" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "De twee wachtwoordvelden komen niet overeen" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Wachtwoord gewijzigd" diff --git a/src/frontend/src/locales/no/messages.po b/src/frontend/src/locales/no/messages.po index 8ec767757a..151e9c2828 100644 --- a/src/frontend/src/locales/no/messages.po +++ b/src/frontend/src/locales/no/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: no\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Innloggingen mislyktes" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Kontroller inndataene og prøv igjen." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Levering av e-post vellykket" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Sjekk innboksen for en nullstillingslenke. Dette fungerer bare hvis du har en konto. Sjekk også i spam." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Tilbakestilling feilet" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Passord angitt" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Passordet er blitt satt. Du kan nå logge inn med ditt nye passord" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Passord endret" diff --git a/src/frontend/src/locales/pl/messages.po b/src/frontend/src/locales/pl/messages.po index 33e9e30084..ea6e920179 100644 --- a/src/frontend/src/locales/pl/messages.po +++ b/src/frontend/src/locales/pl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Polish\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Logowanie nie powiodło się" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Sprawdź dane i spróbuj ponownie." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Wiadomość dostarczona" @@ -2093,7 +2093,7 @@ msgstr "Przetwarzanie danych" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Wystąpił błąd" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Wylogowano" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Zalogowano" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Hasło ustawione" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Hasło zostało ustawione pomyślnie. Możesz teraz zalogować się przy użyciu nowego hasła" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/pt/messages.po b/src/frontend/src/locales/pt/messages.po index deac8a37e7..86647bdd1d 100644 --- a/src/frontend/src/locales/pt/messages.po +++ b/src/frontend/src/locales/pt/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1695,12 +1695,12 @@ msgstr "Não foi possível iniciar a sessão" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Verifique suas informações e tente novamente." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Envio bem sucedido" @@ -2094,7 +2094,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5263,7 +5263,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Sessão terminada" @@ -5291,81 +5291,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Sessão terminada com sucesso" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Verifique a sua caixa de entrada com um link para redefinir. Isso só funciona se você já tiver uma conta. Cheque no também no spam." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Falha ao redefinir" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Sessão Iniciada" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Sessão iniciada com êxito" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Palavra-passe definida" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "A senha foi definida com sucesso. Você agora pode fazer login com sua nova senha" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/pt_BR/messages.po b/src/frontend/src/locales/pt_BR/messages.po index e758b6318a..79ddca5fc8 100644 --- a/src/frontend/src/locales/pt_BR/messages.po +++ b/src/frontend/src/locales/pt_BR/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Falha ao acessar" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Verifique sua entrada e tente novamente." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Envio de e-mail concluído" @@ -2093,7 +2093,7 @@ msgstr "Processando dados" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Ocorreu um erro" @@ -5262,7 +5262,7 @@ msgstr "Erro interno do servidor" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Desconectado" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Deslogado com sucesso" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Tema alterado" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Verifique sua caixa de entrada para o link de redefinição. Isso só funciona se você tiver uma conta. Cheque no spam também." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "A redefinação falhou" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Já logado" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "Há uma sessão conflitante no servidor para este navegador. Por favor, faça logout primeiro." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Logado" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Logado com sucesso" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Falha ao configurar autenticação de múltiplos fatores" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "Autenticação de múltiplos fatores configurada com sucesso" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Senha definida" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Sua senha foi alterada com sucesso. Agora você pode acessar usando sua nova senha" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "A senha não pode ser alterada" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "As senhas são diferentes" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Senha alterada" diff --git a/src/frontend/src/locales/ro/messages.po b/src/frontend/src/locales/ro/messages.po index ed44781adf..e128fd9651 100644 --- a/src/frontend/src/locales/ro/messages.po +++ b/src/frontend/src/locales/ro/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ro\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Parolă setată" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Parola a fost setată cu succes. Acum vă puteţi autentifica cu noua parolă" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Nu s-a putut modifica parola" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "Cele două câmpuri de parolă nu se potrivesc" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Parolă schimbată" diff --git a/src/frontend/src/locales/ru/messages.po b/src/frontend/src/locales/ru/messages.po index 724f50e8e1..e06094d2f1 100644 --- a/src/frontend/src/locales/ru/messages.po +++ b/src/frontend/src/locales/ru/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ru\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Russian\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Ошибка входа" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Проверьте введенные данные и повторите попытку." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Отправка почты прошла успешно" @@ -2093,7 +2093,7 @@ msgstr "Обработка данных" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Произошла ошибка" @@ -5262,7 +5262,7 @@ msgstr "Внутренняя ошибка сервера" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Выход" @@ -5290,81 +5290,81 @@ msgstr "Успешный вход с помощью МФА" msgid "MFA details were automatically provided in the browser" msgstr "Данные МФА автоматически переданы в браузер" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Успешный выход из системы" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "Язык изменён" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "Язык изменён на заданный в вашем профиле" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Тема изменена" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "Тема интерфейса изменена на заданную в профиле" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Проверьте свой почтовый ящик, чтобы получить ссылку на сброс. Это работает только в том случае, если у вас есть учетная запись. Проверьте также спам." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Сброс не удался" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Вход уже выполнен" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "На сервере есть конфликтующие сессии для данного браузера. Пожалуйста, выйдите из системы." -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Войти в систему" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Вход выполнен успешно" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "Не удалось настроить МФА" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "Многофакторная аутентификация настроена успешно" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "Многофакторная аутентификация через TOTP настроена успешно; вам нужно авторизоваться повторно." -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Пароль установлен" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Пароль был установлен успешно. Теперь вы можете войти в систему с новым паролем" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Пароль не может быть изменён" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "Пароли не совпадают" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Пароль изменен" diff --git a/src/frontend/src/locales/sk/messages.po b/src/frontend/src/locales/sk/messages.po index 0ebafc665d..26beb4626b 100644 --- a/src/frontend/src/locales/sk/messages.po +++ b/src/frontend/src/locales/sk/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sk\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/sl/messages.po b/src/frontend/src/locales/sl/messages.po index 6a0be01254..5ba947ab0f 100644 --- a/src/frontend/src/locales/sl/messages.po +++ b/src/frontend/src/locales/sl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/sr/messages.po b/src/frontend/src/locales/sr/messages.po index c1c1869f9e..fee5dd4a43 100644 --- a/src/frontend/src/locales/sr/messages.po +++ b/src/frontend/src/locales/sr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Neuspešna prijava" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Proverite svoj unos i pokušajte ponovno." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Isporuka pošte uspešna" @@ -2093,7 +2093,7 @@ msgstr "Obrađivanje podataka" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Desila se greška" @@ -5262,7 +5262,7 @@ msgstr "Interna serverska greška" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Odjavljen" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Uspešno ste odjavljeni" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Proverite u primljenoj pošti da li imate link za resetovanje. Proverite i u spamu" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Resetovanje neuspešno" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Ulogovani ste" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Uspešno ste se ulogovali" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Lozinka podešena" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Lozinka je uspešno podešena. Sada se možete prijaviti sa novom lozinkom" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "Lozinku nije bilo moguće promeniti" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Lozinka promenjena" diff --git a/src/frontend/src/locales/sv/messages.po b/src/frontend/src/locales/sv/messages.po index 341e69e7ba..3623f662f4 100644 --- a/src/frontend/src/locales/sv/messages.po +++ b/src/frontend/src/locales/sv/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sv\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Inloggningen misslyckades" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Kontrollera din inmatning och försök igen." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "E-postleverans lyckad" @@ -2093,7 +2093,7 @@ msgstr "Bearbetar data" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Ett fel inträffade" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Utloggad" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Utloggningen lyckades" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Tema ändrat" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Kolla din inkorg för en återställningslänk. Detta fungerar bara om du har ett konto. Kontrollera även i skräppost." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Återställningen misslyckades" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Redan inloggad" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Inloggad" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Inloggning lyckades" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Lösenord sparat!" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Ditt lösenord har sparats. Du kan nu logga in med ditt nya lösenord." -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "Lösenord ändrat" diff --git a/src/frontend/src/locales/th/messages.po b/src/frontend/src/locales/th/messages.po index e979ab6818..24fd5d0ea7 100644 --- a/src/frontend/src/locales/th/messages.po +++ b/src/frontend/src/locales/th/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: th\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Thai\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/tr/messages.po b/src/frontend/src/locales/tr/messages.po index 42679f5a14..a323fe826f 100644 --- a/src/frontend/src/locales/tr/messages.po +++ b/src/frontend/src/locales/tr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: tr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Giriş başarısız" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Lütfen bilgilerinizi kontrol edin ve yeniden giriş yapın." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "E-posta teslimi başarılı" @@ -2093,7 +2093,7 @@ msgstr "Veri İşleniyor" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Bir hata oluştu" @@ -5262,7 +5262,7 @@ msgstr "Dahili sunucu hatası" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Çıkış Yapıldı" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Başarıyla çıkış yapıldı" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "Tema değişti" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Bir sıfırlama bağlantısı için gelen kutunuzu veya spam kutunuzu yoklayın. Bu yalnızca bir hesabınız varsa çalışacaktır." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Sıfırlama başarısız" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Zaten giriş yapıldı" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Giriş Yapıldı" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Başarıyla giriş yapıldı" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Şifre belirlendi" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Şifreniz başarıyla değiştirildi. Artık yeni şifrenizle giriş yapabilirsiniz" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/uk/messages.po b/src/frontend/src/locales/uk/messages.po index ff44c7fb76..2250983ef1 100644 --- a/src/frontend/src/locales/uk/messages.po +++ b/src/frontend/src/locales/uk/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: uk\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Не вдалося увійти" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Перевірте введені дані та повторіть спробу." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Пошту відправлено" @@ -2093,7 +2093,7 @@ msgstr "" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "" @@ -5262,7 +5262,7 @@ msgstr "Внутрішня помилка сервера" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Перевірте вашу поштову скриньку для скидання посилання. Це працює тільки в тому випадку, якщо у вас є обліковий запис. Перевірити також спам." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "Вхід вже здійснено" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Пароль успішно встановлено. Тепер ви можете увійти в систему, використовуючи новий пароль" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/vi/messages.po b/src/frontend/src/locales/vi/messages.po index ddcc4af076..7e8aebd175 100644 --- a/src/frontend/src/locales/vi/messages.po +++ b/src/frontend/src/locales/vi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: vi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:32\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "Đăng nhập thất bại" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "Kiểm tra đầu vào của bạn và thử lại." #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "Thư đã được gửi đi thành công" @@ -2093,7 +2093,7 @@ msgstr "Đang xử lý dữ liệu" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "Có lỗi xảy ra" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "Đã đăng xuất" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "Đăng xuất thành công" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "Kiểm tra hộp thư để lấy liên kết đặt lại. Việc này chỉ có tác dụng khi bạn có tài khoản. Cần kiểm tra thư mục Spam/Junk." -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "Thiết lập lại thất bại" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "Đã đăng nhập" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "Đăng nhập thành công." -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "Đã đặt mật khẩu" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "Mật khẩu đã được đặt mới thành công. Bạn có thể đăng nhập bằng mật khẩu mới" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" diff --git a/src/frontend/src/locales/zh_Hans/messages.po b/src/frontend/src/locales/zh_Hans/messages.po index 16801c3b10..8e95d4047e 100644 --- a/src/frontend/src/locales/zh_Hans/messages.po +++ b/src/frontend/src/locales/zh_Hans/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: zh\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -1694,12 +1694,12 @@ msgstr "登录失败" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "请检查您的输入并重试。" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "邮件发送成功" @@ -2093,7 +2093,7 @@ msgstr "处理数据中" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "发生错误" @@ -5262,7 +5262,7 @@ msgstr "服务内部错误" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "已登出" @@ -5290,81 +5290,81 @@ msgstr "MFA登录验证成功" msgid "MFA details were automatically provided in the browser" msgstr "浏览器自动提供了MFA验证信息" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "已成功登出" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "语言已更改" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "您的活动语言已被更改为您个人资料中设置的语言" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "主题已更改" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "您的活动主题已被更改为您个人资料中设置的主题" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "查看收件箱中的重置链接。这只有在您有账户的情况下才会起作用。也请检查垃圾邮件。" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "重置失败" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "您已经登陆了" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "此浏览器的服务器上存在冲突会话。请先登出该会话。" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "已登录" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "已成功登入" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "设置 MFA 失败" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "MFA 设置成功" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "基于 TOTP 的多因素认证(MFA)设置成功;您需要重新登录。" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "密码已设置" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "密码设置成功。您现在可以使用新密码登录" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "无法更改密码" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "两个密码不匹配" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "密码已更改" diff --git a/src/frontend/src/locales/zh_Hant/messages.po b/src/frontend/src/locales/zh_Hant/messages.po index fcd416555b..5ed9d3bd16 100644 --- a/src/frontend/src/locales/zh_Hant/messages.po +++ b/src/frontend/src/locales/zh_Hant/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: zh\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-13 10:40\n" +"PO-Revision-Date: 2026-04-21 00:31\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -593,7 +593,7 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 #: src/forms/BomForms.tsx:74 -#: src/functions/auth.tsx:687 +#: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:408 @@ -802,7 +802,7 @@ msgstr "選擇錯誤糾正級別" #: src/components/barcodes/QRCode.tsx:170 msgid "Failed to link barcode" -msgstr "" +msgstr "條碼關聯失敗" #: src/components/barcodes/QRCode.tsx:179 #: src/pages/part/PartDetail.tsx:498 @@ -1694,12 +1694,12 @@ msgstr "登錄失敗" #: src/components/forms/AuthenticationForm.tsx:90 #: src/components/forms/AuthenticationForm.tsx:106 #: src/functions/auth.tsx:134 -#: src/functions/auth.tsx:350 +#: src/functions/auth.tsx:354 msgid "Check your input and try again." msgstr "請檢查您的輸入並重試。" #: src/components/forms/AuthenticationForm.tsx:100 -#: src/functions/auth.tsx:341 +#: src/functions/auth.tsx:345 msgid "Mail delivery successful" msgstr "郵件發送成功" @@ -2093,7 +2093,7 @@ msgstr "處理數據中" #: src/components/importer/ImporterColumnSelector.tsx:247 #: src/components/items/ErrorItem.tsx:12 #: src/functions/api.tsx:60 -#: src/functions/auth.tsx:397 +#: src/functions/auth.tsx:401 msgid "An error occurred" msgstr "發生錯誤" @@ -5262,7 +5262,7 @@ msgstr "" #~ msgstr "You have been logged out" #: src/functions/auth.tsx:124 -#: src/functions/auth.tsx:216 +#: src/functions/auth.tsx:220 msgid "Logged Out" msgstr "已登出" @@ -5290,81 +5290,81 @@ msgstr "" msgid "MFA details were automatically provided in the browser" msgstr "" -#: src/functions/auth.tsx:217 +#: src/functions/auth.tsx:221 msgid "Successfully logged out" msgstr "已成功登出" -#: src/functions/auth.tsx:284 +#: src/functions/auth.tsx:288 msgid "Language changed" msgstr "" -#: src/functions/auth.tsx:285 +#: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:306 +#: src/functions/auth.tsx:310 msgid "Theme changed" msgstr "" -#: src/functions/auth.tsx:307 +#: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" msgstr "" -#: src/functions/auth.tsx:342 +#: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." msgstr "查看收件箱中的重置鏈接。這隻有在您有賬户的情況下才會起作用。也請檢查垃圾郵件。" -#: src/functions/auth.tsx:349 -#: src/functions/auth.tsx:613 +#: src/functions/auth.tsx:353 +#: src/functions/auth.tsx:617 msgid "Reset failed" msgstr "重置失敗" -#: src/functions/auth.tsx:376 +#: src/functions/auth.tsx:380 msgid "Already logged in" msgstr "" -#: src/functions/auth.tsx:377 +#: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." msgstr "" -#: src/functions/auth.tsx:433 +#: src/functions/auth.tsx:437 msgid "Logged In" msgstr "已登錄" -#: src/functions/auth.tsx:434 +#: src/functions/auth.tsx:438 msgid "Successfully logged in" msgstr "已成功登入" -#: src/functions/auth.tsx:568 +#: src/functions/auth.tsx:572 msgid "Failed to set up MFA" msgstr "" -#: src/functions/auth.tsx:587 +#: src/functions/auth.tsx:591 msgid "MFA Setup successful" msgstr "" -#: src/functions/auth.tsx:588 +#: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." msgstr "" -#: src/functions/auth.tsx:603 +#: src/functions/auth.tsx:607 msgid "Password set" msgstr "密碼已設置" -#: src/functions/auth.tsx:604 -#: src/functions/auth.tsx:713 +#: src/functions/auth.tsx:608 +#: src/functions/auth.tsx:717 msgid "The password was set successfully. You can now login with your new password" msgstr "密碼設置成功。您現在可以使用新密碼登錄" -#: src/functions/auth.tsx:678 +#: src/functions/auth.tsx:682 msgid "Password could not be changed" msgstr "" -#: src/functions/auth.tsx:696 +#: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" msgstr "" -#: src/functions/auth.tsx:712 +#: src/functions/auth.tsx:716 msgid "Password Changed" msgstr "" From 6cb0cfbfcc0d7caed9576abbd07bc4c54469325e Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Wed, 22 Apr 2026 01:11:27 +0200 Subject: [PATCH 19/71] feat(frontend): warn if notes are dirty (#11772) * feat(frontend): warn if notes are dirty closes https://github.com/invenhost/InvenTree/issues/301 * fix type * fix small style issues * add changelog entry * stop closing tab --- CHANGELOG.md | 2 + .../src/components/editors/NotesEditor.tsx | 11 +++- .../src/components/panels/NotesPanel.tsx | 3 +- src/frontend/src/components/panels/Panel.tsx | 1 + .../src/components/panels/PanelGroup.tsx | 57 ++++++++++++++++++- 5 files changed, 71 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74c25341c4..1fc1bf862a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [#11772](https://github.com/inventree/InvenTree/pull/11772) the UI now warns if you navigate away from a note panel with unsaved changes + ### Changed ### Removed diff --git a/src/frontend/src/components/editors/NotesEditor.tsx b/src/frontend/src/components/editors/NotesEditor.tsx index 667cdd1ae5..afdb3d2c05 100644 --- a/src/frontend/src/components/editors/NotesEditor.tsx +++ b/src/frontend/src/components/editors/NotesEditor.tsx @@ -25,15 +25,18 @@ import { useApi } from '../../contexts/ApiContext'; export default function NotesEditor({ modelType, modelId, - editable + editable, + setDirtyCallback }: Readonly<{ modelType: ModelType; modelId: number; editable?: boolean; + setDirtyCallback?: (dirty: boolean) => void; }>) { const api = useApi(); // In addition to the editable prop, we also need to check if the user has "enabled" editing const [editing, setEditing] = useState(false); + const [localIsDirty, setLocalIsDirty] = useState(false); const [markdown, setMarkdown] = useState(''); @@ -42,6 +45,10 @@ export default function NotesEditor({ setEditing(false); }, [editable, modelId, modelType]); + useEffect(() => { + setDirtyCallback?.(localIsDirty); + }, [localIsDirty]); + const noteUrl: string = useMemo(() => { const modelInfo = ModelInformationDict[modelType]; return apiUrl(modelInfo.api_endpoint, modelId); @@ -121,6 +128,7 @@ export default function NotesEditor({ id: 'notes', autoClose: 2000 }); + setLocalIsDirty(false); }) .catch((error) => { notifications.hide('notes'); @@ -222,6 +230,7 @@ export default function NotesEditor({ getMdeInstance={(instance: SimpleMde) => setMdeInstance(instance)} onChange={(value: string) => { setMarkdown(value); + setLocalIsDirty(true); }} options={editorOptions} value={markdown} diff --git a/src/frontend/src/components/panels/NotesPanel.tsx b/src/frontend/src/components/panels/NotesPanel.tsx index a200a706d4..3de9d6f011 100644 --- a/src/frontend/src/components/panels/NotesPanel.tsx +++ b/src/frontend/src/components/panels/NotesPanel.tsx @@ -34,6 +34,7 @@ export default function NotesPanel({ /> ) : ( - ) + ), + supportsDirty: true }; } diff --git a/src/frontend/src/components/panels/Panel.tsx b/src/frontend/src/components/panels/Panel.tsx index 2fafd2283b..548dc4bac5 100644 --- a/src/frontend/src/components/panels/Panel.tsx +++ b/src/frontend/src/components/panels/Panel.tsx @@ -13,6 +13,7 @@ export type PanelType = { hidden?: boolean; disabled?: boolean; showHeadline?: boolean; + supportsDirty?: boolean; }; export type PanelGroupType = { diff --git a/src/frontend/src/components/panels/PanelGroup.tsx b/src/frontend/src/components/panels/PanelGroup.tsx index c6d7015ec6..80b13c80fb 100644 --- a/src/frontend/src/components/panels/PanelGroup.tsx +++ b/src/frontend/src/components/panels/PanelGroup.tsx @@ -39,6 +39,7 @@ import { cancelEvent } from '@lib/functions/Events'; import { eventModified, getBaseUrl } from '@lib/functions/Navigation'; import { navigateToLink } from '@lib/functions/Navigation'; import { t } from '@lingui/core/macro'; +import { useWindowEvent } from '@mantine/hooks'; import { useShallow } from 'zustand/react/shallow'; import { generateUrl } from '../../functions/urls'; import { usePluginPanels } from '../../hooks/UsePluginPanels'; @@ -173,6 +174,17 @@ function BasePanelGroup({ const handlePanelChange = useCallback( (targetPanel: string, event?: any) => { cancelEvent(event); + + // check if we are currently on a dirty panel, if so prompt the user to confirm navigation + if (isDirty) { + const confirm = globalThis.confirm( + t`You have unsaved changes, are you sure you want to navigate away from this panel?` + ); + if (!confirm) { + return; + } + } + if (event && eventModified(event)) { const url = `${location.pathname}/../${targetPanel}`; navigateToLink(url, navigate, event); @@ -186,6 +198,9 @@ function BasePanelGroup({ if (targetPanel && onPanelChange) { onPanelChange(targetPanel); } + + // change dirty state + setIsDirty(false); }, [activePanels, navigate, location, onPanelChange] ); @@ -206,6 +221,13 @@ function BasePanelGroup({ } }, [activePanels, panel]); + const [isDirty, setIsDirty] = useState(false); + useWindowEvent('beforeunload', (event) => { + if (isDirty) { + event.preventDefault(); + } + }); + return ( @@ -341,7 +363,7 @@ function BasePanelGroup({ )} - {panel.content} + {getPanelContent(panel.content, panel, setIsDirty)} @@ -353,6 +375,39 @@ function BasePanelGroup({ ); } +/* + * Helper function to inject the setIsDirty callback into panel content if supported + * This allows panels to mark themselves as dirty when changes are made, which will trigger a confirmation prompt when navigating away from the panel + */ +function getPanelContent( + content: ReactNode, + panel: PanelType, + setIsDirty?: (dirty: boolean) => void +): ReactNode { + if (content === null) { + return null; + } + + // pass setIsDirty callback to content if supported + if ( + panel.supportsDirty && + typeof content === 'object' && + 'props' in content && + setIsDirty + ) { + return { + ...content, + props: { + ...(content.props || {}), + setDirtyCallback: setIsDirty + } + }; + } + + // normal content, just return as is + return content; +} + function IndexPanelComponent({ pageKey, selectedPanel, From d8cd1849baf112de4de026fba548f72396a36328 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Wed, 22 Apr 2026 08:53:31 +0200 Subject: [PATCH 20/71] feat(frontend): add inline create modal to PurchaseOrderLineItem dialog (#11778) * feat(frontend): add inline create modal to PurchaseOrderLineItem dialog fixes https://github.com/invenhost/InvenTree/issues/299 * add changelog * implement suggested fix Co-authored-by: Oliver --------- Co-authored-by: Oliver --- CHANGELOG.md | 1 + src/frontend/lib/types/Forms.tsx | 1 + .../forms/fields/RelatedModelField.tsx | 114 ++++++++++++++++-- src/frontend/src/forms/PurchaseOrderForms.tsx | 6 + 4 files changed, 111 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fc1bf862a..2be3883c45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [#11778](https://github.com/inventree/InvenTree/pull/11778) adds inline supplier part creation to po line item addition dialog. - [#11772](https://github.com/inventree/InvenTree/pull/11772) the UI now warns if you navigate away from a note panel with unsaved changes ### Changed diff --git a/src/frontend/lib/types/Forms.tsx b/src/frontend/lib/types/Forms.tsx index 2b229dcb45..de364d68f8 100644 --- a/src/frontend/lib/types/Forms.tsx +++ b/src/frontend/lib/types/Forms.tsx @@ -114,6 +114,7 @@ export type ApiFormFieldType = { placeholderAutofill?: boolean; placeholderWarningCompare?: string | number; placeholderWarning?: string; + addCreateFields?: ApiFormFieldSet; description?: string; preFieldContent?: JSX.Element; postFieldContent?: JSX.Element; diff --git a/src/frontend/src/components/forms/fields/RelatedModelField.tsx b/src/frontend/src/components/forms/fields/RelatedModelField.tsx index df711af1c1..d5f0a9fcff 100644 --- a/src/frontend/src/components/forms/fields/RelatedModelField.tsx +++ b/src/frontend/src/components/forms/fields/RelatedModelField.tsx @@ -8,17 +8,32 @@ import { } from '@mantine/core'; import { useDebouncedValue, useId } from '@mantine/hooks'; import { useQuery } from '@tanstack/react-query'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { + type ReactNode, + useCallback, + useEffect, + useMemo, + useRef, + useState +} from 'react'; import { type FieldValues, type UseControllerReturn, + type UseFormReturn, useFormContext } from 'react-hook-form'; import Select from 'react-select'; -import { ModelInformationDict } from '@lib/enums/ModelInformation'; +import { ActionButton } from '@lib/components/ActionButton'; +import { + ModelInformationDict, + type TranslatableModelInformationInterface +} from '@lib/enums/ModelInformation'; +import { apiUrl } from '@lib/functions/Api'; import type { ApiFormFieldType } from '@lib/types/Forms'; +import { IconPlus } from '@tabler/icons-react'; import { useApi } from '../../../contexts/ApiContext'; +import { useCreateApiFormModal } from '../../../hooks/UseForm'; import { useGlobalSettingsState, useUserSettingsState @@ -54,6 +69,10 @@ export function RelatedModelField({ // Keep track of the primary key value for this field const [pk, setPk] = useState(null); + function setValuefromPK(pk: number) { + fetchSingleField(pk); + } + // Handle condition where the form is rebuilt dynamically useEffect(() => { const value = field.value || pk; @@ -139,6 +158,17 @@ export function RelatedModelField({ return ModelInformationDict[definition.model]; }, [definition.model]); + // Determine whether an add button should be added for this field + const addButton = useMemo(() => { + if (!modelInfo) { + return false; + } + if (definition.addCreateFields) { + return true; + } + return false; + }, [definition.addCreateFields, modelInfo]); + // Determine whether a barcode field should be added const addBarcodeField: boolean = useMemo(() => { if (!modelInfo || !modelInfo.supports_barcode) { @@ -296,15 +326,7 @@ export function RelatedModelField({ return null; } - let _filters = definition.filters ?? {}; - - if (definition.adjustFilters) { - _filters = - definition.adjustFilters({ - filters: _filters, - data: form.getValues() - }) ?? _filters; - } + const _filters = retrieveFilters(definition, form); // If the filters have changed, clear the data if (JSON.stringify(_filters) !== JSON.stringify(filters)) { @@ -461,6 +483,9 @@ export function RelatedModelField({ styles={{ description: { paddingBottom: '5px' } }} > + {addButton && + modelInfo && + InlineCreateButton(definition, modelInfo, form, setValuefromPK)} , - setValue: (value: number) => void -): ReactNode { +function InlineCreateButton({ + definition, + modelInfo, + form, + setValue +}: { + definition: ApiFormFieldType; + modelInfo: TranslatableModelInformationInterface; + form: UseFormReturn; + setValue: (value: number) => void; +}): ReactNode { const relatedInitialData = useMemo( () => calculateModalData(definition, form), [definition.filters, definition.addCreateFields, form] ); - const model = useMemo(() => modelInfo?.label() ?? '', [modelInfo]); + + const title: string = useMemo(() => { + const model = modelInfo?.label() ?? t`Item`; + return t`Create New ${model}`; + }, [modelInfo]); const create_modal = useCreateApiFormModal({ - title: t`Create New ${model}`, + title: title, url: apiUrl(modelInfo.api_endpoint), modelType: definition.model, initialData: relatedInitialData, @@ -577,6 +591,8 @@ function InlineCreateButton( <> {create_modal.modal} { create_modal.open(); }} diff --git a/src/frontend/src/forms/CommonForms.tsx b/src/frontend/src/forms/CommonForms.tsx index 28b1ccee5d..8950c6fc65 100644 --- a/src/frontend/src/forms/CommonForms.tsx +++ b/src/frontend/src/forms/CommonForms.tsx @@ -12,6 +12,7 @@ import type { } from '../components/render/StatusRenderer'; import { useApi } from '../contexts/ApiContext'; import { useGlobalStatusState } from '../states/GlobalStatusState'; +import { useUserState } from '../states/UserState'; export function projectCodeFields(): ApiFormFieldSet { return { @@ -97,6 +98,25 @@ export function extraLineItemFields(): ApiFormFieldSet { }; } +export function useParameterTemplateFields(): ApiFormFieldSet { + return useMemo(() => { + return { + name: {}, + description: {}, + units: {}, + model_type: {}, + choices: {}, + checkbox: {}, + selectionlist: { + filters: { + active: true + } + }, + enabled: {} + }; + }, []); +} + export function useParameterFields({ modelType, modelId @@ -106,6 +126,10 @@ export function useParameterFields({ }): ApiFormFieldSet { const api = useApi(); + const user = useUserState.getState(); + + const templateCreateFields = useParameterTemplateFields(); + const [selectionListId, setSelectionListId] = useState(null); // Valid field choices @@ -193,7 +217,8 @@ export function useParameterFields({ } else if (record?.selectionlist) { setFieldType('related field'); } - } + }, + addCreateFields: user.isStaff() ? templateCreateFields : undefined }, data: { value: data, @@ -244,5 +269,14 @@ export function useParameterFields({ }, note: {} }; - }, [data, modelType, fieldType, choices, modelId, selectionListId]); + }, [ + data, + modelType, + fieldType, + choices, + modelId, + selectionListId, + templateCreateFields, + user + ]); } diff --git a/src/frontend/src/forms/CompanyForms.tsx b/src/frontend/src/forms/CompanyForms.tsx index e94bfedded..d50b5b927b 100644 --- a/src/frontend/src/forms/CompanyForms.tsx +++ b/src/frontend/src/forms/CompanyForms.tsx @@ -56,6 +56,11 @@ export function useSupplierPartFields({ filters: { active: true, is_supplier: true + }, + addCreateFields: { + name: {}, + description: {}, + is_supplier: { value: true, hidden: true } } }, SKU: { @@ -88,6 +93,11 @@ export function useManufacturerPartFields() { filters: { active: true, is_manufacturer: true + }, + addCreateFields: { + name: {}, + description: {}, + is_manufacturer: { value: true, hidden: true } } }, MPN: {}, diff --git a/src/frontend/src/forms/PurchaseOrderForms.tsx b/src/frontend/src/forms/PurchaseOrderForms.tsx index abc628ccc2..e0993a23eb 100644 --- a/src/frontend/src/forms/PurchaseOrderForms.tsx +++ b/src/frontend/src/forms/PurchaseOrderForms.tsx @@ -247,6 +247,11 @@ export function usePurchaseOrderFields({ filters: { is_supplier: true, active: true + }, + addCreateFields: { + name: {}, + description: {}, + is_supplier: { value: true, hidden: true } } }, supplier_reference: {}, diff --git a/src/frontend/src/forms/SalesOrderForms.tsx b/src/frontend/src/forms/SalesOrderForms.tsx index 5239a6101e..52cd670a19 100644 --- a/src/frontend/src/forms/SalesOrderForms.tsx +++ b/src/frontend/src/forms/SalesOrderForms.tsx @@ -48,6 +48,11 @@ export function useSalesOrderFields({ filters: { is_customer: true, active: true + }, + addCreateFields: { + name: {}, + description: {}, + is_customer: { value: true, hidden: true } } }, customer_reference: {}, diff --git a/src/frontend/src/tables/general/ParameterTemplateTable.tsx b/src/frontend/src/tables/general/ParameterTemplateTable.tsx index e95bf90421..035dfc3260 100644 --- a/src/frontend/src/tables/general/ParameterTemplateTable.tsx +++ b/src/frontend/src/tables/general/ParameterTemplateTable.tsx @@ -13,6 +13,7 @@ import type { TableFilter } from '@lib/types/Filters'; import type { RowAction, TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; import { useCallback, useMemo, useState } from 'react'; +import { useParameterTemplateFields } from '../../forms/CommonForms'; import { useFilters } from '../../hooks/UseFilter'; import { useCreateApiFormModal, @@ -30,22 +31,7 @@ export default function ParameterTemplateTable() { const table = useTable('parameter-templates'); const user = useUserState(); - const parameterTemplateFields: ApiFormFieldSet = useMemo(() => { - return { - name: {}, - description: {}, - units: {}, - model_type: {}, - choices: {}, - checkbox: {}, - selectionlist: { - filters: { - active: true - } - }, - enabled: {} - }; - }, []); + const parameterTemplateFields: ApiFormFieldSet = useParameterTemplateFields(); const newTemplate = useCreateApiFormModal({ url: ApiEndpoints.parameter_template_list, diff --git a/src/frontend/tests/pages/pui_purchasing.spec.ts b/src/frontend/tests/pages/pui_purchasing.spec.ts index f7490ab73b..8c06c4cc13 100644 --- a/src/frontend/tests/pages/pui_purchasing.spec.ts +++ b/src/frontend/tests/pages/pui_purchasing.spec.ts @@ -1,6 +1,6 @@ import { expect } from '@playwright/test'; import { test } from '../baseFixtures.ts'; -import { readeruser } from '../defaults.ts'; +import { readeruser, stevenuser } from '../defaults.ts'; import { activateCalendarView, activateTableView, @@ -84,11 +84,11 @@ test('Purchasing - Index', async ({ browser }) => { test('Purchasing - Parameters', async ({ browser }) => { const page = await doCachedLogin(browser, { - url: 'purchasing/purchase-order/11/parameters' + url: 'purchasing/purchase-order/11/parameters', + user: stevenuser }); // Create a new parameter against this purchase order - // We will use a "SelectionList" to choose the value here await page .getByRole('button', { name: 'action-menu-add-parameters' }) .click(); @@ -98,6 +98,25 @@ test('Purchasing - Parameters', async ({ browser }) => { }) .click(); + // Check for button to add a new template + await page + .getByRole('button', { + name: 'action-button-create-new-parameter-template' + }) + .click(); + await page + .getByText('Create New Parameter Template', { exact: true }) + .first() + .waitFor(); + await page.getByRole('textbox', { name: 'text-field-description' }).waitFor(); + await page.getByRole('textbox', { name: 'text-field-choices' }).waitFor(); + await page + .getByLabel('Create New Parameter Template') + .getByRole('button', { name: 'Cancel' }) + .click(); + + // We will use a "SelectionList" to choose the value here + // Select the template await page .getByRole('combobox', { name: 'related-field-template' }) From 21d5edb56af8387e60ea716cffb5d6931f1705cc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 08:12:46 +1000 Subject: [PATCH 26/71] New Crowdin translations by GitHub Action (#11780) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../InvenTree/locale/ar/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/bg/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/cs/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/da/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/de/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/el/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/en/LC_MESSAGES/django.po | 244 +- .../InvenTree/locale/es/LC_MESSAGES/django.po | 246 +-- .../locale/es_MX/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/et/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/fa/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/fi/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/fr/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/he/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/hi/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/hu/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/id/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/it/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/ja/LC_MESSAGES/django.po | 248 +-- .../InvenTree/locale/ko/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/lt/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/lv/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/nl/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/no/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/pl/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/pt/LC_MESSAGES/django.po | 246 +-- .../locale/pt_BR/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/ro/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/ru/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/sk/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/sl/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/sr/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/sv/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/th/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/tr/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/uk/LC_MESSAGES/django.po | 246 +-- .../InvenTree/locale/vi/LC_MESSAGES/django.po | 246 +-- .../locale/zh_Hans/LC_MESSAGES/django.po | 246 +-- .../locale/zh_Hant/LC_MESSAGES/django.po | 484 ++-- src/frontend/src/locales/ar/messages.po | 231 +- src/frontend/src/locales/bg/messages.po | 231 +- src/frontend/src/locales/cs/messages.po | 231 +- src/frontend/src/locales/da/messages.po | 231 +- src/frontend/src/locales/de/messages.po | 231 +- src/frontend/src/locales/el/messages.po | 231 +- src/frontend/src/locales/en/messages.po | 229 +- src/frontend/src/locales/es/messages.po | 231 +- src/frontend/src/locales/es_MX/messages.po | 231 +- src/frontend/src/locales/et/messages.po | 231 +- src/frontend/src/locales/fa/messages.po | 231 +- src/frontend/src/locales/fi/messages.po | 231 +- src/frontend/src/locales/fr/messages.po | 231 +- src/frontend/src/locales/he/messages.po | 231 +- src/frontend/src/locales/hi/messages.po | 231 +- src/frontend/src/locales/hu/messages.po | 231 +- src/frontend/src/locales/id/messages.po | 231 +- src/frontend/src/locales/it/messages.po | 231 +- src/frontend/src/locales/ja/messages.po | 231 +- src/frontend/src/locales/ko/messages.po | 231 +- src/frontend/src/locales/lt/messages.po | 231 +- src/frontend/src/locales/lv/messages.po | 231 +- src/frontend/src/locales/nl/messages.po | 231 +- src/frontend/src/locales/no/messages.po | 231 +- src/frontend/src/locales/pl/messages.po | 231 +- src/frontend/src/locales/pt/messages.po | 231 +- src/frontend/src/locales/pt_BR/messages.po | 231 +- src/frontend/src/locales/ro/messages.po | 231 +- src/frontend/src/locales/ru/messages.po | 231 +- src/frontend/src/locales/sk/messages.po | 231 +- src/frontend/src/locales/sl/messages.po | 231 +- src/frontend/src/locales/sr/messages.po | 231 +- src/frontend/src/locales/sv/messages.po | 231 +- src/frontend/src/locales/th/messages.po | 231 +- src/frontend/src/locales/tr/messages.po | 231 +- src/frontend/src/locales/uk/messages.po | 231 +- src/frontend/src/locales/vi/messages.po | 231 +- src/frontend/src/locales/zh_Hans/messages.po | 231 +- src/frontend/src/locales/zh_Hant/messages.po | 1957 +++++++++-------- 78 files changed, 10458 insertions(+), 10107 deletions(-) diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index ef255e233d..4b9a225341 100644 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:48\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index 56a1f558ca..d9ef9b9bb2 100644 --- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:48\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Част" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index acf93c2bf0..538d4385cd 100644 --- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:48\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -336,11 +336,11 @@ msgstr "Server zaznamenal chybu." msgid "Image" msgstr "Obrazek" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Měna" @@ -572,9 +572,9 @@ msgstr "Zahrnout varianty" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Díl" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -669,11 +669,11 @@ msgstr "Vyloučit strom" msgid "Build must be cancelled before it can be deleted" msgstr "Sestavení musí být zrušeno před odstraněním" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Volitelné" @@ -785,7 +785,7 @@ msgstr "Referenční číslo výrobního příkazu" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Vytvořit objekt" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Sledovatelné" msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Položka kusovníku" @@ -1617,7 +1617,7 @@ msgstr "Klíčový text musí být jedinečný" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Parametry zaškrtávacího pole nemohou mít jednotky" msgid "Checkbox parameters cannot have choices" msgstr "Parametry zaškrtávacího pole nemohou mít výběr" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Volby musí být jedinečné" @@ -2094,7 +2094,7 @@ msgstr "Zaškrtávací políčko" msgid "Is this parameter a checkbox?" msgstr "Je tento parametr zaškrtávací políčko?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Volby" @@ -2106,7 +2106,7 @@ msgstr "Platné volby pro tento parametr (oddělené čárkami)" msgid "Selection list for this parameter" msgstr "Seznam výběru pro tento parametr" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Povoleno" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Hodnota parametru" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "Adresa URL pro odkaz na externí díl dodavatele" msgid "Supplier part description" msgstr "Popis dílu dodavatele" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "základní cena" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" @@ -4307,7 +4307,7 @@ msgstr "Počet kusů v balení" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Celkové množství dodávané v jednom balení. Pro jednotlivé položky ponechte prázdné." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "více" @@ -6090,404 +6090,404 @@ msgstr "Vytváření uživatele" msgid "Owner responsible for this part" msgstr "Vlastník odpovědný za tento díl" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Prodat více" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Měna použitá pro výpočet cen v mezipaměti" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimální cena kusovníku" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Minimální cena komponent dílu" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maximální cena kusovníku" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Maximální cena komponent dílu" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimální nákupní cena" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Minimální historická nákupní cena" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maximální nákupní cena" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Maximální historická nákupní cena" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimální interní cena" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Minimální cena závislá na množstevní slevě" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maximální interní cena" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Maximální cena závislá na množstevní slevě" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Minimální cena dodavatele" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Minimální cena dílu od externích dodavatelů" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Maximální cena dodavatele" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Maximální cena dílu od externích dodavatelů" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Minimální cena variant" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Vypočítané minimální náklady na varianty dílů" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Maximální cena variant" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Vypočítané maximální náklady na varianty dílů" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimální cena" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Přepsat minimální náklady" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maximální cena" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Přepsat maximální náklady" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Vypočítané minimální celkové náklady" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Vypočítané maximální celkové náklady" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Minimální prodejní cena" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Minimální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Maximální prodejní cena" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Maximální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Minimální prodejní cena" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Minimální historická prodejní cena" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Maximální prodejní cena" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Maximální historická prodejní cena" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Díl na inventuru" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Počet položek" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Počet jednotlivých položek zásob v době inventury" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Celkové dostupné zásoby v době inventury" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Datum provedení inventury" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Minimální cena zásob" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Odhadovaná minimální cena zásob k dispozici" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maximální cena zásob" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Odhadovaná maximální cena zásob k dispozici" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Částeční sleva v ceně" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Šablona testu položky" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Neplatný název šablony - musí obsahovat alespoň jeden alfanumerický znak" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Zkušební šablony lze vytvořit pouze pro testovatelné části" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Testovací šablona se stejným klíčem již existuje pro díl" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Název testu" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Zadejte název testu" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Testovací klíč" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Zjednodušený klíč pro testování" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Popis testu" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Zadejte popis pro tento test" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Je tento test povolen?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Požadováno" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Je tato zkouška vyžadována k projití?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Požadovaná hodnota" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Vyžaduje tato zkouška hodnotu při výpočtu výsledku zkoušky?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Vyžaduje přílohu" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vyžaduje tato zkouška soubor při přidání výsledku testu?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Platné volby pro tento test (oddělené čárkami)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "Položku kusovníku nelze změnit - sestava je uzamčena" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Položku kusovníku nelze změnit - varianta montáže je uzamčena" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Poddílec" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Vyberte díl které bude použit v kusovníku" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Kusovníkové množství pro tuto kusovníkovou položku" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Tato položka kusovníku je nepovinná" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Tento předmět kusovníku je spotřebovatelný (není sledován v objednávkách stavby)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Nastavit množství" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Dodatečné množství potřebné pro sestavení k vyúčtování ztráty nastavení" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Přirozené ztráty" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Odhadované přirozené ztráty pro stavbu, vyjádřeno v procentech (0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Zaokrouhlení více" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Zaokrouhlit požadované množství produkce na nejbližší násobek této hodnoty" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Reference položky kusovníku" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Poznámky k položce kusovníku" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Kontrolní součet" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Kontrolní součet řádku kusovníku" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Schváleno" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Tato položka kusovníku ještě nebyla schválena" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Se zdědí" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Tento kusovník se zdědí kusovníky pro varianty dílů" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Skladové položky pro varianty dílu lze použít pro tuto položku kusovníku" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Množství musí být celé číslo pro sledovatelné díly" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Poddíl musí být specifikován" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Náhradní položka kusovníku" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Náhradní díl nemůže být stejný jako hlavní díl" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Nadřazená položka kusovníku" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Náhradní díl" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Díl 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Díl 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Vyberte související díl" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Poznámka pro tento vztah" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Část vztahu nemůže být vytvořena mezi dílem samotným" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Duplicitní vztah již existuje" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index cae9326c6d..fd5c1061db 100644 --- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:48\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -336,11 +336,11 @@ msgstr "En fejl blev logget af serveren." msgid "Image" msgstr "Billede" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuta" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Del" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Valgfri" @@ -785,7 +785,7 @@ msgstr "Produktionsordre reference" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Stykliste Del" @@ -1617,7 +1617,7 @@ msgstr "Nøglestrengen skal være unik" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index 24a07e0a1d..932894ba8b 100644 --- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -336,11 +336,11 @@ msgstr "Ein Fehler wurde vom Server protokolliert." msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Währung" @@ -572,9 +572,9 @@ msgstr "Varianten einschließen" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Teil" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -669,11 +669,11 @@ msgstr "Baum ausschließen" msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Optional" @@ -785,7 +785,7 @@ msgstr "Bauauftragsreferenz" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Objekt bauen" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Nachverfolgbar" msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Stücklisten-Position" @@ -1617,7 +1617,7 @@ msgstr "Schlüsseltext muss eindeutig sein" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Checkbox-Parameter können keine Einheiten haben" msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" @@ -2094,7 +2094,7 @@ msgstr "Checkbox" msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Auswahlmöglichkeiten" @@ -2106,7 +2106,7 @@ msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Aktiviert" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Parameter Wert" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "Teil-URL des Zulieferers" msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" @@ -4307,7 +4307,7 @@ msgstr "Packmenge" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Gesamtmenge, die in einer einzelnen Packung geliefert wird. Für Einzelstücke leer lassen." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "Vielfache" @@ -6090,404 +6090,404 @@ msgstr "Erstellungs-Nutzer" msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ungültiger Vorlagenname - es muss mindestens ein alphanumerisches Zeichen enthalten sein" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Testvorlage mit demselben Schlüssel existiert bereits für Teil" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Benötigt" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Muss für diesen Test ein Wert für das Test-Ergebnis eingetragen werden?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Muss für diesen Test ein Anhang für das Test-Ergebnis hinzugefügt werden?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Diese Stücklisten-Position ist ein Verbrauchsartikel (sie wird nicht in Bauaufträgen verfolgt)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "überprüft" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Diese Stücklisten-Position wird in die Stücklisten von Teil-Varianten vererbt" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Bestand von Varianten kann für diese Stücklisten-Position verwendet werden" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Teil-Beziehung kann nicht zwischen einem Teil und sich selbst erstellt werden" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index 7232c7d613..d78ea7272b 100644 --- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -336,11 +336,11 @@ msgstr "Ένα σφάλμα έχει καταγραφεί από το διακο msgid "Image" msgstr "Εικόνα" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Νόμισμα" @@ -572,9 +572,9 @@ msgstr "Συμπερίληψη παραλλαγών" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Εξάρτημα" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Κατηγορία" @@ -669,11 +669,11 @@ msgstr "Εξαίρεση δέντρου" msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Προαιρετικό" @@ -785,7 +785,7 @@ msgstr "Αναφορά Παραγγελίας Κατασκευής" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Αντικείμενο κατασκευής" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Ανιχνεύσιμο" msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Στοιχείο BOM" @@ -1617,7 +1617,7 @@ msgstr "Η συμβολοσειρά κλειδιού πρέπει να είνα #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να msgid "Checkbox parameters cannot have choices" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Οι επιλογές πρέπει να είναι μοναδικές" @@ -2094,7 +2094,7 @@ msgstr "Checkbox" msgid "Is this parameter a checkbox?" msgstr "Είναι αυτή η παράμετρος τύπου checkbox;" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Επιλογές" @@ -2106,7 +2106,7 @@ msgstr "Έγκυρες επιλογές για αυτή την παράμετρ msgid "Selection list for this parameter" msgstr "Λίστα επιλογών για αυτή την παράμετρο" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Ενεργό" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Τιμή παραμέτρου" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL εξωτερικού συνδέσμου προϊόντος προμ msgid "Supplier part description" msgstr "Περιγραφή προϊόντος προμηθευτή" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "βασικό κόστος" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" @@ -4307,7 +4307,7 @@ msgstr "Ποσότητα ανά συσκευασία" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Συνολική ποσότητα που παρέχεται σε μία συσκευασία. Αφήστε κενό για μεμονωμένα είδη." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "πολλαπλάσιο" @@ -6090,404 +6090,404 @@ msgstr "Χρήστης δημιουργίας" msgid "Owner responsible for this part" msgstr "Ιδιοκτήτης υπεύθυνος για αυτό το προϊόν" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Πώληση πολλαπλάσιων" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Νόμισμα που χρησιμοποιείται για την προσωρινή αποθήκευση υπολογισμών τιμολόγησης" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Ελάχιστο κόστος BOM" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Ελάχιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Μέγιστο κόστος BOM" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Μέγιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Ελάχιστο κόστος αγοράς" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Ελάχιστο ιστορικό κόστος αγοράς" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Μέγιστο κόστος αγοράς" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Μέγιστο ιστορικό κόστος αγοράς" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Ελάχιστη εσωτερική τιμή" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Ελάχιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Μέγιστη εσωτερική τιμή" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Μέγιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Ελάχιστη τιμή προμηθευτή" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Ελάχιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Μέγιστη τιμή προμηθευτή" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Μέγιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Ελάχιστο κόστος παραλλαγής" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Υπολογισμένο ελάχιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Μέγιστο κόστος παραλλαγής" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Υπολογισμένο μέγιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Ελάχιστο κόστος" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Παράκαμψη ελάχιστου κόστους" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Μέγιστο κόστος" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Παράκαμψη μέγιστου κόστους" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Υπολογισμένο συνολικό ελάχιστο κόστος" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Υπολογισμένο συνολικό μέγιστο κόστος" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Ελάχιστη τιμή πώλησης" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Ελάχιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Μέγιστη τιμή πώλησης" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Μέγιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Ελάχιστο κόστος πώλησης" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Ελάχιστη ιστορική τιμή πώλησης" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Μέγιστο κόστος πώλησης" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Μέγιστη ιστορική τιμή πώλησης" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Προϊόν για απογραφή" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Αριθμός ειδών" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Αριθμός μεμονωμένων εγγραφών αποθέματος κατά τον χρόνο απογραφής" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Συνολικό διαθέσιμο απόθεμα κατά τον χρόνο απογραφής" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Ημερομηνία" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Ημερομηνία που πραγματοποιήθηκε η απογραφή" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Ελάχιστο κόστος αποθέματος" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Εκτιμώμενο ελάχιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Μέγιστο κόστος αποθέματος" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Εκτιμώμενο μέγιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Κλιμακωτή τιμή πώλησης προϊόντος" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Πρότυπο δοκιμής προϊόντος" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Μη έγκυρο όνομα προτύπου - πρέπει να περιλαμβάνει τουλάχιστον έναν αλφαριθμητικό χαρακτήρα" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Πρότυπα δοκιμών μπορούν να δημιουργηθούν μόνο για προϊόντα που είναι υπό δοκιμή" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Υπάρχει ήδη πρότυπο δοκιμής με το ίδιο κλειδί για το προϊόν" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Όνομα δοκιμής" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Εισαγάγετε όνομα για τη δοκιμή" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Κλειδί δοκιμής" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Απλοποιημένο κλειδί για τη δοκιμή" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Περιγραφή δοκιμής" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Εισαγάγετε περιγραφή για αυτή τη δοκιμή" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Είναι αυτή η δοκιμή ενεργή;" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Απαραίτητη" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Απαιτείται η επιτυχής ολοκλήρωση αυτής της δοκιμής;" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Απαιτεί τιμή" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή τιμή κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Απαιτεί συνημμένο" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή συνημμένο αρχείο κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή τη δοκιμή (διαχωρισμένες με κόμμα)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση είναι κλειδωμένη" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση παραλλαγής είναι κλειδωμένη" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Επιλέξτε γονικό προϊόν" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Υποπροϊόν" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Επιλέξτε προϊόν που θα χρησιμοποιηθεί στο BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Ποσότητα BOM για αυτό το στοιχείο BOM" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Αυτό το στοιχείο BOM είναι προαιρετικό" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Αυτό το στοιχείο BOM είναι αναλώσιμο (δεν παρακολουθείται στις εντολές παραγωγής)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Ποσότητα ρύθμισης" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Επιπλέον απαιτούμενη ποσότητα για μια παραγωγή, για να ληφθούν υπόψη οι απώλειες ρύθμισης" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Φθορά" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Εκτιμώμενη φθορά για μια παραγωγή, εκφρασμένη ως ποσοστό (0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Πολλαπλάσιο στρογγυλοποίησης" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Στρογγυλοποίηση προς τα πάνω της απαιτούμενης ποσότητας παραγωγής στο πλησιέστερο πολλαπλάσιο αυτής της τιμής" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Αναφορά στοιχείου BOM" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Σημειώσεις στοιχείου BOM" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Άθροισμα ελέγχου" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Άθροισμα ελέγχου γραμμής BOM" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Επικυρωμένο" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Αυτό το στοιχείο BOM έχει επικυρωθεί" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Κληρονομείται" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Αυτό το στοιχείο BOM κληρονομείται από τα BOM για προϊόντα παραλλαγών" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Είδη αποθέματος για προϊόντα παραλλαγών μπορούν να χρησιμοποιηθούν για αυτό το στοιχείο BOM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Η ποσότητα πρέπει να είναι ακέραια τιμή για προϊόντα με ιχνηλάτηση" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Πρέπει να καθοριστεί υποπροϊόν" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Εναλλακτικό στοιχείο BOM" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Το εναλλακτικό προϊόν δεν μπορεί να είναι το ίδιο με το κύριο προϊόν" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Γονικό στοιχείο BOM" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Εναλλακτικό προϊόν" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Προϊόν 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Προϊόν 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Επιλέξτε σχετικό προϊόν" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Σημείωση για αυτή τη σχέση" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊόντος μεταξύ ενός προϊόντος και του εαυτού του" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Υπάρχει ήδη διπλή σχέση" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index d1e37c9d76..4e637d7c52 100644 --- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"POT-Creation-Date: 2026-04-23 02:56+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -337,11 +337,11 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "" @@ -573,9 +573,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -597,7 +597,7 @@ msgid "Part" msgstr "" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -670,11 +670,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -786,7 +786,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1021,7 +1021,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1413,12 +1413,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1618,7 +1618,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2059,7 +2059,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2095,7 +2095,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2107,7 +2107,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2158,7 +2158,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4283,11 +4283,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4308,7 +4308,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6091,404 +6091,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 1d10f99a91..3a8756204d 100644 --- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -336,11 +336,11 @@ msgstr "Se ha registrado un error por el servidor." msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Moneda" @@ -572,9 +572,9 @@ msgstr "Incluye Variantes" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Parte" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -669,11 +669,11 @@ msgstr "Excluir Árbol" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opcional" @@ -785,7 +785,7 @@ msgstr "Número de orden de construcción o armado" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Ensamblar equipo" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Rastreable" msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" @@ -1617,7 +1617,7 @@ msgstr "Cadena de clave debe ser única" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Casilla de verificación" msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Opciones" @@ -2106,7 +2106,7 @@ msgstr "Opciones válidas para este parámetro (separados por comas)" msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Valor del parámetro" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" @@ -4307,7 +4307,7 @@ msgstr "Cantidad de paquete" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiple" @@ -6090,404 +6090,404 @@ msgstr "Creación de Usuario" msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Fecha" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Requerido" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Validado" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index 9be143b44f..cb95389730 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -336,11 +336,11 @@ msgstr "Se ha registrado un error por el servidor." msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Moneda" @@ -572,9 +572,9 @@ msgstr "Incluye Variantes" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Parte" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opcional" @@ -785,7 +785,7 @@ msgstr "Número de orden de construcción o armado" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Ensamblar equipo" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Rastreable" msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" @@ -1617,7 +1617,7 @@ msgstr "Cadena de clave debe ser única" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Casilla de verificación" msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Opciones" @@ -2106,7 +2106,7 @@ msgstr "Opciones válidas para este parámetro (separados por comas)" msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Valor del parámetro" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" @@ -4307,7 +4307,7 @@ msgstr "Cantidad de paquete" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiple" @@ -6090,404 +6090,404 @@ msgstr "Creación de Usuario" msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Fecha" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Requerido" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Validado" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index d7baa4fe52..ccf322bdd2 100644 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "Pilt" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuuta" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Osa" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Valikuline" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Jälgitav" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Testimalle saab luua ainult testitavate osade jaoks" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index 715e3a4ede..e7c1451dea 100644 --- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -336,11 +336,11 @@ msgstr "یک خطا توسط سرور ثبت شده است." msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "باید یک عدد معتبر باشد" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "ارز" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "قطعه" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "دسته" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "اختیاری" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index 8084760108..eb9082e948 100644 --- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "Kuva" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuutta" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Osa" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Seurattavissa" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Käytössä" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 803afef3a7..63e12605cc 100644 --- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -336,11 +336,11 @@ msgstr "Une erreur a été loguée par le serveur." msgid "Image" msgstr "Image" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Devise" @@ -572,9 +572,9 @@ msgstr "Inclure les variantes" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Pièce" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Catégorie" @@ -669,11 +669,11 @@ msgstr "Exclure l'arbre" msgid "Build must be cancelled before it can be deleted" msgstr "La construction doit être annulée avant de pouvoir être supprimée" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Consommable" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Facultatif" @@ -785,7 +785,7 @@ msgstr "Référence de l' Ordre de Fabrication" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Création de l'objet" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Traçable" msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Article du BOM" @@ -1617,7 +1617,7 @@ msgstr "La chaîne de caractères constituant la clé doit être unique" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Les paramètres des cases à cocher ne peuvent pas avoir d'unités" msgid "Checkbox parameters cannot have choices" msgstr "Les paramètres des cases à cocher ne peuvent pas comporter de choix" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Les choix doivent être uniques" @@ -2094,7 +2094,7 @@ msgstr "Case à cocher" msgid "Is this parameter a checkbox?" msgstr "Ce paramètre est-il une case à cocher ?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Choix" @@ -2106,7 +2106,7 @@ msgstr "Choix valables pour ce paramètre (séparés par des virgules)" msgid "Selection list for this parameter" msgstr "Liste de sélection pour ce paramètre" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Activé" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Valeur du paramètre" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "Lien de la pièce du fournisseur externe" msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "coût de base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" @@ -4307,7 +4307,7 @@ msgstr "Nombre de paquet" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantité totale fournie dans un emballage unique. Laisser vide pour les articles individuels." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "plusieurs" @@ -6090,404 +6090,404 @@ msgstr "Création Utilisateur" msgid "Owner responsible for this part" msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Devise utilisée pour cacher les calculs de prix" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Coût minimum de la nomenclature" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Coût minimal des composants" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Coût maximal de la nomenclature" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Coût maximal des composants" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Coût d'achat minimum" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Coût d'achat historique minimum" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Coût d'achat maximum" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Coût d'achat historique maximum" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Prix interne minimum" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Coût minimum basé sur des ruptures de prix internes" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Prix interne maximum" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Coût maximum basé sur les écarts de prix internes" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Prix minimum du fournisseur" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Prix minimum des pièces provenant de fournisseurs externes" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Prix maximum du fournisseur" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Prix maximum des pièces provenant de fournisseurs externes" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Coût minimum de la variante" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Calcul du coût minimum des pièces de la variante" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Coût maximal de la variante" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Calcul du coût maximal des pièces de la variante" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Coût minimal" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Remplacer le coût minimum" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Coût maximal" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Dépassement du coût maximal" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Calcul du coût minimum global" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Calcul du coût maximum global" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Prix de vente minimum" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Prix de vente minimum basé sur des ruptures de prix" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Prix de vente maximum" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Prix de vente maximum en fonction des écarts de prix" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Coût minimum de vente" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Prix de vente historique minimum" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Coût de vente maximum" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Prix de vente historique maximum" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Partie pour l'inventaire" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Nombre d'articles" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Nombre d'entrées individuelles au moment de l'inventaire" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Stock total disponible au moment de l'inventaire" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Date" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Date de l'inventaire" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Coût minimum du stock" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Coût minimum estimé des stocks disponibles" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Coût maximal du stock" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Coût maximum estimé des stocks disponibles" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Vente de pièces détachées Prix cassé" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Modèle de test partiel" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Le nom du modèle n'est pas valide - il doit comporter au moins un caractère alphanumérique" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Les modèles de test ne peuvent être créés que pour les parties testables" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Un modèle de test avec la même clé existe déjà pour la partie" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Entrez un nom pour le test" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Clé de test" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Clé simplifiée pour le test" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Description du test" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Saisir la description de ce test" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Ce test est-il activé ?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Requis" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Ce test est-il obligatoire pour passer l'examen ?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Ce test nécessite-t-il une valeur lors de l'ajout d'un résultat de test ?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Nécessite une pièce jointe" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ce test nécessite-t-il un fichier joint lors de l'ajout d'un résultat de test ?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Choix valables pour ce test (séparés par des virgules)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'article de nomenclature ne peut pas être modifié - l'assemblage est verrouillé" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Le poste de nomenclature ne peut pas être modifié - l'assemblage de la variante est verrouillé" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Sélectionner la partie parentale" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Sous-partie" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Sélectionner la pièce à utiliser dans la nomenclature" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Quantité de nomenclature pour ce poste de nomenclature" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Ce poste de nomenclature est facultatif" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ce poste de nomenclature est consommable (il n'est pas suivi dans les ordres de fabrication)." -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Définir la quantité" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Attrition" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Attrition estimée pour cette fabrication, exprimée en pourcentage (0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Arrondi au multiple" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrondir la quantité de production requise au multiple le plus proche de cette valeur" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Référence du poste de nomenclature" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Notes sur les postes de nomenclature" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Somme de contrôle" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Somme de contrôle de la ligne de nomenclature" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Validée" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Ce poste de nomenclature a été validé" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Obtient l'héritage" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ce poste de nomenclature est hérité des nomenclatures des composants variants" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Les postes de stock pour les composants variants peuvent être utilisés pour ce poste de nomenclature" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantité doit être un nombre entier pour les pièces pouvant être suivies" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "La sous-partie doit être spécifiée" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Remplacement d'un poste de nomenclature" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "La pièce de remplacement ne peut pas être identique à la pièce maîtresse" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Poste de nomenclature parent" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Pièce de rechange" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Première partie" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Partie 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Sélectionner une partie connexe" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Note pour cette relation" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Il n'est pas possible de créer une relation entre une pièce et elle-même" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Une relation en double existe déjà" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index bdc613530f..63f2ff166c 100644 --- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -336,11 +336,11 @@ msgstr "נרשמה שגיאה על ידי השרת." msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "מטבע" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "רכיב" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 908ad8e3c1..954f8d96a8 100644 --- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index 2d827d6845..919fc63a65 100644 --- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -336,11 +336,11 @@ msgstr "A kiszolgáló egy hibaüzenetet rögzített." msgid "Image" msgstr "Kép" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Pénznem" @@ -572,9 +572,9 @@ msgstr "Változatokkal együtt" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Alkatrész" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategória" @@ -669,11 +669,11 @@ msgstr "Fa kihagyása" msgid "Build must be cancelled before it can be deleted" msgstr "A gyártást be kell fejezni a törlés előtt" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opcionális" @@ -785,7 +785,7 @@ msgstr "Gyártási utasítás azonosító" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Gyártás objektum" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1413,12 +1413,12 @@ msgstr "Követésre kötelezett" msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" @@ -1618,7 +1618,7 @@ msgstr "Kulcs string egyedi kell legyen" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2059,7 +2059,7 @@ msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" @@ -2095,7 +2095,7 @@ msgstr "Jelölőnégyzet" msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Lehetőségek" @@ -2107,7 +2107,7 @@ msgstr "Választható lehetőségek (vesszővel elválasztva)" msgid "Selection list for this parameter" msgstr "A paraméter választéklistája" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Engedélyezve" @@ -2158,7 +2158,7 @@ msgid "Parameter Value" msgstr "Paraméter értéke" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4283,11 +4283,11 @@ msgstr "URL link a beszállítói alkatrészhez" msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "alap költség" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" @@ -4308,7 +4308,7 @@ msgstr "Csomagolási mennyiség" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Egy csomagban kiszállítható mennyiség, hagyd üresen az egyedi tételeknél." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "többszörös" @@ -6091,404 +6091,404 @@ msgstr "Létrehozó" msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Dátum" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Alkatrész értékesítési ársáv" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Alkatrész Teszt Sablon" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Hibás sablon név - legalább egy alfanumerikus karakter kötelező" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Teszt sablont csak ellenőrizhetőre beállított alkatrészhez lehet csinálni" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Már létezik ilyen azonosítójú Teszt sablon ehhez az alkatrészhez" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Teszt azonosító" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Teszt engedélyezve?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Kötelező" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően érték legyen rendelve?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően fájl melléklet legyen rendelve?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Választható lehetőségek ehhez a Teszthez (vesszővel elválasztva)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás le van zárva" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás változat le van zárva" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ez az alkatrészjegyzék tétel fogyóeszköz (készlete nincs követve a gyártásban)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Beállítás mennyiség" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "A gyártáshoz szükséges extra mennyiség, a beállási veszteséggel együtt" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Veszteség" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Becsült veszteség egy gyártásnál, százalékban kifejezve (0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Kerekítési többszörös" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "A szükséges termelési mennyiség az érték legközelebbi többszöröséhez kerekítése" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ezt az alkatrészjegyzék tételt az alkatrész változatok alkatrészjegyzékei is öröklik" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Alkatrészváltozatok készlet tételei használhatók ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "A mennyiség egész szám kell legyen a követésre kötelezett alkatrészek esetén" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "A helyettesítő alkatrész nem lehet ugyanaz mint a fő alkatrész" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Kapcsolati megjegyzés" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index 897c2dbf2d..632fac1014 100644 --- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -336,11 +336,11 @@ msgstr "Sebuah kesalahan telah dicatat oleh server." msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Mata Uang" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Bagian" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "Referensi Order Produksi" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Item tagihan material" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Pilihan" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Aktif" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Tanggal" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 1cf05f6e5c..dff07713b9 100644 --- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -336,11 +336,11 @@ msgstr "Un errore è stato loggato dal server." msgid "Image" msgstr "Immagine" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuta" @@ -572,9 +572,9 @@ msgstr "Includi Varianti" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Articolo" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -669,11 +669,11 @@ msgstr "Escludi Albero" msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opzionale" @@ -785,7 +785,7 @@ msgstr "Riferimento Ordine Di Produzione" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Crea oggetto" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Tracciabile" msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Distinta base (Bom)" @@ -1617,7 +1617,7 @@ msgstr "La stringa chiave deve essere univoca" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "I parametri della casella di controllo non possono avere unità" msgid "Checkbox parameters cannot have choices" msgstr "I parametri della casella di controllo non possono avere scelte" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Le scelte devono essere uniche" @@ -2094,7 +2094,7 @@ msgstr "Casella di spunta" msgid "Is this parameter a checkbox?" msgstr "Questo parametro è una casella di spunta?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Scelte" @@ -2106,7 +2106,7 @@ msgstr "Scelte valide per questo parametro (separato da virgola)" msgid "Selection list for this parameter" msgstr "Lista di selezione per questo parametro" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Abilitato" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Valore del Parametro" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL dell'articolo del fornitore" msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" @@ -4307,7 +4307,7 @@ msgstr "Quantità Confezione" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantità totale fornita in una singola confezione. Lasciare vuoto per gli articoli singoli." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "multiplo" @@ -6090,404 +6090,404 @@ msgstr "Creazione Utente" msgid "Owner responsible for this part" msgstr "Utente responsabile di questo articolo" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Sovrascrivi il costo minimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Sovrascrivi il costo massimo" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Aggiungi Prezzo Ribassato di Vendita dell'Articolo" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Modello Prove Articolo" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nome modello non valido - deve includere almeno un carattere alfanumerico" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Il modello di prova può essere creato solo per gli articoli testabili" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Il modello di test con la stessa chiave esiste già per l'articolo" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Chiave Di Prova" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Chiave semplificata per la prova" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Questo test è attivo?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Richiesto" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Questa prova richiede un valore quando si aggiunge un risultato di prova?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Questa prova richiede un file allegato quando si aggiunge un risultato di prova?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Scelte valide per questo test (separate da virgole)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio è bloccato" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio della variante è bloccato" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Questo elemento della Distinta Base è consumabile (non è tracciato negli ordini di produzione)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Imposta quantità" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Quantità extra necessaria per una generazione, per tenere conto delle perdite di configurazione" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Logoramento" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Stima del logoramento per una build, espressa in percentuale (0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Arrotondamento Multiplo" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrotonda la quantità di produzione richiesta al multiplo più vicino di questo valore" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Questo articolo della distinta base è stato validato" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Viene Ereditato" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Questo elemento della Distinta Base viene ereditato dalle Distinte Base per gli articoli varianti" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Gli elementi in giacenza per gli articoli varianti possono essere utilizzati per questo elemento Distinta Base" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sostituita non può essere la stessa dell'articolo principale" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Nota per questa relazione" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Non si può creare una relazione tra l'articolo e sé stesso" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 833b1050b2..1fe2b48ec7 100644 --- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -336,11 +336,11 @@ msgstr "サーバーによってエラーが記録されました。" msgid "Image" msgstr "画像" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "通貨" @@ -572,9 +572,9 @@ msgstr "バリアントを含む" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "パーツ" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "カテゴリ" @@ -669,11 +669,11 @@ msgstr "ツリーを除く" msgid "Build must be cancelled before it can be deleted" msgstr "削除するには、ビルドをキャンセルする必要があります。" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "消耗品" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "オプション" @@ -785,7 +785,7 @@ msgstr "ビルド・オーダー・リファレンス" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "ビルドオブジェクト" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "追跡可能" msgid "Inherited" msgstr "継承" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "BOMアイテム" @@ -1617,7 +1617,7 @@ msgstr "キー文字列は一意でなければなりません。" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "チェックボックスのパラメータに単位を指定すること msgid "Checkbox parameters cannot have choices" msgstr "チェックボックスパラメータに選択肢を持たせることはできません。" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "選択肢はユニークでなければなりません" @@ -2094,7 +2094,7 @@ msgstr "チェックボックス" msgid "Is this parameter a checkbox?" msgstr "このパラメータはチェックボックスですか?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "選択肢" @@ -2106,7 +2106,7 @@ msgstr "このパラメータの有効な選択肢(カンマ区切り)" msgid "Selection list for this parameter" msgstr "このパラメータの選択リスト" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "有効" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "パラメータ値" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "外部サプライヤー部品リンク用URL" msgid "Supplier part description" msgstr "サプライヤーの部品説明" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "基本料金" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" @@ -4307,7 +4307,7 @@ msgstr "パック数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "1パックに供給される総量。単品の場合は空のままにしてください。" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "複数" @@ -5980,7 +5980,7 @@ msgstr "パーツカテゴリ" #: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" -msgstr "即時支払通知" +msgstr "IPN" #: part/models.py:1158 msgid "Part revision or version number" @@ -6090,404 +6090,404 @@ msgstr "作成ユーザー" msgid "Owner responsible for this part" msgstr "この部分の責任者" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "複数販売" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "価格計算のキャッシュに使用される通貨" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "最小BOMコスト" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "構成部品の最低コスト" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "最大BOMコスト" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "構成部品の最大コスト" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "最低購入価格" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "過去の最低購入価額" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "最大購入費用" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "過去の最高購入価格" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "最低社内価格" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最低コスト" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "社内最高価格" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最大コスト" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "最低供給価格" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最低価格" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "サプライヤー最高価格" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最高価格" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "最小バリアントコスト" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "バリアントパーツの最小コストの計算" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "最大バリアントコスト" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "バリアント部品の最大コストの計算" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "最低料金" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "最低コストのオーバーライド" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "最大コスト" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "最大コストのオーバーライド" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "総合的な最小コストの計算" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "総合最大コストの計算" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "最低販売価格" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "価格破壊に基づく最低販売価格" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "最高販売価格" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "価格破壊に基づく最高販売価格" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "最低販売価格" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "過去の最低売却価格" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "最大販売価格" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "過去の最高売却価格" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "ストックテイク用部品" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "個数" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "棚卸時の個別在庫数" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "ストックテイク時の在庫可能量" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "日付" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "ストックテイク実施日" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "最低在庫コスト" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "手元在庫の最低見積原価" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "最大在庫コスト" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "手元在庫の最大見積原価" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "パーツセール価格" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "部品試験テンプレート" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "無効なテンプレート名 - 英数字を1文字以上含む必要があります。" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "テストテンプレートは、テスト可能な部分に対してのみ作成できます。" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "同じキーを持つテスト・テンプレートがパートに既に存在します。" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "試験名" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "テストの名前を入力します。" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "テストキー" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "テストの簡易キー" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "試験内容" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "このテストの説明を入力してください。" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "このテストは有効ですか?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "必須" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "このテストは合格するために必要ですか?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "価値が必要" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "このテストは、テスト結果を追加する際に値を必要としますか?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "アタッチメントが必要" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "この試験では、試験結果を追加する際にファイルの添付が必要ですか。" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "このテストで有効な選択肢(カンマ区切り)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOMアイテムは変更できません - アセンブリがロックされています。" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM アイテムは変更できません - バリアントアセンブリがロックされています。" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "親部品を選択" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "サブパート" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "BOMで使用する部品を選択" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "このBOMアイテムのBOM数量" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "この部品表はオプションです。" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "このBOMアイテムは消耗品です。" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "設定数量" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "ビルドに必要な追加の必要量(セットアップ時の損失を考慮した分)" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "歩留まり損失" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "ビルドにおける推定歩留まり率(0~100%で表されます)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "丸め倍数" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "必要な生産数量を、この値の倍数に切り上げてください。" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "BOMアイテムリファレンス" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "BOMアイテムノート" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "チェックサムi" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "BOMラインのチェックサム" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "検証済み" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "このBOMアイテムは検証済みです" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "継承" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "この BOM アイテムは、バリアントパーツの BOM に継承されます。" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "このBOMアイテムには、バリアントパーツのストックアイテムを使用できます。" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "数量は追跡可能な部品の場合、整数値でなければなりません。" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "サブパーツの指定が必要" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "BOMアイテム代替" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "代用部品はマスター部品と同じにすることはできません。" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "親BOMアイテム" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "代用部品" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "パート #1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "パート #2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "関連部品を選択" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "この関係について" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "部品とそれ自身との間に部品関係を作ることはできません。" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "重複する関係が既に存在します。" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index c1cef67db4..dcd8fde668 100644 --- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -336,11 +336,11 @@ msgstr "서버에 오류가 기록되었습니다." msgid "Image" msgstr "이미지" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "유효한 숫자여야 합니다" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "통화" @@ -572,9 +572,9 @@ msgstr "변형(Variant) 포함" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "부품" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "분류" @@ -669,11 +669,11 @@ msgstr "트리 제외" msgid "Build must be cancelled before it can be deleted" msgstr "빌드를 삭제하려면 먼저 취소해야 합니다" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "소모품" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "선택사항" @@ -785,7 +785,7 @@ msgstr "작업 지시서 참조번호" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "빌드 객체" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "추적 가능" msgid "Inherited" msgstr "상속됨" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "변형(Variant) 허용" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "BOM 항목" @@ -1617,7 +1617,7 @@ msgstr "키 문자열은 고유해야 합니다" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "체크박스 매개변수에는 단위를 지정할 수 없습니다" msgid "Checkbox parameters cannot have choices" msgstr "체크박스 매개변수에는 선택지를 지정할 수 없습니다" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "선택지는 고유해야 합니다" @@ -2094,7 +2094,7 @@ msgstr "체크박스" msgid "Is this parameter a checkbox?" msgstr "이 매개변수는 체크박스인가요?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "선택지" @@ -2106,7 +2106,7 @@ msgstr "이 매개변수에 대한 유효한 선택지(쉼표로 구분)" msgid "Selection list for this parameter" msgstr "이 매개변수의 선택 목록" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "사용" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "매개변수 값" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "외부 공급업체 부품 링크 URL" msgid "Supplier part description" msgstr "공급업체 부품 설명" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "기본 비용" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "최소 요금(예: 보관 수수료)" @@ -4307,7 +4307,7 @@ msgstr "포장 수량" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "한 포장에 공급되는 총 수량입니다. 단품인 경우 비워 두세요." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "배수" @@ -6090,404 +6090,404 @@ msgstr "생성 사용자" msgid "Owner responsible for this part" msgstr "이 부품의 책임 소유자" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "판매 배수" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "가격 계산 캐시에 사용되는 통화" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "최소 BOM 비용" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "구성 부품의 최소 비용" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "최대 BOM 비용" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "구성 부품의 최대 비용" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "최소 구매 비용" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "과거 구매 비용의 최소값" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "최대 구매 비용" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "과거 구매 비용의 최대값" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "최소 내부 가격" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "내부 가격 구간에 기반한 최소 비용" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "최대 내부 가격" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "내부 가격 구간에 기반한 최대 비용" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "최소 공급업체 가격" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "외부 공급업체로부터의 최소 가격" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "최대 공급업체 가격" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "외부 공급업체로부터의 최대 가격" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "최소 변형 비용" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "변형 부품의 계산된 최소 비용" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "최대 변형 비용" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "변형 부품의 계산된 최대 비용" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "최소 비용" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "최소 비용 재정의" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "최대 비용" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "최대 비용 재정의" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "계산된 전체 최소 비용" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "계산된 전체 최대 비용" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "최소 판매 가격" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "가격 구간에 기반한 최소 판매 가격" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "최대 판매 가격" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "가격 구간에 기반한 최대 판매 가격" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "최소 판매 비용" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "과거 판매 가격의 최소값" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "최대 판매 비용" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "과거 판매 가격의 최대값" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "재고 조사 대상 부품" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "항목 수" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "재고 조사 시점의 개별 재고 항목 수" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "재고 조사 시점의 사용 가능한 총 재고" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "날짜" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "재고 조사가 수행된 날짜" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "최소 재고 비용" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "보유 재고의 추정 최소 비용" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "최대 재고 비용" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "보유 재고의 추정 최대 비용" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "부품 판매 가격 구간" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "부품 테스트 템플릿" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "템플릿 이름이 올바르지 않습니다 - 영숫자 문자를 최소 1개 포함해야 합니다" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "테스트 템플릿은 테스트 가능한 부품에만 만들 수 있습니다" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "같은 키의 테스트 템플릿이 이 부품에 이미 존재합니다" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "테스트 이름" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "테스트 이름을 입력하세요" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "테스트 키" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "테스트를 위한 단순화된 키" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "테스트 설명" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "이 테스트에 대한 설명을 입력하세요" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "이 테스트가 활성화되어 있나요?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "필수" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "이 테스트는 통과가 필수인가요?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "값 필요" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "테스트 결과를 추가할 때 값이 필요한가요?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "첨부 필요" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "테스트 결과를 추가할 때 파일 첨부가 필요한가요?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "이 테스트의 유효한 선택지(쉼표로 구분)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "변형 조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "상위 부품을 선택하세요" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "하위 부품" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "BOM에 사용할 부품을 선택하세요" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "이 BOM 항목의 BOM 수량" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "이 BOM 항목은 선택 사항입니다" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "이 BOM 항목은 소모품입니다(제작 주문에서 추적되지 않음)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "설정 수량" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "설정 손실을 고려해 제작에 추가로 필요한 수량" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "손실률" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "제작 손실률 추정치(백분율, 0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "반올림 배수" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "필요 생산 수량을 이 값의 가장 가까운 배수로 올림합니다" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "BOM 항목 참조" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "BOM 항목 메모" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "체크섬" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "BOM 라인 체크섬" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "검증됨" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "이 BOM 항목이 검증되었습니다" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "상속됨" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "이 BOM 항목은 변형 부품의 BOM에 상속됩니다" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "변형 부품의 재고 항목을 이 BOM 항목에 사용할 수 있습니다" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "추적 가능한 부품의 수량은 정수여야 합니다" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "하위 부품을 지정해야 합니다" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "BOM 항목 대체품" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "대체 부품은 기준 부품과 같을 수 없습니다" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "상위 BOM 항목" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "대체 부품" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "부품 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "부품 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "관련 부품 선택" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "이 관계에 대한 메모" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "부품과 자기 자신 사이에는 부품 관계를 만들 수 없습니다" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "중복된 관계가 이미 존재합니다" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index 1748d98d6d..a4b22f656b 100644 --- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -336,11 +336,11 @@ msgstr "Serveris užfiksavo klaidą." msgid "Image" msgstr "Paveikslėlis" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Turi būti teisingas skaičius" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valiuta" @@ -572,9 +572,9 @@ msgstr "Įtraukti variantus" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Detalė" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -669,11 +669,11 @@ msgstr "Neįtraukti medžio struktūros" msgid "Build must be cancelled before it can be deleted" msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Pasirinktinai" @@ -785,7 +785,7 @@ msgstr "Gamybos užsakymo nuoroda" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Gamybos objektas" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Sekama" msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "BOM elementas" @@ -1617,7 +1617,7 @@ msgstr "Raktas turi būti unikalus" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų" msgid "Checkbox parameters cannot have choices" msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Pasirinkimai turi būti unikalūs" @@ -2094,7 +2094,7 @@ msgstr "Žymimasis laukelis" msgid "Is this parameter a checkbox?" msgstr "Ar šis parametras yra žymimasis laukelis?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Pasirinkimai" @@ -2106,7 +2106,7 @@ msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)" msgid "Selection list for this parameter" msgstr "Pasirinkimų sąrašas šiam parametrui" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Įjungta" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Parametro reikšmė" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "Išorinės nuorodos į tiekėjo detalės URL" msgid "Supplier part description" msgstr "Tiekėjo detalės aprašymas" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "bazinė kaina" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" @@ -4307,7 +4307,7 @@ msgstr "Pakuotės kiekis" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Bendras kiekis vienoje pakuotėje. Palikite tuščią, jei prekė tiekiama po vieną." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "daugiklis" @@ -6090,404 +6090,404 @@ msgstr "Sukūręs vartotojas" msgid "Owner responsible for this part" msgstr "Atsakingas vartotojas už šią detalę" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Parduodamas kiekis" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Valiuta, naudojama kainų skaičiavimams kaupti" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimali BOM kaina" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Minimali komponentų detalių kaina" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maksimali BOM kaina" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Maksimali komponentų detalių kaina" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimali pirkimo kaina" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Mažiausia istorinė pirkimo kaina" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maksimali pirkimo kaina" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Didžiausia istorinė pirkimo kaina" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimali vidinė kaina" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Mažiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maksimali vidinė kaina" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Didžiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Mažiausia tiekėjo kaina" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Mažiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Didžiausia tiekėjo kaina" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Didžiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Mažiausia varianto kaina" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Apskaičiuota minimali variantų detalių kaina" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Didžiausia varianto kaina" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Apskaičiuota didžiausia variantų detalių kaina" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimali kaina" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Nepaisyti minimalios kainos" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maksimali kaina" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Nepaisyti maksimalios kainos" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Apskaičiuota bendra minimali kaina" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Apskaičiuota bendra maksimali kaina" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Minimali pardavimo kaina" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Mažiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Didžiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Mažiausia pardavimo kaina" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Mažiausia istorinė pardavimo kaina" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Didžiausia istorinė pardavimo kaina" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Detalė inventorizacijai" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Vienetų skaičius" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Atsargų įrašų skaičius inventorizacijos metu" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Bendras prieinamas atsargų kiekis inventorizacijos metu" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Inventorizacijos atlikimo data" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Minimali atsargų kaina" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Apytikslė minimali turimų atsargų kaina" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maksimali atsargų kaina" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Apytikslė maksimali turimų atsargų kaina" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Detalės kainų intervalai pardavimui" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Detalės bandymų šablonas" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Netinkamas šablono pavadinimas - turi būti bent vienas raidinis ar skaitinis simbolis" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Bandymų šablonus galima kurti tik testuojamoms detalėms" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Detalė jau turi bandymų šabloną su tokiu pačiu raktu" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Bandymo pavadinimas" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Įveskite bandymo pavadinimą" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Bandymo raktas" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Supaprastintas bandymo raktas" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Bandymo aprašymas" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Įveskite šio bandymo aprašymą" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Ar šis bandymas įjungtas?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Privalomas" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Ar šį bandymą būtina išlaikyti?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Reikalauja reikšmės" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Ar šiam bandymui reikia įvesti reikšmę pridedant rezultatą?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Reikalauja priedo" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ar šiam bandymui reikia pridėti failą su rezultatu?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Galimi pasirinkimai šiam bandymui (atskirti kableliais)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM elemento keisti negalima - surinkimas užrakintas" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM elemento keisti negalima - varianto surinkimas užrakintas" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Pasirinkite pirminę detalę" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Pavaldi detalė" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Pasirinkite detalę, naudojamą BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "BOM reikalingas šios detalės kiekis" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Šis BOM elementas yra pasirenkamas" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Šis BOM elementas yra sunaudojamas (nesekamas gamybos užsakymuose)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "BOM nuoroda" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "BOM pastabos" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Kontrolinė suma" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "BOM eilutės kontrolinė suma" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Patvirtinta" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Šis BOM elementas patvirtintas" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Paveldima" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Šį BOM elementą paveldi variantų sąrašai" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Šiam BOM elementui galima naudoti variantinių detalių atsargas" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Sekamoms detalėms kiekis turi būti sveikasis skaičius" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Turi būti nurodyta pavaldi detalė" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "BOM elemento pakaitalas" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Pakaitinė detalė negali būti tokia pati kaip pagrindinė detalė" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Pagrindinis BOM elementas" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Pakaitinė detalė" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Detalė 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Detalė 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Pasirinkite susijusią detalę" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Pastaba šiam ryšiui" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Detalių ryšio negalima sukurti tarp detalės ir jos pačios" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Toks ryšys jau egzistuoja" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index bfd0d048c7..58e58a0baf 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 94812a6f16..53985d06d1 100644 --- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:48\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -336,11 +336,11 @@ msgstr "Er is een fout gelogd door de server." msgid "Image" msgstr "Afbeelding" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuta" @@ -572,9 +572,9 @@ msgstr "Inclusief varianten" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Onderdeel" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -669,11 +669,11 @@ msgstr "Boomstructuur uitsluiten" msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Optioneel" @@ -785,7 +785,7 @@ msgstr "Productieorderreferentie" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Bouw object" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Volgbaar" msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Stuklijstartikel" @@ -1617,7 +1617,7 @@ msgstr "Sleutelreeks moet uniek zijn" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Checkbox parameters kunnen geen eenheden bevatten" msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Keuzes moeten uniek zijn" @@ -2094,7 +2094,7 @@ msgstr "Selectievakje" msgid "Is this parameter a checkbox?" msgstr "Is deze parameter een selectievak?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Keuzes" @@ -2106,7 +2106,7 @@ msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" msgid "Selection list for this parameter" msgstr "Lijst met selecties voor deze parameter" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Ingeschakeld" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Parameterwaarde" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL voor link externe leveranciers onderdeel" msgid "Supplier part description" msgstr "Omschrijving leveranciersdeel" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "basisprijs" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" @@ -4307,7 +4307,7 @@ msgstr "Pakket hoeveelheid" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totale hoeveelheid geleverd in één pakket. Laat leeg voor enkele afzonderlijke items." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "meerdere" @@ -6091,404 +6091,404 @@ msgstr "Aanmaken gebruiker" msgid "Owner responsible for this part" msgstr "Eigenaar verantwoordelijk voor dit deel" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Verkopen van meerdere" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Valuta die gebruikt wordt voor de cache berekeningen" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimale BOM kosten" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Minimale kosten van onderdelen" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maximale BOM kosten" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Maximale kosten van onderdelen" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimale aankoop kosten" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Minimale historische aankoop kosten" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maximale aanschaf kosten" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Maximum historische aankoop kosten" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimale interne prijs" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Minimale kosten op basis van interne prijsschommelingen" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maximale interne prijs" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Maximale kosten gebaseerd op interne prijsvoordelen" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Minimale leverancier prijs" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Minimale prijs van onderdeel van externe leveranciers" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Maximale leverancier prijs" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Maximale prijs van onderdeel van externe leveranciers" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Minimale variant kosten" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Berekende minimale kosten van variant onderdelen" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Maximale variant kosten" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Berekende maximale kosten van variant onderdelen" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimale kostprijs" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Overschrijf minimale kosten" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maximale kosten" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Overschrijf maximale kosten" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Berekende minimale kosten" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Berekende totale maximale kosten" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Minimale verkoop prijs" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Minimale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Maximale verkoop prijs" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Maximale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Minimale verkoop prijs" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Minimale historische verkoop prijs" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Maximale verkoop prijs" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Maximale historische verkoop prijs" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Getelde items" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Aantal individuele voorraadvermeldingen op het moment van voorraadcontrole" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Totale voorraad op het moment van voorraadcontrole" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Datum waarop voorraad werd uitgevoerd" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Minimale voorraadprijs" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Geschatte minimum kosten van de voorraad op de hand" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maximale voorraadkosten" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Geschatte maximale kosten van de hand van voorraad" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Periodieke verkoopprijs voor onderdelen" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Sjabloon test onderdeel" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ongeldige sjabloonnaam - moet minstens één alfanumeriek teken bevatten" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Test sjablonen kunnen alleen worden gemaakt voor testbare onderdelen" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Test template met dezelfde sleutel bestaat al voor een deel" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Test naam" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Geef een naam op voor de test" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Test sleutel" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Vereenvoudigde sleutel voor de test" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Test beschrijving" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Voer beschrijving in voor deze test" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Is deze test ingeschakeld?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Vereist" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Is deze test nodig om te doorlopen?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Waarde vereist" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Heeft deze test een waarde nodig bij het toevoegen van een testresultaat?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Vereist bijlage" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vereist deze test een bestandsbijlage bij het toevoegen van een testresultaat?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld " -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Selecteer boven liggend onderdeel" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Sub onderdeel" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Selecteer onderdeel dat moet worden gebruikt in BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "BOM hoeveelheid voor dit BOM item" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Dit BOM item is optioneel" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Dit BOM item is verbruikbaar (het wordt niet bijgehouden in build orders)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Totale hoeveelheid" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Extra benodigde hoeveelheid voor een build, rekening houdend met verliezen van de setup" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Attriatie" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Geschatte uitstraling voor een gebouw, uitgedrukt in percentage (0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Afronden meerdere" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Afronden met omhoog vereiste productiehoeveelheid naar dichtstbijzijnde meerdere van deze waarde" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Artikelregel referentie" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "BOM item notities" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Controle som" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "BOM lijn controle som" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Goedgekeurd" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Dit BOM item is goedgekeurd" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Wordt overgenomen" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Dit BOM item wordt overgenomen door BOMs voor variant onderdelen" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Voorraaditems voor variant onderdelen kunnen worden gebruikt voor dit BOM artikel" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Hoeveelheid moet een geheel getal zijn voor trackable onderdelen" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "BOM Item vervangingen bewerken" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Vervanging onderdeel kan niet hetzelfde zijn als het hoofddeel" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Bovenliggend BOM item" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Vervanging onderdeel" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Eerste deel" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Tweede deel" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Selecteer gerelateerd onderdeel" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Opmerking voor deze relatie" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Onderdeel relatie kan niet worden gecreëerd tussen een deel en zichzelf" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Dubbele relatie bestaat al" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index 0844cce8f3..8ae8017cdd 100644 --- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -336,11 +336,11 @@ msgstr "En feil har blitt logget av serveren." msgid "Image" msgstr "Bilde" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuta" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Del" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Valgfritt" @@ -785,7 +785,7 @@ msgstr "Produksjonsordre-referanse" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Produksjonsobjekt" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Sporbar" msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "BOM-artikkel" @@ -1617,7 +1617,7 @@ msgstr "Nøkkelstreng må være unik" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Sjekkboksparameter kan ikke ha enheter" msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Valg må være unike" @@ -2094,7 +2094,7 @@ msgstr "Sjekkboks" msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Valg" @@ -2106,7 +2106,7 @@ msgstr "Gyldige valg for denne parameteren (kommaseparert)" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Aktivert" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Parameterverdi" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL for ekstern leverandørdel-lenke" msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" @@ -4307,7 +4307,7 @@ msgstr "Pakkeantall" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totalt antall i en enkelt pakke. La være tom for enkeltenheter." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "flere" @@ -6090,404 +6090,404 @@ msgstr "Opprettingsbruker" msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Antall" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Dato" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Krever denne testen en verdi når det legges til et testresultat?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Krever denne testen et filvedlegg når du legger inn et testresultat?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Denne BOM-artikkelen er forbruksvare (den spores ikke i produksjonsordrer)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Lagervarer for variantdeler kan brukes for denne BOM-artikkelen" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Del-forhold kan ikke opprettes mellom en del og seg selv" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index abaaa80f1e..70b7cd2b41 100644 --- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -336,11 +336,11 @@ msgstr "Błąd został zapisany w logach serwera." msgid "Image" msgstr "Obraz" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Waluta" @@ -572,9 +572,9 @@ msgstr "Obejmuje warianty" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Komponent" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -669,11 +669,11 @@ msgstr "Wyklucz drzewo" msgid "Build must be cancelled before it can be deleted" msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opcjonalne" @@ -785,7 +785,7 @@ msgstr "Odwołanie do zamówienia wykonania" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Zbuduj obiekt" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Możliwość śledzenia" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Element BOM" @@ -1617,7 +1617,7 @@ msgstr "Ciąg musi być unikatowy" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Aktywne" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Wartość parametru" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "Ilość w opakowaniu" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "wielokrotność" @@ -6090,404 +6090,404 @@ msgstr "Tworzenie użytkownika" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Wymagane" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 29d2b4a536..333f135510 100644 --- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -336,11 +336,11 @@ msgstr "Log de erro salvo pelo servidor." msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Moeda" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Peça" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opcional" @@ -785,7 +785,7 @@ msgstr "Referência do pedido de produção" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Objeto de produção" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Rastreável" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Item LDM" @@ -1617,7 +1617,7 @@ msgstr "A frase senha deve ser diferenciada" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Parâmetros da caixa de seleção não podem ter unidades" msgid "Checkbox parameters cannot have choices" msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Escolhas devem ser únicas" @@ -2094,7 +2094,7 @@ msgstr "Caixa de seleção" msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Escolhas" @@ -2106,7 +2106,7 @@ msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Valor do Parâmetro" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "preço base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" @@ -4307,7 +4307,7 @@ msgstr "Quantidade de embalagens" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens únicos." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiplo" @@ -6090,404 +6090,404 @@ msgstr "Criação de Usuário" msgid "Owner responsible for this part" msgstr "Proprietário responsável por esta peça" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Venda múltipla" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Moeda usada para armazenar os cálculos de preços" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Custo Mínimo da LDM" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Custo mínimo das peças componentes" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Custo Máximo da LDM" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Custo máximo das peças componentes" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Custo Mínimo de Compra" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Custo mínimo histórico de compra" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Custo Máximo de Compra" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Custo máximo histórico de compra" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Preço Interno Mínimo" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Custo mínimo baseado nos intervalos de preço internos" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Preço Interno Máximo" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Custo máximo baseado nos intervalos de preço internos" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Preço Mínimo do Fornecedor" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Preço Máximo do Fornecedor" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Custo Mínimo variável" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Custo mínimo calculado das peças variáveis" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Custo Máximo Variável" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Custo máximo calculado das peças variáveis" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Custo Mínimo" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Sobrepor o custo mínimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Custo Máximo" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Sobrepor o custo máximo" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Custo total mínimo calculado" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Custo total máximo calculado" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Preço Mínimo de Venda" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Preço mínimo de venda baseado nos intervalos de preço" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Preço Máximo de Venda" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Preço máximo de venda baseado nos intervalos de preço" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Custo Mínimo de Venda" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Preço histórico mínimo de venda" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Custo Máximo de Venda" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Preço histórico máximo de venda" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Peça para Balanço" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Total de Itens" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Número de entradas de estoques individuais no momento do balanço" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Estoque total disponível no momento do balanço" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Data de realização do balanço" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Custo Mínimo de Estoque" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Custo mínimo estimado de estoque disponível" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Custo Máximo de Estoque" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Custo máximo estimado de estoque disponível" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Nome de Teste" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Insira um nome para o teste" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Descrição do Teste" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Digite a descrição para este teste" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Requerido" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Este teste é obrigatório passar?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Requer Valor" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Este teste requer um valor ao adicionar um resultado de teste?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Anexo obrigatório" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Este teste requer um anexo ao adicionar um resultado de teste?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Selecione a Peça Parental" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Selecionar peça a ser usada na LDM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Quantidade de LDM para este item LDM" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Este item LDM é opcional" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este item LDM é consumível (não é rastreado nos pedidos de construção)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Referência do Item LDM" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Notas do Item LDM" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Soma de verificação" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Soma de Verificação da LDM da linha" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Validado" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "O item da LDM foi validado" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Obtém herdados" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este item da LDM é herdado por LDMs para peças variáveis" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Itens de estoque para as peças das variantes podem ser usados para este item LDM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Sub peça deve ser especificada" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Substituir Item da LDM" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "A peça de substituição não pode ser a mesma que a peça mestre" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Item LDM Parental" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Substituir peça" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Selecionar Peça Relacionada" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacionamento da peça não pode ser criada com ela mesma" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index 473a4394de..332249c411 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -336,11 +336,11 @@ msgstr "Um erro foi registrado pelo servidor." msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Deve ser um número válido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Moeda" @@ -572,9 +572,9 @@ msgstr "Incluir Variáveis" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Parte" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -669,11 +669,11 @@ msgstr "Excluir árvore" msgid "Build must be cancelled before it can be deleted" msgstr "A compilação deve ser cancelada antes de ser excluída" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opcional" @@ -785,7 +785,7 @@ msgstr "Referência do pedido de produção" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Compilar objeto" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Rastreável" msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Item BOM" @@ -1617,7 +1617,7 @@ msgstr "A frase senha deve ser diferenciada" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Caixa de seleção" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "preço base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" @@ -4307,7 +4307,7 @@ msgstr "Quantidade de embalagens" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens individuais." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiplo" @@ -6090,404 +6090,404 @@ msgstr "Criação de Usuário" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Modelos de teste só podem ser criados para partes testáveis" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Obrigatório" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index b92125d40b..e6744b4b38 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -336,11 +336,11 @@ msgstr "A fost înregistrată o eroare de către server." msgid "Image" msgstr "Imagine" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Trebuie sa fie un număr valid" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Monedă" @@ -572,9 +572,9 @@ msgstr "İnclude variante" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Piesă" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -669,11 +669,11 @@ msgstr "Exclude arbore" msgid "Build must be cancelled before it can be deleted" msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opţional" @@ -785,7 +785,7 @@ msgstr "Referință comandă producție" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Construiește obiectul" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "Descrierea piesei furnizorului" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "Responsabil pentru acest capitol" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Descriere test" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Introduceți descrierea pentru acest test" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Este necesar acest test pentru a trece?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 8073b73f0f..f40b6f0a67 100644 --- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -336,11 +336,11 @@ msgstr "Сервер зарегистрировал ошибку." msgid "Image" msgstr "Изображение" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Валюта" @@ -572,9 +572,9 @@ msgstr "Включая варианты" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Деталь" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Категория" @@ -669,11 +669,11 @@ msgstr "Исключить дерево" msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Расходник" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Необязательно" @@ -785,7 +785,7 @@ msgstr "Ссылка на заказ на производство" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Объект производства" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Отслеживание" msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Позиция BOM" @@ -1617,7 +1617,7 @@ msgstr "Строка ключа должна быть уникальной" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "У параметров-переключателей не может б msgid "Checkbox parameters cannot have choices" msgstr "У параметров-переключателей не может быть вариантов" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Варианты должны быть уникальными" @@ -2094,7 +2094,7 @@ msgstr "Переключатель" msgid "Is this parameter a checkbox?" msgstr "Этот параметр является переключателем?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Варианты" @@ -2106,7 +2106,7 @@ msgstr "Возможные варианты этого параметра (ра msgid "Selection list for this parameter" msgstr "Список выбора для этого параметра" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Включено" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Значение параметра" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "Ссылка на сайт поставщика" msgid "Supplier part description" msgstr "Описание детали поставщика" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" @@ -4307,7 +4307,7 @@ msgstr "Количество в упаковке" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Общее количество, поставляемое в одной упаковке. Оставьте пустым для отдельных элементов." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "множественные" @@ -6090,404 +6090,404 @@ msgstr "Создатель" msgid "Owner responsible for this part" msgstr "Ответственный владелец этой детали" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Валюта, используемая для кэширования расчётов цен" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Минимальная стоимость компонентных деталей" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Максимальная стоимость компонентных деталей" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Минимальная стоимость закупки" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Минимальная историческая стоимость закупки" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Максимальная стоимость закупки" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Максимальная историческая стоимость закупки" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Минимальная внутренняя цена" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Минимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Максимальная внутренняя цена" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Максимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Минимальная цена поставщика" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Минимальная цена детали от внешних поставщиков" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Максимальная цена поставщика" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Максимальная цена детали от внешних поставщиков" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Минимальная стоимость варианта" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Расчётная минимальная стоимость вариантов деталей" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Максимальная стоимость варианта" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Расчётная максимальная стоимость вариантов деталей" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Переопределить минимальную стоимость" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Переопределить максимальную стоимость" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Расчётная общая минимальная стоимость" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Расчётная общая максимальная стоимость" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Минимальная цена продажи" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Минимальная цена продажи на основе ценовых уровней" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Максимальная цена продажи" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Максимальная цена продажи на основе ценовых уровней" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Минимальная стоимость продажи" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Минимальная историческая цена продажи" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Максимальная стоимость продажи" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Максимальная историческая цена продажи" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Деталь для инвентаризации" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Количество элементов" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Количество отдельных складских позиций на момент инвентаризации" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Общий доступный запас на момент инвентаризации" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Дата" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Дата проведения инвентаризации" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Минимальная стоимость запасов" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Оценочная минимальная стоимость имеющихся запасов" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Максимальная стоимость запасов" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Оценочная максимальная стоимость имеющихся запасов" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Цена продажи детали по порогу" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Шаблон теста детали" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Недопустимое имя шаблона — должно содержать хотя бы один буквенно-цифровой символ" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Шаблоны тестов можно создавать только для тестируемых деталей" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Шаблон теста с тем же ключом уже существует для детали" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Ключ теста" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Упрощённый ключ для теста" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Активен ли данный тест?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Необходим" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Необходимо ли пройти этот тест?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Требуется ли значение для этого теста при добавлении результата?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Требуются вложения" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Требуется ли прикреплять вложение в виде файла при добавлении результатов теста?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Допустимые варианты данного теста(через запятую)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "Пункт спецификации нельзя изменить — сборка заблокирована" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Пункт спецификации нельзя изменить — вариант сборки заблокирован" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Количество элементов в спецификации" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Эта позиция спецификации необязательна" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник (она не отслеживается в заказах на производство)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Количество для подготовки" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Дополнительное требуемое количество для сборки, учитывающее потери при подготовке" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Потери" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Оценочные потери для сборки, выраженные в процентах (0–100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Округление до кратности" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Округлять требуемое производственное количество до ближайшего кратного этого значения" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Ссылка на позицию спецификации" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Заметка о позиции в спецификации" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Контрольная сумма строки спецификации" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Проверен" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Этот пункт спецификации подтверждён" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Наследуется" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Позиция спецификации наследуется разновидностями детали" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Эту позицию можно заменять деталями, которые находятся на складе" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Необходимо указать поддеталь" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Замена пункта спецификации" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Деталь для замены не может быть такой же, как основная деталь" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Деталь 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Деталь 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Выберите связанную деталь" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Заметка для данной связи" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Нельзя создать отношение детали с самой собой" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Дублирующее отношение уже существует" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index cbda4bbfa1..fc21c22055 100644 --- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 0b16bdbc65..f3f0b997dc 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -336,11 +336,11 @@ msgstr "Zaznana napaka na strežniku." msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuta" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Del" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Neobvezno" @@ -785,7 +785,7 @@ msgstr "Referenca naloga izgradnje" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index 3cf27a2e4b..ec3dd09c19 100644 --- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -336,11 +336,11 @@ msgstr "Server je zabležio grešku." msgid "Image" msgstr "Slika" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuta" @@ -572,9 +572,9 @@ msgstr "Uključi varijante" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Deo" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -669,11 +669,11 @@ msgstr "Ne uključuj stablo" msgid "Build must be cancelled before it can be deleted" msgstr "Proizvod mora biti poništen pre nego što se izbriše" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Opciono" @@ -785,7 +785,7 @@ msgstr "Reference naloga za pravljenje" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Objekat izgradnje" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Može da se prati" msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "BOM stavka" @@ -1617,7 +1617,7 @@ msgstr "Tekstualni ključ mora da bude jedinstven" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Checkbox parametri ne mogu imati jedinice" msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parametri ne mogu imati izbore" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Izbori moraju biti jedinstveni" @@ -2094,7 +2094,7 @@ msgstr "Polje za potvrdu" msgid "Is this parameter a checkbox?" msgstr "Da li je ovaj parametar checkbox?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Izbori" @@ -2106,7 +2106,7 @@ msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)" msgid "Selection list for this parameter" msgstr "Lista izbora za ovaj parametar" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Omogućen" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Vrednost parametra" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL za link dela eksternog dobavljača" msgid "Supplier part description" msgstr "Opis dela dobavljača" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "osnovni trošak" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" @@ -4307,7 +4307,7 @@ msgstr "Količina pakovanja" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Ukupna količina dostavljena u jednom pakovanju. Ostaviti prazno za pojedinačne stavke." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "više" @@ -6090,404 +6090,404 @@ msgstr "Korisnik koji je kreirao" msgid "Owner responsible for this part" msgstr "Vlasnik odgovoran za ovaj deo" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Prodaj više" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Valuta korišćena za vršenje proračuna o cenama" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimalna vrednost spiska materijala" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Minimalna vrednost komponenti delova" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maksimalna vrednost spiska materijala" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Maksimalna vrednost komponenti delova" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimalna kupovna vrednost" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Minimalna istorijska kupovna vrednost" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maksimalna kupovna vrednost" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Maksimalna istorijska kupovna vrednost" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimalna interna cena" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Minimalna cena bazirana na internim sniženjima cena" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maksimalna interna cena" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Maksimalna vrednost bazirana na internim sniženjima cena" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Minimalna cena dobavljača" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Minimalna cena dela od eksternih dobavljača" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Maksimalna cena dobavljača" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Maksimalna cena dela od eksternih dobavljača" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Minimalna vrednost varijanti" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Izračunata minimalna vrednost varijanti delova" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Maksimalna vrednost varijanti" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Izračunata maksimalna vrednost varijanti delova" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimalna vrednost" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Promeni minimalnu vrednost" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maksimalna vrednost" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Promeni maksimalnu vrednost" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Ukupna izračunata minimalna vrednost" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Ukupna izračunata maksimalna vrednost" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Minimalna prodajna cena" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Minimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Maksimalna prodajna cena" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Maksimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Minimalna prodajna vrednost" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Minimalna istorijska prodajna cena" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Maksimalna prodajna vrednost" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Maksimalna istorijska prodajna cena" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Deo za popis" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Broj stavki" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Broj individualnih unosa zaliha u vreme popisa" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Ukupne dostupne zalihe za vreme popisa" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Datum kada je izvršen popis" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Minimalna vrednost zaliha" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Procenjena minimalna vrednost trenutnih zaliha" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maksimalna vrednost zaliha" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Procenjena maksimalna vrednost trenutnih zaliha" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Smanjenje prodajne cene dela" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Šablon testa dela" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nevažeći naziv šablona - mora da uključuje bar jedan alfanumerički karakter" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Test šabloni mogu biti kreirani samo za delove koje je moguće testirati" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Test šablon sa istim ključem već postoji za ovaj deo" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Naziv testa" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Unesi naziv za ovaj test" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Test ključ" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Pojednostavljen ključ za test" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Opis testa" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Unesi opis za ovaj test" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Da li je ovaj test omogućen?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Neophodno" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Da li je neophodno da ovaj test prođe?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Zahteva vrednost" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Da li ovaj test zahteva vrednost prilikom dodavanja rezultata testa?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Zahteva prilog" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Da li ovaj test zahteva fajl kao prilog prilikom dodavanja rezultata testa?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Validni izbori za ovaj test (razdvojeni zapetom)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje je zaključano" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje varijanti je zaključano" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Izaberi nadređeni deo" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Pod-deo" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Izaberi deo koji će biti korišćen u spisku materijala" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Količina spiskova materijala za ovu stavku sa spiska materijala" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Ova stavka sa spiska materijala je opciona" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ova stavka sa spiska materijala se može potrošiti (nije praćena u nalozima za izradu)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Referenca stavke sa spiska materijala" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Beleške stavki sa spiska materijala" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Suma" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Suma spiska materijala" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Validirano" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Ova stavka sa spiska materijala je validirana" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Biva nasleđeno" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ova stavka sa spiska materijala je nasleđivana od spiska materijala za varijante delova" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Stavke sa zaliha za varijante delova se mogu koristiti za ovu stavku sa spiska materijala" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Količina mora biti ceo broj za delove koji se mogu pratiti" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Zamenski deo mora biti određen" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Zamenska stavka sa spiska materijala" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Zamenski deo ne može biti isti kao glavni deo" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Nadređena stavka sa spiska materijala" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Zamenski deo" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Deo 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Deo 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Izaberi povezan deo" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Beleška za ovu relaciju" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacija između delova ne može biti kreirana između jednog istog dela" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Identična veza već postoji" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index 990f0e731f..10064c3533 100644 --- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -336,11 +336,11 @@ msgstr "Ett fel har loggats av servern." msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Valuta" @@ -572,9 +572,9 @@ msgstr "Inkludera varianter" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Del" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Tillverkningen måste avbrytas innan den kan tas bort" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Valfri" @@ -785,7 +785,7 @@ msgstr "Tillverknings order referens" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Bygg objekt" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Spårbar" msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Kryssruta" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Val" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Aktiverad" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Validerad" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 9ac51a853f..733f69f6b4 100644 --- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "สกุลเงิน" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index 847c9bc4b1..54abb926de 100644 --- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -336,11 +336,11 @@ msgstr "Bir hafta sunucu tarafından kayıt edildi." msgid "Image" msgstr "Görsel" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Para birimi" @@ -572,9 +572,9 @@ msgstr "Varyantları Dahil Et" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Parça" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -669,11 +669,11 @@ msgstr "Ağacı Hariç Tut" msgid "Build must be cancelled before it can be deleted" msgstr "Üretim silinemeden önce iptal edilmelidir" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "İsteğe Bağlı" @@ -785,7 +785,7 @@ msgstr "Üretim Emri Referansı" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Üretim nesnesi" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Takip Edilebilir" msgid "Inherited" msgstr "Devralınmış" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "ML Ögesi" @@ -1617,7 +1617,7 @@ msgstr "Anahtar dizesi benzersiz olmalı" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Onay kutusu parametrelerinin birimleri olamaz" msgid "Checkbox parameters cannot have choices" msgstr "Onay kutusu parametrelerinin seçenekleri olamaz" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Seçenekler eşsiz olmalıdır" @@ -2094,7 +2094,7 @@ msgstr "Onay kutusu" msgid "Is this parameter a checkbox?" msgstr "Bu parametre bir onay kutusu mu?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Seçenekler" @@ -2106,7 +2106,7 @@ msgstr "Bu parametre için geçerli seçenekler (virgül ile ayrılmış)" msgid "Selection list for this parameter" msgstr "Bu parametre için seçim listesi" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Etkin" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Parametre Değeri" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "Harici tedarikçi parçası bağlantısı için URL" msgid "Supplier part description" msgstr "Tedarikçi parçası açıklaması" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum ücret (örneğin stoklama ücreti)" @@ -4307,7 +4307,7 @@ msgstr "Paket Miktarı" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Tek bir pakette tedarik edilen toplam miktar. Tekli ürünler için boş bırakın." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "çoklu" @@ -6090,404 +6090,404 @@ msgstr "Oluşturan Kullanıcı" msgid "Owner responsible for this part" msgstr "Bu parçanın sorumlu sahibi" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Birden fazla sat" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Fiyat hesaplamalarını önbelleğe almak için kullanılan para birimi" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Minimum BOM Maliyeti" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Bileşenlerin minimum maliyeti" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Maksimum BOM Maliyeti" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Bileşenlerin maksimum maliyeti" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Minimum Satın Alma Maliyeti" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Minimum tarihsel satın alma maliyeti" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Maksimum Satın Alma Maliyeti" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Maksimum tarihsel satın alma maliyeti" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Minimum Dahili Fiyat" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı minimum maliyet" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Maksimum Dahili Fiyat" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı maksimum maliyet" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Minimum Tedarikçi Fiyatı" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Parça için minimum dış tedarikçi fiyatı" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Maksimum Tedarikçi Fiyatı" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Parça için maksimum dış tedarikçi fiyatı" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Minimum Varyant Maliyeti" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Varyant parçaların hesaplanan minimum maliyeti" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Maksimum Varyant Maliyeti" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Varyant parçaların hesaplanan maksimum maliyeti" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Minimum Maliyet" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Minimum maliyeti geçersiz kıl" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Maksimum Maliyet" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Maksimum maliyeti geçersiz kıl" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Hesaplanan genel minimum maliyet" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Hesaplanan genel maksimum maliyet" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Minimum Satış Fiyatı" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı minimum satış fiyatı" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Maksimum Satış Fiyatı" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı maksimum satış fiyatı" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Minimum Satış Maliyeti" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Minimum tarihsel satış fiyatı" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Maksimum Satış Maliyeti" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Maksimum tarihsel satış fiyatı" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Stok sayımı için parça" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Kalem Sayısı" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Sayım anındaki tekil stok kaydı sayısı" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Sayım anındaki toplam mevcut stok" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Tarih" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Stok sayımının yapıldığı tarih" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Minimum Stok Maliyeti" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Mevcut stokun tahmini minimum maliyeti" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Maksimum Stok Maliyeti" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Mevcut stokun tahmini maksimum maliyeti" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "Parça Satış Fiyat Kademesi" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "Parça Test Şablonu" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Geçersiz şablon adı - en az bir alfasayısal karakter içermelidir" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "Test şablonları sadece test edilebilir paçalar için oluşturulabilir" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "Aynı anahtara sahip test şablonu parça için zaten mevcut" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Test için bir ad girin" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "Test Anahtarı" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "Test için basitleştirilmiş anahtar" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Bu test için açıklama girin" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "Bu test etkinleştirildi mi?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Gerekli" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Değer Gerektirir" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Bir test sonucu eklerken bu test bir değer gerektirir mi?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Ek Gerektirir" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Bir test sonucu eklerken bu test bir dosya eki gerektirir mi?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "Bu test için geçerli seçenekler (virgül ile ayrılmış)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM kalemi değiştirilemez - montaj kilitlidir" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM kalemi değiştirilemez - varyant montajı kilitlidir" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Üst parçayı seçin" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Alt parça" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "BOM'da kullanılacak parçayı seçin" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Bu BOM kalemi için BOM miktarı" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Bu BOM kalemi isteğe bağlıdır" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Bu BOM kalemi bir sarf malzemesidir (üretim emirlerinde izlenmez)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "Hazırlık Payı" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Bir üretimdeki hazırlık kayıplarını telafi etmek için gereken ek miktar" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "Fire" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Bir üretim için tahmini fire oranı, yüzde olarak ifade edilir (0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "Kat Yuvarlama" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Gerekli üretim miktarını bu değerin en yakın katına yuvarlayın" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "BOM kalemi referansı" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "BOM kalemi notları" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Sağlama Toplamı" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "BOM satırı sağlama toplamı" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Doğrulandı" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Bu BOM kalemi doğrulandı" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Devralınır" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu BOM kalemi, varyant parçaların BOM'larından devralınmıştır" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Varyant parçaların stok kalemleri bu BOM kalemi için kullanılabilir" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "İzlenebilir parçalar için miktar tamsayı olmalıdır" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Alt parça belirtilmelidir" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "BOM Kalemi Muadili" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Muadil parça ile asıl parça aynı olamaz" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Üst BOM kalemi" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Muadil parça" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Parça 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Parça 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "İlgili Parçayı Seçin" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "Bu ilişki için not" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Bir parça ile kendisi arasında parça ilişkisi oluşturulamaz" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Kopyalanan ilişki zaten mevcut" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index 7ad5da86d5..2748987578 100644 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -336,11 +336,11 @@ msgstr "" msgid "Image" msgstr "Зображення" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Деталь" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -669,11 +669,11 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "" @@ -785,7 +785,7 @@ msgstr "" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Прапорець" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "Базова вартість" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" @@ -4307,7 +4307,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -6090,404 +6090,404 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Дата" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Тестова назва" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Позиція 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Позиція 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 0d92420b68..0d2c9c42f5 100644 --- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:49\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -336,11 +336,11 @@ msgstr "Lỗi đã được ghi lại bởi máy chủ." msgid "Image" msgstr "Hình ảnh" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "Tiền tệ" @@ -572,9 +572,9 @@ msgstr "" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "Nguyên liệu" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Danh mục" @@ -669,11 +669,11 @@ msgstr "" 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" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "Tuỳ chọn" @@ -785,7 +785,7 @@ msgstr "Tham chiếu đơn đặt bản dựng" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "Dựng đối tượng" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "Có thể theo dõi" msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "Mục BOM" @@ -1617,7 +1617,7 @@ msgstr "Chuỗi khóa phải duy nhất" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "Tham số hộp kiểm tra không thể có đơn vị" msgid "Checkbox parameters cannot have choices" msgstr "Tham số hộp kiểm tra không thể có lựa chọn" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" @@ -2094,7 +2094,7 @@ msgstr "Ô lựa chọn" msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "Lựa chọn" @@ -2106,7 +2106,7 @@ msgstr "Lựa chọn hợp lệ từ tham số này (ngăn cách bằng dấu ph msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "Đã bật" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "Giá trị tham số" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4282,11 +4282,11 @@ msgstr "URL cho liên kết sản phẩm của nhà cung cấp bên ngoài" msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" @@ -4307,7 +4307,7 @@ msgstr "Số lượng gói" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Tổng số lượng được cung cấp trong một gói đơn. Để trống cho các hàng hóa riêng lẻ." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "nhiều" @@ -6090,404 +6090,404 @@ msgstr "Tạo người dùng" msgid "Owner responsible for this part" msgstr "Trách nhiệm chủ sở hữu cho sản phẩm này" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "Tiền được dùng để làm đệm tính toán giá bán" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "Chi phí thành phần sản phẩm tối đa trong lịch sử" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "Chi phí tối thiểu dựa trên phá vỡ giá nội bộ" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "Chi phí tối đa dựa trên phá vỡ giá nội bộ" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "Giá sản phẩm tối thiểu từ nhà cung ứng bên ngoài" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "Giá sản phẩm tối đã từ nhà cung ứng bên ngoài" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "Chi phí tối thiểu của sản phẩm biến thể đã tính" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "Chi phí tối đa của sản phẩm biến thể đã tính" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "Giá bán tối thiểu dựa trên phá giá" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "Số mục kho độc lậo tại thời điểm kiểm kê" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "Tống số kho tại thời điểm kiểm kê" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Ngày" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "Chi phí kho tối thiểu ước tính của kho đang có" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "Chi phí kho tối đa ước tính của kho đang có" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "Kiểm thử này yêu cầu 1 giá trị khi thêm một kết quả kiểm thử?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "Kiểm thử này yêu cầu tệp đính kèm khi thêm một kết quả kiểm thử?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Mục BOM này bị tiêu hao (không được theo dõi trong đơn đặt bản dựng)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Mục BOM này được thừa kế bởi BOM cho sản phẩm biến thể" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Hàng trong kho cho sản phẩm biến thể có thể được dùng bởi mục BOM này" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Số lượng phải là giá trị nguyên dùng cho sản phẩm có thể theo dõi được" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "Sản phẩm thay thế không thể giống sản phẩm chủ đạo" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "Không thể tạo mối quan hệ giữa một sản phẩm và chính nó" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index e6e6c13d9d..1ed9a3f77e 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 12:48\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -336,11 +336,11 @@ msgstr "服务器记录了一个错误。" msgid "Image" msgstr "图像" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "货币" @@ -572,9 +572,9 @@ msgstr "包含变体" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "零件" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "类别" @@ -669,11 +669,11 @@ msgstr "排除树" msgid "Build must be cancelled before it can be deleted" msgstr "生产订单必须取消后才能删除" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "可选项" @@ -785,7 +785,7 @@ msgstr "生产订单编号" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -1020,7 +1020,7 @@ msgstr "生产对象" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1412,12 +1412,12 @@ msgstr "可追踪" msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "物料清单项" @@ -1617,7 +1617,7 @@ msgstr "键字符串必须是唯一的" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2058,7 +2058,7 @@ msgstr "勾选框参数不能有单位" msgid "Checkbox parameters cannot have choices" msgstr "复选框参数不能有选项" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "选择必须是唯一的" @@ -2094,7 +2094,7 @@ msgstr "勾选框" msgid "Is this parameter a checkbox?" msgstr "此参数是否为勾选框?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "选项" @@ -2106,7 +2106,7 @@ msgstr "此参数的有效选择 (逗号分隔)" msgid "Selection list for this parameter" msgstr "此参数的选择列表" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "已启用" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "参数值" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -4284,11 +4284,11 @@ msgstr "外部供应商零件链接的URL" msgid "Supplier part description" msgstr "供应商零件说明" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "基本费用" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" @@ -4309,7 +4309,7 @@ msgstr "包装数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "单包供应的总数量。为单个项目留空。" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "多个" @@ -6092,404 +6092,404 @@ msgstr "新建用户" msgid "Owner responsible for this part" msgstr "此零件的负责人" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "出售多个" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "用于缓存定价计算的货币" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "最低物料清单成本" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "物料清单的最高成本" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "最低购买成本" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "最大购买成本" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "最低内部价格" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "基于内部批发价的最低成本" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "最大内部价格" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "基于内部批发价的最高成本" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "供应商最低价格" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "外部供应商零件的最低价格" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "供应商最高价格" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "来自外部供应商的商零件的最高价格" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "最小变体成本" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "计算出的变体零件的最低成本" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "最大变体成本" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "计算出的变体零件的最大成本" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "覆盖最低成本" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "覆盖最大成本" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "计算总最低成本" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "计算总最大成本" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "最低售出价格" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "基于批发价的最低售出价格" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "最高售出价格" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "基于批发价的最大售出价格" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "最低销售成本" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "历史最低售出价格" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "最高销售成本" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "历史最高售出价格" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "用于盘点的零件" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "物品数量" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "盘点时的个别库存条目数" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "盘点时可用库存总额" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "日期" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "进行盘点的日期" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "最低库存成本" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "现有存库存最低成本估算" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "最高库存成本" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "目前库存最高成本估算" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "零件售出价格折扣" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "零件测试模板" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名称无效 - 必须包含至少一个字母或者数字" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "测试模板只能为可拆分的部件创建" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主键的测试模板" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "测试名" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "输入测试的名称" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "测试主键" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "简化测试主键" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "测试说明" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "输入测试的描述" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "此测试是否已启用?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "必须的" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "需要此测试才能通过吗?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "添加测试结果时是否需要一个值?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加测试结果时是否需要文件附件?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "此测试的有效选择 (逗号分隔)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清单项目不能被修改 - 装配已锁定" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清单项目不能修改 - 变体装配已锁定" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "选择父零件" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "子零件" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "选择要用于物料清单的零件" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "此物料清单项目的数量" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "此物料清单项目是可选的" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "设置数量" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "为补偿生产准备损耗所需的额外数量" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "损耗" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "生产预估损耗率(百分比,0-100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "舍入倍数" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "将所需生产数量向上舍入至该值的最接近倍数" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "物料清单项目引用" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "物料清单项目注释" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "校验和" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "物料清单行校验和" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "已验证" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "此物料清单项目已验证" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "获取继承的" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清单项目是由物料清单继承的变体零件" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "变体零件的库存项可以用于此物料清单项目" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追踪零件的数量必须是整数" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "必须指定子零件" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "物料清单项目替代品" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能与主零件相同" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "上级物料清单项目" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "零件2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "选择相关的零件" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "此关系的注释" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "零件关系不能在零件和自身之间创建" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "复制关系已经存在" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po index 8086aac27f..a4659aeead 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-21 02:25+0000\n" -"PO-Revision-Date: 2026-04-21 02:27\n" +"POT-Creation-Date: 2026-04-22 12:46+0000\n" +"PO-Revision-Date: 2026-04-22 21:40\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -23,7 +23,7 @@ msgstr "未找到 API 端點" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "必須提供項目清單以進行大量操作" #: InvenTree/api.py:445 msgid "Items must be provided as a list" @@ -165,19 +165,19 @@ msgstr "資料包含被禁止的 Markdown 內容" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "無效的 URL:沒有主機名稱" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "無效的 URL:無法解析主機名稱" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL 指向私有或保留的 IP 地址" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "重新導向次數過多" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -336,11 +336,11 @@ msgstr "伺服器紀錄了一個錯誤。" msgid "Image" msgstr "圖像" -#: InvenTree/serializers.py:361 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4178 msgid "Must be a valid number" msgstr "必須是有效的數字" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3312 msgid "Currency" msgstr "貨幣" @@ -572,9 +572,9 @@ msgstr "包含變體" #: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 #: order/api.py:1201 order/models.py:1991 order/models.py:2159 #: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 -#: part/models.py:527 part/models.py:3318 part/models.py:3461 -#: part/models.py:3519 part/models.py:3540 part/models.py:3562 -#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/models.py:527 part/models.py:3323 part/models.py:3466 +#: part/models.py:3524 part/models.py:3545 part/models.py:3567 +#: part/models.py:3708 part/models.py:3973 part/models.py:4394 #: part/serializers.py:1336 part/serializers.py:1990 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 @@ -596,7 +596,7 @@ msgid "Part" msgstr "零件" #: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3595 #: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "類別" @@ -669,11 +669,11 @@ msgstr "排除樹" msgid "Build must be cancelled before it can be deleted" msgstr "工單必須被取消才能被刪除" -#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:4007 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:4001 msgid "Optional" msgstr "非必須項目" @@ -718,7 +718,7 @@ msgstr "已訂購" #: build/api.py:671 msgid "Build not found" -msgstr "" +msgstr "找不到生產記錄" #: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 @@ -745,7 +745,7 @@ msgstr "產出" #: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "" +msgstr "依產出庫存項目 ID 篩選。使用 'null' 尋找未安裝的生產項目。" #: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" @@ -785,7 +785,7 @@ msgstr "生產工單代號" #: build/models.py:259 build/serializers.py:1420 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4047 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -799,7 +799,7 @@ msgstr "關於生產工單的簡單説明(選填)" #: build/models.py:278 msgid "Build Order to which this build is allocated" -msgstr "" +msgstr "分配此生產的生產訂單" #: build/models.py:287 msgid "Select part to build" @@ -811,7 +811,7 @@ msgstr "銷售訂單代號" #: build/models.py:297 msgid "Sales Order to which this build is allocated" -msgstr "" +msgstr "分配此生產的銷售訂單" #: build/models.py:302 build/serializers.py:1092 msgid "Source Location" @@ -1003,11 +1003,11 @@ msgstr "產出 {serial} 未通過所有必要測試" #: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "已分配的庫存項目仍在生產中" #: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "無法部分完成具有已分配項目的生產產出" #: build/models.py:1740 msgid "Build Order Line Item" @@ -1020,7 +1020,7 @@ msgstr "生產對象" #: build/models.py:1777 build/models.py:2102 build/serializers.py:266 #: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 #: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 +#: order/serializers.py:2232 part/models.py:3480 part/models.py:3995 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1056,7 +1056,7 @@ msgstr "選擇的庫存品項和BOM的項目不符" #: build/models.py:1970 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "分配數量必須大於零" #: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" @@ -1352,11 +1352,11 @@ msgstr "全部品項" #: build/serializers.py:1129 msgid "Untracked Items" -msgstr "" +msgstr "未追蹤項目" #: build/serializers.py:1130 msgid "Tracked Items" -msgstr "" +msgstr "已追蹤項目" #: build/serializers.py:1132 msgid "Item Type" @@ -1364,7 +1364,7 @@ msgstr "品項類型" #: build/serializers.py:1133 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "選擇要自動分配的項目類型" #: build/serializers.py:1187 msgid "BOM Reference" @@ -1412,12 +1412,12 @@ msgstr "可追蹤" msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1438 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4080 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3798 +#: part/models.py:4386 stock/api.py:881 msgid "BOM Item" msgstr "物料清單項" @@ -1617,7 +1617,7 @@ msgstr "鍵字符串必須是唯一的" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 #: common/models.py:2030 common/models.py:2031 common/models.py:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3574 part/models.py:3602 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -2048,7 +2048,7 @@ msgstr "參數模板" #: common/models.py:2442 msgid "Parameter Templates" -msgstr "" +msgstr "參數範本" #: common/models.py:2479 msgid "Checkbox parameters cannot have units" @@ -2058,7 +2058,7 @@ msgstr "勾選框參數不能有單位" msgid "Checkbox parameters cannot have choices" msgstr "複選框參數不能有選項" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3672 msgid "Choices must be unique" msgstr "選擇必須是唯一的" @@ -2068,7 +2068,7 @@ msgstr "參數模板名稱必須是唯一的" #: common/models.py:2543 msgid "Target model type for this parameter template" -msgstr "" +msgstr "此參數範本的目標模型類型" #: common/models.py:2549 msgid "Parameter Name" @@ -2094,7 +2094,7 @@ msgstr "勾選框" msgid "Is this parameter a checkbox?" msgstr "此參數是否為勾選框?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3759 msgid "Choices" msgstr "選項" @@ -2106,13 +2106,13 @@ msgstr "此參數的有效選擇 (逗號分隔)" msgid "Selection list for this parameter" msgstr "此參數的選擇清單" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3734 report/models.py:290 msgid "Enabled" msgstr "已啓用" #: common/models.py:2594 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "是否啟用此參數範本?" #: common/models.py:2635 msgid "Parameter" @@ -2128,15 +2128,15 @@ msgstr "無效的參數值選擇" #: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "為參數指定的模型類型無效" #: common/models.py:2788 msgid "Model ID" -msgstr "" +msgstr "模型 ID" #: common/models.py:2789 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "此參數的目標模型 ID" #: common/models.py:2798 common/setting/system.py:477 report/models.py:376 #: report/models.py:672 report/serializers.py:117 report/serializers.py:158 @@ -2146,7 +2146,7 @@ msgstr "模板" #: common/models.py:2799 msgid "Parameter template" -msgstr "" +msgstr "參數範本" #: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" @@ -2157,7 +2157,7 @@ msgid "Parameter Value" msgstr "參數值" #: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 +#: order/serializers.py:2144 part/models.py:4055 part/models.py:4426 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 @@ -2377,11 +2377,11 @@ msgstr "已收到退貨訂單中的物品" #: common/serializers.py:125 msgid "Indicates if changing this setting requires confirmation" -msgstr "" +msgstr "指示變更此設定是否需要確認" #: common/serializers.py:139 msgid "This setting requires confirmation before changing. Please confirm the change." -msgstr "" +msgstr "變更此設定前需要確認。請確認變更。" #: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" @@ -2467,7 +2467,7 @@ msgstr "用户無權為此模式創建或編輯附件" #: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "使用者沒有權限建立或編輯此模型的參數" #: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" @@ -2547,19 +2547,19 @@ msgstr "只向超級管理員顯示關於信息" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "顯示超級使用者橫幅" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "以超級使用者身分登入時,在 UI 中顯示警告橫幅" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "顯示管理員橫幅" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "以管理員身分登入時,在 UI 中顯示警告橫幅" #: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" @@ -3034,11 +3034,11 @@ msgstr "如果有內部價格,內部價格將覆蓋價格範圍計算" #: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "允許 BOM 零數量" #: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" -msgstr "" +msgstr "接受零件的 BOM 項目數量為零。允許使用設定數量來定義每次生產所需的數量,而與生產數量無關" #: common/setting/system.py:662 msgid "Enable label printing" @@ -3309,11 +3309,11 @@ msgstr "允許在訂單配送或完成後編輯銷售訂單" #: common/setting/system.py:892 msgid "Shipment Requires Checking" -msgstr "" +msgstr "發貨需要檢查" #: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "在項目被檢查前,防止完成發貨" #: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" @@ -3477,7 +3477,7 @@ msgstr "用户必須使用多因素安全認證。" #: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." -msgstr "" +msgstr "啟用此設定將要求所有使用者設定多因素驗證。所有工作階段將立即中斷連線。" #: common/setting/system.py:1052 msgid "Check plugins on startup" @@ -3561,7 +3561,7 @@ msgstr "啟用專案代碼以追蹤專案" #: common/setting/system.py:1123 msgid "Enable Stocktake" -msgstr "" +msgstr "啟用盤點" #: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" @@ -3573,7 +3573,7 @@ msgstr "排除外部地點" #: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "從盤點計算中排除外部位置的庫存項目" #: common/setting/system.py:1139 msgid "Automatic Stocktake Period" @@ -3581,23 +3581,23 @@ msgstr "自動盤點週期" #: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "自動記錄盤點的天數間隔" #: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "刪除舊的盤點項目" #: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" +msgstr "刪除超過指定天數的盤點項目" #: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" -msgstr "" +msgstr "盤點刪除間隔" #: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "盤點項目將在指定天數後刪除" #: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" @@ -3605,15 +3605,15 @@ msgstr "刪除舊庫存的追蹤紀錄" #: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" +msgstr "刪除超過指定天數的庫存追蹤項目" #: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "庫存追蹤刪除間隔" #: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "庫存追蹤項目將在指定天數後刪除" #: common/setting/system.py:1180 msgid "Display Users full names" @@ -3645,7 +3645,7 @@ msgstr "啟用設備 Ping" #: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "啟用對已註冊機器的定期 ping 任務以檢查其狀態" #: common/setting/user.py:23 msgid "Inline label display" @@ -3673,11 +3673,11 @@ msgstr "在瀏覽器中顯示PDF報告,而不是作為文件下載" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "表單欄位中的條碼掃描器" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "允許在表單欄位中使用條碼掃描器輸入" #: common/setting/user.py:51 msgid "Search Parts" @@ -3945,7 +3945,7 @@ msgstr "為用户保存上次使用的打印設備" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "所有模型" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3994,7 +3994,7 @@ msgstr "供應商零件處於激活狀態" #: company/api.py:254 msgid "Primary Supplier Part" -msgstr "" +msgstr "主要供應商零件" #: company/api.py:258 msgid "Internal Part is Active" @@ -4264,11 +4264,11 @@ msgstr "此供應商零件是否處於活動狀態?" #: company/models.py:792 msgid "Primary" -msgstr "" +msgstr "主要" #: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" -msgstr "" +msgstr "這是關聯零件的主要供應商零件嗎?" #: company/models.py:803 msgid "Select manufacturer part" @@ -4282,11 +4282,11 @@ msgstr "外部供應商零件鏈接的URL" msgid "Supplier part description" msgstr "供應商零件説明" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "基本費用" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" @@ -4307,7 +4307,7 @@ msgstr "包裝數量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "單包供應的總數量。為單個項目留空。" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "多個" @@ -4345,11 +4345,11 @@ msgstr "有庫存" #: company/serializers.py:435 msgid "Price Breaks" -msgstr "" +msgstr "價格折扣" #: company/serializers.py:488 msgid "Pretty Name" -msgstr "" +msgstr "顯示名稱" #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" @@ -4513,11 +4513,11 @@ msgstr "更新既有紀錄需要提供 ID。" #: importer/models.py:853 msgid "No record found with the provided ID" -msgstr "" +msgstr "找不到提供 ID 的記錄" #: importer/models.py:859 msgid "Invalid ID format provided" -msgstr "" +msgstr "提供的 ID 格式無效" #: importer/operations.py:31 importer/operations.py:52 msgid "Unsupported data file format" @@ -4625,7 +4625,7 @@ msgstr "正在打印" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "警告" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4641,7 +4641,7 @@ msgstr "已斷開連接" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "錯誤" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -4713,11 +4713,11 @@ msgstr "配置類型" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "屬性鍵值" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "屬性值" #: machine/serializers.py:30 users/models.py:238 msgid "Group" @@ -4725,11 +4725,11 @@ msgstr "組" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "屬性分組" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "類型" #: machine/serializers.py:35 msgid "Type of the property" @@ -4741,7 +4741,7 @@ msgstr "最大進度" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "進度類型的最大值,當 type=progress 時為必填" #: order/api.py:128 msgid "Order Reference" @@ -4843,7 +4843,7 @@ msgstr "已出貨" #: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "找不到發貨紀錄" #: order/api.py:1840 order/models.py:577 order/models.py:1973 #: order/models.py:2099 @@ -5014,7 +5014,7 @@ msgstr "數量必須是正數" #: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "序號無法分配給虛擬零件" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 #: stock/models.py:1086 stock/serializers.py:1397 @@ -5081,11 +5081,11 @@ msgstr "項目數量" #: order/models.py:1814 msgid "Line Number" -msgstr "" +msgstr "行號" #: order/models.py:1815 msgid "Line number for this item (optional)" -msgstr "" +msgstr "此項目的行號 (選填)" #: order/models.py:1822 msgid "Line item reference" @@ -5251,7 +5251,7 @@ msgstr "發貨沒有分配庫存項目" #: order/models.py:2446 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "發貨紀錄必須在完成前進行檢查" #: order/models.py:2516 msgid "Sales Order Extra Line" @@ -5355,7 +5355,7 @@ msgstr "接收日期" #: order/models.py:3081 msgid "The date this return item was received" -msgstr "" +msgstr "收到此退貨項目的日期" #: order/models.py:3093 msgid "Outcome" @@ -5403,7 +5403,7 @@ msgstr "複製參數" #: order/serializers.py:96 msgid "Copy order parameters from the original order" -msgstr "" +msgstr "從原始訂單複製訂單參數" #: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 @@ -5563,7 +5563,7 @@ msgstr "完成配送" #: order/serializers.py:1162 msgid "Allocated Lines" -msgstr "" +msgstr "已分配行" #: order/serializers.py:1355 msgid "Sale price currency" @@ -5754,23 +5754,23 @@ msgstr "物料清單合規" #: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "級聯類別" #: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "若為 true,則包含給定類別的子類別中的項目" #: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "依數字類別 ID 或常值 'null' 篩選" #: part/api.py:1280 msgid "Assembly part is active" -msgstr "" +msgstr "組件零件處於作用中狀態" #: part/api.py:1284 msgid "Assembly part is trackable" -msgstr "" +msgstr "組件零件可追蹤" #: part/api.py:1288 msgid "Assembly part is testable" @@ -5778,11 +5778,11 @@ msgstr "裝配部份是可測試的" #: part/api.py:1293 msgid "Component part is active" -msgstr "" +msgstr "子零件處於作用中狀態" #: part/api.py:1297 msgid "Component part is trackable" -msgstr "" +msgstr "子零件可追蹤" #: part/api.py:1301 msgid "Component part is testable" @@ -5790,15 +5790,15 @@ msgstr "組件部份是可測試的" #: part/api.py:1305 msgid "Component part is an assembly" -msgstr "" +msgstr "子零件是一個組件" #: part/api.py:1309 msgid "Component part is virtual" -msgstr "" +msgstr "子零件是虛擬的" #: part/api.py:1313 msgid "Has available stock" -msgstr "" +msgstr "有可用庫存" #: part/api.py:1370 msgid "Uses" @@ -5868,11 +5868,11 @@ msgstr "零件" #: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "無法刪除已鎖定零件的參數" #: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "無法修改已鎖定零件的參數" #: part/models.py:590 msgid "Cannot delete this part as it is locked" @@ -5907,7 +5907,7 @@ msgstr "零件不能是對自身的修訂" #: part/models.py:783 msgid "Revision code must be specified for a part marked as a revision" -msgstr "" +msgstr "標記為修訂版的零件必須指定修訂版代碼" #: part/models.py:791 msgid "Revisions are only allowed for assembly parts" @@ -6090,404 +6090,404 @@ msgstr "新建用户" msgid "Owner responsible for this part" msgstr "此零件的負責人" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "出售多個" -#: part/models.py:3308 +#: part/models.py:3313 msgid "Currency used to cache pricing calculations" msgstr "用於緩存定價計算的貨幣" -#: part/models.py:3324 +#: part/models.py:3329 msgid "Minimum BOM Cost" msgstr "最低物料清單成本" -#: part/models.py:3325 +#: part/models.py:3330 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3331 +#: part/models.py:3336 msgid "Maximum BOM Cost" msgstr "物料清單的最高成本" -#: part/models.py:3332 +#: part/models.py:3337 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3338 +#: part/models.py:3343 msgid "Minimum Purchase Cost" msgstr "最低購買成本" -#: part/models.py:3339 +#: part/models.py:3344 msgid "Minimum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3345 +#: part/models.py:3350 msgid "Maximum Purchase Cost" msgstr "最大購買成本" -#: part/models.py:3346 +#: part/models.py:3351 msgid "Maximum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3352 +#: part/models.py:3357 msgid "Minimum Internal Price" msgstr "最低內部價格" -#: part/models.py:3353 +#: part/models.py:3358 msgid "Minimum cost based on internal price breaks" msgstr "基於內部批發價的最低成本" -#: part/models.py:3359 +#: part/models.py:3364 msgid "Maximum Internal Price" msgstr "最大內部價格" -#: part/models.py:3360 +#: part/models.py:3365 msgid "Maximum cost based on internal price breaks" msgstr "基於內部批發價的最高成本" -#: part/models.py:3366 +#: part/models.py:3371 msgid "Minimum Supplier Price" msgstr "供應商最低價格" -#: part/models.py:3367 +#: part/models.py:3372 msgid "Minimum price of part from external suppliers" msgstr "外部供應商零件的最低價格" -#: part/models.py:3373 +#: part/models.py:3378 msgid "Maximum Supplier Price" msgstr "供應商最高價格" -#: part/models.py:3374 +#: part/models.py:3379 msgid "Maximum price of part from external suppliers" msgstr "來自外部供應商的商零件的最高價格" -#: part/models.py:3380 +#: part/models.py:3385 msgid "Minimum Variant Cost" msgstr "最小變體成本" -#: part/models.py:3381 +#: part/models.py:3386 msgid "Calculated minimum cost of variant parts" msgstr "計算出的變體零件的最低成本" -#: part/models.py:3387 +#: part/models.py:3392 msgid "Maximum Variant Cost" msgstr "最大變體成本" -#: part/models.py:3388 +#: part/models.py:3393 msgid "Calculated maximum cost of variant parts" msgstr "計算出的變體零件的最大成本" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3399 part/models.py:3413 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3395 +#: part/models.py:3400 msgid "Override minimum cost" msgstr "覆蓋最低成本" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3406 part/models.py:3420 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3402 +#: part/models.py:3407 msgid "Override maximum cost" msgstr "覆蓋最大成本" -#: part/models.py:3409 +#: part/models.py:3414 msgid "Calculated overall minimum cost" msgstr "計算總最低成本" -#: part/models.py:3416 +#: part/models.py:3421 msgid "Calculated overall maximum cost" msgstr "計算總最大成本" -#: part/models.py:3422 +#: part/models.py:3427 msgid "Minimum Sale Price" msgstr "最低售出價格" -#: part/models.py:3423 +#: part/models.py:3428 msgid "Minimum sale price based on price breaks" msgstr "基於批發價的最低售出價格" -#: part/models.py:3429 +#: part/models.py:3434 msgid "Maximum Sale Price" msgstr "最高售出價格" -#: part/models.py:3430 +#: part/models.py:3435 msgid "Maximum sale price based on price breaks" msgstr "基於批發價的最大售出價格" -#: part/models.py:3436 +#: part/models.py:3441 msgid "Minimum Sale Cost" msgstr "最低銷售成本" -#: part/models.py:3437 +#: part/models.py:3442 msgid "Minimum historical sale price" msgstr "歷史最低售出價格" -#: part/models.py:3443 +#: part/models.py:3448 msgid "Maximum Sale Cost" msgstr "最高銷售成本" -#: part/models.py:3444 +#: part/models.py:3449 msgid "Maximum historical sale price" msgstr "歷史最高售出價格" -#: part/models.py:3462 +#: part/models.py:3467 msgid "Part for stocktake" msgstr "用於盤點的零件" -#: part/models.py:3467 +#: part/models.py:3472 msgid "Item Count" msgstr "物品數量" -#: part/models.py:3468 +#: part/models.py:3473 msgid "Number of individual stock entries at time of stocktake" msgstr "盤點時的個別庫存條目數" -#: part/models.py:3476 +#: part/models.py:3481 msgid "Total available stock at time of stocktake" msgstr "盤點時可用庫存總額" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "日期" -#: part/models.py:3481 +#: part/models.py:3486 msgid "Date stocktake was performed" msgstr "進行盤點的日期" -#: part/models.py:3488 +#: part/models.py:3493 msgid "Minimum Stock Cost" msgstr "最低庫存成本" -#: part/models.py:3489 +#: part/models.py:3494 msgid "Estimated minimum cost of stock on hand" msgstr "現有存庫存最低成本估算" -#: part/models.py:3495 +#: part/models.py:3500 msgid "Maximum Stock Cost" msgstr "最高庫存成本" -#: part/models.py:3496 +#: part/models.py:3501 msgid "Estimated maximum cost of stock on hand" msgstr "目前庫存最高成本估算" -#: part/models.py:3506 +#: part/models.py:3511 msgid "Part Sale Price Break" msgstr "零件售出價格折扣" -#: part/models.py:3620 +#: part/models.py:3625 msgid "Part Test Template" msgstr "零件測試模板" -#: part/models.py:3646 +#: part/models.py:3651 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名稱無效 - 必須包含至少一個字母或者數字" -#: part/models.py:3678 +#: part/models.py:3683 msgid "Test templates can only be created for testable parts" msgstr "測試模板只能為可拆分的部件創建" -#: part/models.py:3692 +#: part/models.py:3697 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主鍵的測試模板" -#: part/models.py:3709 +#: part/models.py:3714 msgid "Test Name" msgstr "測試名" -#: part/models.py:3710 +#: part/models.py:3715 msgid "Enter a name for the test" msgstr "輸入測試的名稱" -#: part/models.py:3716 +#: part/models.py:3721 msgid "Test Key" msgstr "測試主鍵" -#: part/models.py:3717 +#: part/models.py:3722 msgid "Simplified key for the test" msgstr "簡化測試主鍵" -#: part/models.py:3724 +#: part/models.py:3729 msgid "Test Description" msgstr "測試説明" -#: part/models.py:3725 +#: part/models.py:3730 msgid "Enter description for this test" msgstr "輸入測試的描述" -#: part/models.py:3729 +#: part/models.py:3734 msgid "Is this test enabled?" msgstr "此測試是否已啓用?" -#: part/models.py:3734 +#: part/models.py:3739 msgid "Required" msgstr "必須的" -#: part/models.py:3735 +#: part/models.py:3740 msgid "Is this test required to pass?" msgstr "需要此測試才能通過嗎?" -#: part/models.py:3740 +#: part/models.py:3745 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3741 +#: part/models.py:3746 msgid "Does this test require a value when adding a test result?" msgstr "添加測試結果時是否需要一個值?" -#: part/models.py:3746 +#: part/models.py:3751 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3748 +#: part/models.py:3753 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加測試結果時是否需要文件附件?" -#: part/models.py:3755 +#: part/models.py:3760 msgid "Valid choices for this test (comma-separated)" msgstr "此測試的有效選擇 (逗號分隔)" -#: part/models.py:3949 +#: part/models.py:3957 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清單項目不能被修改 - 裝配已鎖定" -#: part/models.py:3956 +#: part/models.py:3964 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清單項目不能修改 - 變體裝配已鎖定" -#: part/models.py:3966 +#: part/models.py:3974 msgid "Select parent part" msgstr "選擇父零件" -#: part/models.py:3976 +#: part/models.py:3984 msgid "Sub part" msgstr "子零件" -#: part/models.py:3977 +#: part/models.py:3985 msgid "Select part to be used in BOM" msgstr "選擇要用於物料清單的零件" -#: part/models.py:3988 +#: part/models.py:3996 msgid "BOM quantity for this BOM item" msgstr "此物料清單項目的數量" -#: part/models.py:3994 +#: part/models.py:4002 msgid "This BOM item is optional" msgstr "此物料清單項目是可選的" -#: part/models.py:4000 +#: part/models.py:4008 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "這個物料清單項目是耗材 (它沒有在生產訂單中被追蹤)" -#: part/models.py:4008 +#: part/models.py:4016 msgid "Setup Quantity" msgstr "建置額外數量" -#: part/models.py:4009 +#: part/models.py:4017 msgid "Extra required quantity for a build, to account for setup losses" msgstr "為彌補建置 / 開工損耗所需的額外數量" -#: part/models.py:4017 +#: part/models.py:4025 msgid "Attrition" msgstr "損耗率" -#: part/models.py:4019 +#: part/models.py:4027 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "製造預估損耗(百分比 0–100)" -#: part/models.py:4030 +#: part/models.py:4038 msgid "Rounding Multiple" msgstr "進位倍數" -#: part/models.py:4032 +#: part/models.py:4040 msgid "Round up required production quantity to nearest multiple of this value" msgstr "將所需生產數量向上取整到此數值的整數倍" -#: part/models.py:4040 +#: part/models.py:4048 msgid "BOM item reference" msgstr "物料清單項目引用" -#: part/models.py:4048 +#: part/models.py:4056 msgid "BOM item notes" msgstr "物料清單項目註釋" -#: part/models.py:4054 +#: part/models.py:4062 msgid "Checksum" msgstr "校驗和" -#: part/models.py:4055 +#: part/models.py:4063 msgid "BOM line checksum" msgstr "物料清單行校驗和" -#: part/models.py:4060 +#: part/models.py:4068 msgid "Validated" msgstr "已驗證" -#: part/models.py:4061 +#: part/models.py:4069 msgid "This BOM item has been validated" msgstr "此物料清單項目已驗證" -#: part/models.py:4066 +#: part/models.py:4074 msgid "Gets inherited" msgstr "獲取繼承的" -#: part/models.py:4067 +#: part/models.py:4075 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清單項目是由物料清單繼承的變體零件" -#: part/models.py:4073 +#: part/models.py:4081 msgid "Stock items for variant parts can be used for this BOM item" msgstr "變體零件的庫存項可以用於此物料清單項目" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4190 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追蹤零件的數量必須是整數" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4200 part/models.py:4202 msgid "Sub part must be specified" msgstr "必須指定子零件" -#: part/models.py:4343 +#: part/models.py:4353 msgid "BOM Item Substitute" msgstr "物料清單項目替代品" -#: part/models.py:4364 +#: part/models.py:4374 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能與主零件相同" -#: part/models.py:4377 +#: part/models.py:4387 msgid "Parent BOM item" msgstr "上級物料清單項目" -#: part/models.py:4385 +#: part/models.py:4395 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4401 +#: part/models.py:4411 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4409 +#: part/models.py:4419 msgid "Part 2" msgstr "零件2" -#: part/models.py:4410 +#: part/models.py:4420 msgid "Select Related Part" msgstr "選擇相關的零件" -#: part/models.py:4417 +#: part/models.py:4427 msgid "Note for this relationship" msgstr "此關係的備註" -#: part/models.py:4436 +#: part/models.py:4446 msgid "Part relationship cannot be created between a part and itself" msgstr "零件關係不能在零件和自身之間創建" -#: part/models.py:4441 +#: part/models.py:4451 msgid "Duplicate relationship already exists" msgstr "複製關係已經存在" @@ -6716,31 +6716,31 @@ msgstr "已分配至銷售訂單" #: part/serializers.py:1287 msgid "Part IPN" -msgstr "" +msgstr "零件 IPN" #: part/serializers.py:1294 msgid "Part Description" -msgstr "" +msgstr "零件描述" #: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" -msgstr "" +msgstr "選擇一個零件以產生該零件 (及其任何變體零件) 的盤點資訊" #: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" -msgstr "" +msgstr "選擇一個類別以包含該類別 (及其子類別) 內的所有零件" #: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" -msgstr "" +msgstr "選擇一個位置以包含該位置 (及其子位置) 內所有有庫存的零件" #: part/serializers.py:1365 msgid "Generate Stocktake Entries" -msgstr "" +msgstr "產生盤點項目" #: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" -msgstr "" +msgstr "儲存選定零件的盤點項目" #: part/serializers.py:1373 msgid "Generate Report" @@ -6797,7 +6797,7 @@ msgstr "最高價格不能低於最低價格" #: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" -msgstr "" +msgstr "數量必須大於或等於零" #: part/serializers.py:1729 msgid "Select the parent assembly" @@ -7367,19 +7367,19 @@ msgstr "支援自 InvenTree 匯出資料" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "排除停用" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "排除已停用的參數" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "參數匯出工具" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "模型參數資料的匯出工具" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" @@ -7455,7 +7455,7 @@ msgstr "整合的 Slack 通知方式" #: plugin/builtin/integration/core_notifications.py:131 msgid "Slack incoming webhook URL" -msgstr "" +msgstr "Slack 傳入 Webhook URL" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7475,11 +7475,11 @@ msgstr "默認貨幣兑換集成" #: plugin/builtin/integration/machine_types.py:15 msgid "InvenTree Machines" -msgstr "" +msgstr "InvenTree 機器" #: plugin/builtin/integration/machine_types.py:16 msgid "Built-in machine types for InvenTree" -msgstr "" +msgstr "InvenTree 內建機器類型" #: plugin/builtin/integration/part_notifications.py:20 msgid "Part Notifications" @@ -7643,7 +7643,7 @@ msgstr "作為‘TME’的供應商" #: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 #: plugin/serializers.py:275 msgid "Only superuser accounts can administer plugins" -msgstr "" +msgstr "只有超級使用者帳號可以管理外掛程式" #: plugin/installer.py:243 msgid "Plugin installation is disabled" @@ -7651,11 +7651,11 @@ msgstr "插件安裝已禁用" #: plugin/installer.py:273 msgid "No package name or URL provided for installation" -msgstr "" +msgstr "未提供要安裝的套件名稱或 URL" #: plugin/installer.py:277 msgid "Invalid characters in package name or URL" -msgstr "" +msgstr "套件名稱或 URL 中包含無效字元" #: plugin/installer.py:287 msgid "Installed plugin successfully" @@ -7955,7 +7955,7 @@ msgstr "安裝尚未確認" #: plugin/serializers.py:152 msgid "Either packagename or URL must be provided" -msgstr "" +msgstr "必須提供套件名稱或 URL" #: plugin/serializers.py:191 msgid "Full reload" @@ -8176,7 +8176,7 @@ msgstr "資產文件描述" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "使用者必須經過驗證才能儲存報告範本" #: report/serializers.py:118 msgid "Select report template" @@ -8327,15 +8327,15 @@ msgstr "沒有結果" #: report/templatetags/report.py:166 msgid "Invalid media file path" -msgstr "" +msgstr "無效的媒體檔案路徑" #: report/templatetags/report.py:185 msgid "Invalid static file path" -msgstr "" +msgstr "無效的靜態檔案路徑" #: report/templatetags/report.py:287 msgid "Asset file not found" -msgstr "" +msgstr "找不到資產檔案" #: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" @@ -8343,7 +8343,7 @@ msgstr "找不到圖片文件" #: report/templatetags/report.py:430 msgid "No image file specified" -msgstr "" +msgstr "未指定影像檔案" #: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" @@ -8455,19 +8455,19 @@ msgstr "過期" #: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "提供一個 StockItem PK 以排除該項目及其所有子項目" #: stock/api.py:980 msgid "Cascade Locations" -msgstr "" +msgstr "級聯位置" #: stock/api.py:981 msgid "If true, include items in child locations of the given location" -msgstr "" +msgstr "若為 true,則包含給定位置的子位置中的項目" #: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" -msgstr "" +msgstr "依數字位置 ID 或常值 'null' 篩選" #: stock/api.py:1087 msgid "Quantity is required" @@ -8491,11 +8491,11 @@ msgstr "不能為不可跟蹤的零件提供序列號" #: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "包含已安裝" #: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "若為 true,則包含安裝在給定庫存項目下方的項目的測試結果" #: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" @@ -9628,19 +9628,19 @@ msgstr "用户的電子郵件地址" #: users/serializers.py:240 msgid "User must be authenticated" -msgstr "" +msgstr "使用者必須經過驗證" #: users/serializers.py:249 msgid "Only a superuser can create a token for another user" -msgstr "" +msgstr "只有超級使用者可以為其他使用者建立權杖" #: users/serializers.py:329 msgid "Administrator" -msgstr "" +msgstr "管理員" #: users/serializers.py:330 msgid "Does this user have administrative permissions" -msgstr "" +msgstr "此使用者是否具有管理權限" #: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" @@ -9676,11 +9676,11 @@ msgstr "忽略密碼規則警告" #: users/serializers.py:417 msgid "Staff" -msgstr "" +msgstr "員工" #: users/serializers.py:418 msgid "Does this user have staff permissions" -msgstr "" +msgstr "此使用者是否具有員工權限" #: users/serializers.py:468 msgid "You do not have permission to create users" diff --git a/src/frontend/src/locales/ar/messages.po b/src/frontend/src/locales/ar/messages.po index 79ffe50e21..7f5f124de9 100644 --- a/src/frontend/src/locales/ar/messages.po +++ b/src/frontend/src/locales/ar/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ar\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" @@ -72,7 +72,7 @@ msgstr "إلغاء" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "الإجراءات" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "تم رفع الصورة بنجاح" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "تمكين التعديل" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "اختر موقع المصدر لتخصيص المخزون" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "تم تخصيص عناصر المخزون" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/bg/messages.po b/src/frontend/src/locales/bg/messages.po index 4cf2bc72c1..b2d76461e4 100644 --- a/src/frontend/src/locales/bg/messages.po +++ b/src/frontend/src/locales/bg/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: bg\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/cs/messages.po b/src/frontend/src/locales/cs/messages.po index fe52c52665..5043b1b1fd 100644 --- a/src/frontend/src/locales/cs/messages.po +++ b/src/frontend/src/locales/cs/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: cs\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Czech\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" @@ -72,7 +72,7 @@ msgstr "Zrušit" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Akce" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Ne" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Kategorie dílů" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "Výběr záznamů" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "Výběr záznamů" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Zadat data čárového kódu" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Skenovat čárový kód" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Čárkový kód neodpovídá očekávanému typu modelu" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Tímto odstraníte odkaz na přidružený čárový kód" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Odstranit čárový kód" @@ -1456,23 +1456,23 @@ msgstr "Obraz byl úspěšně stažen" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Nahrání obrázku se nezdařilo" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Obrázek byl úspěšně nahrán" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Poznámky byly úspěšně uloženy" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Nepodařilo se uložit poznámky" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Chyba při ukládání poznámek" @@ -1480,15 +1480,15 @@ msgstr "Chyba při ukládání poznámek" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Uložit poznámky" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Zavřít editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Povolit úpravy" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Pluginy" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Vyberte balení" msgid "{0} icons" msgstr "Ikony {0}" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Načítání" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Nebyly nalezeny žádné výsledky" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Položka" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "Vytvořit nový {model}" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Položka modelRenderer je požadovaná pro tabulky" @@ -2181,7 +2190,7 @@ msgstr "Data byla úspěšně importována" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Zavřít" @@ -2912,15 +2921,19 @@ msgstr "Přílohy" msgid "Notes" msgstr "Poznámky" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Plugin poskytnutý" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "Máte neuložené změny, jste si jisti, že chcete opustit tento panel?" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Sbalit panely" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Rozbalit panely" @@ -3180,7 +3193,7 @@ msgstr "Kategorie" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Sériové číslo" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "O InvenTree.org" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Náhradní díl" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Upravit náhrady kusovníku" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Přidat náhradu" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Náhrada přidána" @@ -4555,7 +4568,7 @@ msgstr "Množství k dokončení" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IČO" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Přiděleno" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Zdrojové umístění" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Vyberte umístění pro přiřazení zásob" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Přidělit zásoby" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Zásoba přidělena" @@ -4717,10 +4730,10 @@ msgstr "Plně spotřebovány" msgid "Consumed" msgstr "Spotřebovány" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Vyberte kód projektu pro tuto položku" @@ -4770,27 +4783,27 @@ msgstr "Přihlásit se k odběru oznámení pro tuto kategorii" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Zvolte umístění" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Cíl položky byl vybrán" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Vybráno výchozí umístění kategorie dílu" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Vybráno skladové umístění" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Výchozí lokace vybrána" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Výchozí lokace vybrána" msgid "Virtual Part" msgstr "Virtuální díl" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "Tento díl je virtuální, žádné fyzické zásoby nebudou přijaty." @@ -4806,38 +4819,38 @@ msgstr "Tento díl je virtuální, žádné fyzické zásoby nebudou přijaty." #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Nastavit umístění" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Přiřadit kód dávky" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Nastavit umístění" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Přiřadit kód dávky" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "Přiřadit sériové čísla" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Nastavit datum expirace" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Upravit balení" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Změnit stav" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Přidat poznámku" @@ -4845,19 +4858,19 @@ msgstr "Přidat poznámku" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Uložit ve výchozím umístění" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Uložit na cíl řádkového předmětu " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Uložit již s přijatými zásobami" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Uložit již s přijatými zásobami" msgid "Batch Code" msgstr "Kód dávky" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Zadat kód dávky pro příchozí položky skladu" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Sériová čísla" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Zadat sériová čísla pro příchozí skladové položky" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Datum expirace" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Zadejte datum expirace pro přijaté položky" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Zadejte datum expirace pro přijaté položky" msgid "Packaging" msgstr "Balení" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Poznámka" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "Číslo zboží (SKU)" msgid "Received" msgstr "Přijaté" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Řádek přijatých položek" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Přijaté položky" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Položka byla přijata na skladě" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "Cena založena na dílu a množství se liší{0}" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Zkontrolovat zásilku" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Označení zásilky jako zkontrolovanou znamená, že jste ověřily, že všechny položky v této zásilce jsou správné" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Zásilka označena jako zkontrolována" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Odznačit zásilku" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Označení zásilky jako nezkontrolované znamená, že zásilka vyžaduje další ověření" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Zásilka označená jako nezkontrolována" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "Dokončování zásilky" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "Zásilka byla úspěšně dokončena" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Dokončit zásilku" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Ponechte prázdné pro použití adresy objednávky" @@ -10361,10 +10374,6 @@ msgstr "Nebyly nalezeny žádné přílohy" msgid "Drag attachment file here to upload" msgstr "Pro nahrání přetáhněte soubor přílohy zde" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Položka" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Model" @@ -10456,59 +10465,59 @@ msgstr "Vytvořit nový parametr" msgid "Import parameters from a file" msgstr "Importovat parametr ze souboru" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Přidat šablonu parametru" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Duplikovat šablonu parametru" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Odstranit šablonu parametru" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Upravit šablonu parametru" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Zaškrtávací políčko" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Zobrazit zaškrtávací šablony" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Má volby" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Zobrazit šablony s volbami" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Má jednotky" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Zobrazit šablony s jednotkami" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "Zobrazit povolené šablony" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Typ modelu" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "Filtrovat podle typu modelu" diff --git a/src/frontend/src/locales/da/messages.po b/src/frontend/src/locales/da/messages.po index b1228ebb16..13b242d99f 100644 --- a/src/frontend/src/locales/da/messages.po +++ b/src/frontend/src/locales/da/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: da\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Danish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Annuller" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Handlinger" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nej" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Del Kategorier" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Indtast stregkode data" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Scan stregkode" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Stregkode matcher ikke den forventede modeltype" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Dette vil fjerne linket til den tilknyttede stregkode" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Fjern linket til stregkode" @@ -1456,23 +1456,23 @@ msgstr "Billede downloadet" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Upload af billede fejlede" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Billede blev uploadet" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Noter er gemt" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Kunne ikke gemme noter" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Kunne Ikke Gemme Noter" @@ -1480,15 +1480,15 @@ msgstr "Kunne Ikke Gemme Noter" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Gem noter" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Luk redigering" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Aktiver Redigering" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plugins" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Vælg pakke" msgid "{0} icons" msgstr "{0} ikoner" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Indlæser" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Ingen resultater fundet" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "Data er blevet importeret" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Luk" @@ -2912,15 +2921,19 @@ msgstr "Vedhæftninger" msgid "Notes" msgstr "Noter" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Plugin Leveret" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Skjul paneler" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Vis paneler" @@ -3180,7 +3193,7 @@ msgstr "Kategori" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Serienummer" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Om InvenTree projektet" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Erstat Del" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Rediger stukliste erstatninger" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Tilføj Erstatning" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Erstatning tilføjet" @@ -4555,7 +4568,7 @@ msgstr "Antal til fuldførelse" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Allokere" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Kilde Lokation" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Vælg kildelokationen for lagertildelingen" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Tildel lager" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Lagervarer tildelt" @@ -4717,10 +4730,10 @@ msgstr "Fuldt forbrugte" msgid "Consumed" msgstr "Forbrugt" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Vælg projektkode for dette linjeelement" @@ -4770,27 +4783,27 @@ msgstr "Abonner på notifikationer for denne kategori" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Vælg lokation" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Modtaget lager placering valgt" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Standard lokation valgt" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Standard lokation valgt" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Indstil Lokation" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Tildel Batchkode" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Indstil Lokation" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Tildel Batchkode" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "Tildel Serienumre" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Sæt Udløbsdato" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Juster Emballering" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Ændre Status" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Tilføj Note" @@ -4845,19 +4858,19 @@ msgstr "Tilføj Note" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Gem på standard lokation" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "Batch kode" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Indtast batch kode for modtagne varer" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Serienummer" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Indtast serienumre for modtagne elementer" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Udløbsdato" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Indtast en udløbsdato for modtagne vare" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Indtast en udløbsdato for modtagne vare" msgid "Packaging" msgstr "Emballage" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Note" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Modtaget" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Modtag linje element" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Varer modtaget" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Vare modtaget på lager" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Tjek Forsendelse" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Markering af forsendelsen indikerer, at du har kontrolleret, at alle varer i denne forsendelse er korrekte" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Forsendelse markeret som kontrolleret" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Fjern Markering Af Forsendelse" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Mærkning af forsendelsen som ikke-kontrolleret viser, at forsendelsen kræver yderligere verifikation" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Forsendelse markeret som ikke-kontrolleret" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Efterlad blank for at bruge ordreadressen" @@ -10361,10 +10374,6 @@ msgstr "Ingen vedhæftning fundet" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Model" @@ -10456,59 +10465,59 @@ msgstr "Opret ny parameter" msgid "Import parameters from a file" msgstr "Importer parametre fra en fil" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Tilføj Parameter Skabelon" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Dupliker Parameter Skabelon" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Slet Parameter Skabelon" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Rediger Parameter Skabelon" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Tjekboks" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Vis tjekboks skabeloner" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Vis skabeloner med valgmuligheder" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Vis skabeloner med enheder" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "Vis aktiverede skabeloner" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/de/messages.po b/src/frontend/src/locales/de/messages.po index d01993afaf..fbe8df08b6 100644 --- a/src/frontend/src/locales/de/messages.po +++ b/src/frontend/src/locales/de/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: de\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: German\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Abbrechen" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Aktionen" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nein" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Teil-Kategorien" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Barcode-Daten eingeben" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Barcode scannen" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Der Barcode stimmt nicht mit dem erwarteten Modelltyp überein" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Die Verknüpfung zum zugehörigen Barcode wird entfernt" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Verknüpfung des Barcodes aufheben" @@ -1456,23 +1456,23 @@ msgstr "Bild wurde erfolgreich heruntergeladen" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Das Bild konnte nicht hochgeladen werden" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Bild erfolgreich hochgeladen" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notizen erfolgreich gespeichert" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Notiz konnte nicht gespeichert werden" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Fehler beim Speichern der Notizen" @@ -1480,15 +1480,15 @@ msgstr "Fehler beim Speichern der Notizen" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Notizen speichern" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Editor schließen" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Bearbeiten aktivieren" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plugins" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Packung auswählen" msgid "{0} icons" msgstr "{0} Symbole" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Wird geladen" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Keine Ergebnisse gefunden" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Artikel" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "modelRenderer Eintrag für Tabellen erforderlich" @@ -2181,7 +2190,7 @@ msgstr "Daten wurden erfolgreich importiert" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Schließen" @@ -2912,15 +2921,19 @@ msgstr "Anhänge" msgid "Notes" msgstr "Notizen" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Verfügbares Plugin" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Panels einklappen" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Panels aufklappen" @@ -3180,7 +3193,7 @@ msgstr "Kategorie" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Seriennummer" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Über das InvenTree-Projekt" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Ersatz-Teil" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "BOM Ersatz-Teile bearbeiten" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Ersatz-Teil hinzufügen" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Ersatz-Teil hinzugefügt" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Zugewiesen" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Quell Lagerort" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Bestand zuweisen" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "komplett verbraucht" msgid "Consumed" msgstr "verbraucht" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "Benachrichtigungen für diese Kategorie abonnieren" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Lagerort wählen" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Teile-Zielort ausgewählt" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Standard-Lagerort der Teile-Kategorie ausgewählt" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Lagerort zuvor empfangener Artikel ausgewählt" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Standard-Lagerort ausgewählt" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Standard-Lagerort ausgewählt" msgid "Virtual Part" msgstr "Virtuelles Teil" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Lagerort festlegen" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Losnummer zuweisen" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Lagerort festlegen" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Losnummer zuweisen" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Ablaufdatum festlegen" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Verpackung anpassen" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Status ändern" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Notiz hinzufügen" @@ -4845,19 +4858,19 @@ msgstr "Notiz hinzufügen" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Am Standard-Lagerort einbuchen" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Bei bereits vorhandenen Lagerbestand einbuchen" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Bei bereits vorhandenen Lagerbestand einbuchen" msgid "Batch Code" msgstr "Losnummer" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Losnummern eingeben für empfangene Gegenstände" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Seriennummern" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Seriennummern eingeben für empfangene Gegenstände" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Ablaufdatum" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Ablaufdatum eingeben für empfangene Gegenstände" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Ablaufdatum eingeben für empfangene Gegenstände" msgid "Packaging" msgstr "Verpackung" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Notiz" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Erhalten" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Positionen empfangen" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Empfangene Gegenstände" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "Abschließen der Lieferung" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "Lieferung erfolgreich abgeschlossen" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Lieferung fertigstellen" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "Keine Anlagen gefunden" msgid "Drag attachment file here to upload" msgstr "Datei zum Hochladen hierher ziehen" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Artikel" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Modell" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Parametervorlage hinzufügen" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Parametervorlage löschen" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Parametervorlage bearbeiten" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Checkbox" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Checkbox-Vorlagen anzeigen" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Hat Auswahlen" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Vorlagen mit Auswahlen anzeigen" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Hat Einheiten" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Vorlagen mit Einheiten anzeigen" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Modelltyp" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/el/messages.po b/src/frontend/src/locales/el/messages.po index 32b98dc215..859b6fec28 100644 --- a/src/frontend/src/locales/el/messages.po +++ b/src/frontend/src/locales/el/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: el\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Greek\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Ακύρωση" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Ενέργειες" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Όχι" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Κατηγορίες Προϊόντων" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Εισάγετε δεδομένα γραμμοκώδικα" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Σάρωση Γραμμοκώδικα" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Ο γραμμοκώδικας δεν ταιριάζει με τον αναμενόμενο τύπο μοντέλου" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Αυτό θα αφαιρέσει τη σύνδεση με τον σχε #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Αποσύνδεση Γραμμοκώδικα" @@ -1456,23 +1456,23 @@ msgstr "Η εικόνα λήφθηκε με επιτυχία" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Αποτυχία μεταφόρτωσης εικόνας" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Η εικόνα μεταφορτώθηκε με επιτυχία" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Οι σημειώσεις αποθηκεύτηκαν με επιτυχία" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Αποτυχία αποθήκευσης σημειώσεων" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Σφάλμα αποθήκευσης σημειώσεων" @@ -1480,15 +1480,15 @@ msgstr "Σφάλμα αποθήκευσης σημειώσεων" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Αποθήκευση σημειώσεων" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Κλείσιμο επεξεργαστή" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Ενεργοποίηση επεξεργασίας" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plugins" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Επιλέξτε πακέτο" msgid "{0} icons" msgstr "{0} εικονίδια" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Φόρτωση" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Δεν βρέθηκαν αποτελέσματα" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Προϊόν" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Απαιτείται modelRenderer για πίνακες" @@ -2181,7 +2190,7 @@ msgstr "Τα δεδομένα εισήχθησαν με επιτυχία" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Κλείσιμο" @@ -2912,15 +2921,19 @@ msgstr "Συνημμένα" msgid "Notes" msgstr "Σημειώσεις" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Παρέχεται από πρόσθετο" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Σύμπτυξη πλαισίων" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Ανάπτυξη πλαισίων" @@ -3180,7 +3193,7 @@ msgstr "Κατηγορία" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Σειριακός αριθμός" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Σχετικά με το έργο InvenTree" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Προϊόν υποκατάστασης" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Επεξεργασία υποκαταστάτων BOM" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Προσθήκη υποκατάστατου" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Το υποκατάστατο προστέθηκε" @@ -4555,7 +4568,7 @@ msgstr "Ποσότητα προς ολοκλήρωση" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Δεσμευμένο" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Τοποθεσία προέλευσης" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Επιλέξτε την τοποθεσία προέλευσης για τη δέσμευση αποθέματος" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Δέσμευση αποθέματος" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Τα είδη αποθέματος δεσμεύτηκαν" @@ -4717,10 +4730,10 @@ msgstr "Πλήρως καταναλωμένο" msgid "Consumed" msgstr "Καταναλωμένο" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Επιλέξτε κωδικό έργου για αυτό το Προϊόν" @@ -4770,27 +4783,27 @@ msgstr "Εγγραφή σε ειδοποιήσεις για αυτή την κα #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Επιλογή τοποθεσίας" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Επιλέχθηκε προορισμός Προϊόντος" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Επιλέχθηκε η προεπιλεγμένη τοποθεσία της κατηγορίας" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Επιλέχθηκε τοποθεσία παραληφθέντος αποθέματος" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Επιλέχθηκε η προεπιλεγμένη τοποθεσία" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Επιλέχθηκε η προεπιλεγμένη τοποθεσία" msgid "Virtual Part" msgstr "Εικονικό Προϊόν" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Ορισμός τοποθεσίας" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Ανάθεση κωδικού παρτίδας" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Ορισμός τοποθεσίας" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Ανάθεση κωδικού παρτίδας" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Ορισμός ημερομηνίας λήξης" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Προσαρμογή συσκευασίας" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Αλλαγή κατάστασης" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Προσθήκη σημείωσης" @@ -4845,19 +4858,19 @@ msgstr "Προσθήκη σημείωσης" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Αποθήκευση στην προεπιλεγμένη τοποθεσία" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Αποθήκευση στον προορισμό της γραμμής " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Αποθήκευση με ήδη παραληφθέν απόθεμα" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Αποθήκευση με ήδη παραληφθέν απόθεμα" msgid "Batch Code" msgstr "Κωδικός παρτίδας" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα παραληφθέντα είδη" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα παραληφθέντα είδη" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Ημερομηνία λήξης" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα παραληφθέντα είδη" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Εισαγάγετε ημερομηνία λήξης για τα παρ msgid "Packaging" msgstr "Συσκευασία" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Σημείωση" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Παραλήφθηκε" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Παραλαβή Προϊόντων γραμμής" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Ελήφθησαν τα είδη" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Το είδος παραλήφθηκε στην αποθήκη" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Έλεγχος Αποστολής" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Η σήμανση της αποστολής ως ελεγμένη δηλώνει ότι έχετε επαληθεύσει πως όλα τα είδη στην αποστολή είναι σωστά" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Η αποστολή σημειώθηκε ως ελεγμένη" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Αναίρεση Ελέγχου Αποστολής" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Η σήμανση της αποστολής ως μη ελεγμένη δηλώνει ότι απαιτείται επιπλέον έλεγχος" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Η αποστολή σημειώθηκε ως μη ελεγμένη" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Ολοκλήρωση Αποστολής" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Αφήστε κενό για χρήση της διεύθυνσης της παραγγελίας" @@ -10361,10 +10374,6 @@ msgstr "Δεν βρέθηκαν συνημμένα" msgid "Drag attachment file here to upload" msgstr "Σύρετε το συνημμένο εδώ για μεταφόρτωση" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Προϊόν" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Μοντέλο" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Προσθήκη προτύπου παραμέτρου" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Αντιγραφή προτύπου παραμέτρου" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Διαγραφή προτύπου παραμέτρου" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Επεξεργασία προτύπου παραμέτρου" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Checkbox" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Εμφάνιση προτύπων checkbox" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Έχει επιλογές" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Εμφάνιση προτύπων με επιλογές" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Έχει μονάδες" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Εμφάνιση προτύπων με μονάδες" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Τύπος μοντέλου" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/en/messages.po b/src/frontend/src/locales/en/messages.po index 8e43a80a8e..c17b035c30 100644 --- a/src/frontend/src/locales/en/messages.po +++ b/src/frontend/src/locales/en/messages.po @@ -67,7 +67,7 @@ msgstr "Cancel" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -79,7 +79,7 @@ msgid "Actions" msgstr "Actions" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -121,9 +121,9 @@ msgstr "No" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -246,7 +246,7 @@ msgstr "Part Categories" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -573,7 +573,7 @@ msgstr "Selection Entries" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -587,7 +587,7 @@ msgstr "Selection Entries" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -729,8 +729,8 @@ msgstr "Enter barcode data" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Scan Barcode" @@ -743,8 +743,8 @@ msgid "Barcode does not match the expected model type" msgstr "Barcode does not match the expected model type" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -815,7 +815,7 @@ msgstr "This will remove the link to the associated barcode" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Unlink Barcode" @@ -1451,23 +1451,23 @@ msgstr "Image downloaded successfully" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Image upload failed" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Image uploaded successfully" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notes saved successfully" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Failed to save notes" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Error Saving Notes" @@ -1475,15 +1475,15 @@ msgstr "Error Saving Notes" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Save Notes" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Close Editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Enable Editing" @@ -1930,8 +1930,8 @@ msgid "Plugins" msgstr "Plugins" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -1996,16 +1996,25 @@ msgstr "Select pack" msgid "{0} icons" msgstr "{0} icons" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Loading" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "No results found" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Item" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "Create New {model}" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "modelRenderer entry required for tables" @@ -2176,7 +2185,7 @@ msgstr "Data has been imported successfully" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Close" @@ -2907,15 +2916,19 @@ msgstr "Attachments" msgid "Notes" msgstr "Notes" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Plugin Provided" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "You have unsaved changes, are you sure you want to navigate away from this panel?" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Collapse panels" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Expand panels" @@ -3175,7 +3188,7 @@ msgstr "Category" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3208,9 +3221,9 @@ msgstr "Serial Number" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4508,19 +4521,19 @@ msgstr "About the InvenTree Project" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Substitute Part" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Edit BOM Substitutes" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Add Substitute" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Substitute added" @@ -4550,7 +4563,7 @@ msgstr "Quantity to Complete" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4644,7 +4657,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4654,19 +4667,19 @@ msgid "Allocated" msgstr "Allocated" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Source Location" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Select the source location for the stock allocation" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4677,7 +4690,7 @@ msgid "Allocate Stock" msgstr "Allocate Stock" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Stock items allocated" @@ -4712,10 +4725,10 @@ msgstr "Fully consumed" msgid "Consumed" msgstr "Consumed" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Select project code for this line item" @@ -4765,27 +4778,27 @@ msgstr "Subscribe to notifications for this category" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Choose Location" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Item Destination selected" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Part category default location selected" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Received stock location selected" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Default location selected" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4793,7 +4806,7 @@ msgstr "Default location selected" msgid "Virtual Part" msgstr "Virtual Part" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "This part is virtual, no physical stock will be received." @@ -4801,38 +4814,38 @@ msgstr "This part is virtual, no physical stock will be received." #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Set Location" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Assign Batch Code" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Set Location" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Assign Batch Code" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "Assign Serial Numbers" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Set Expiry Date" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Adjust Packaging" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Change Status" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Add Note" @@ -4840,19 +4853,19 @@ msgstr "Add Note" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Store at default location" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Store at line item destination " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Store with already received stock" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4865,30 +4878,30 @@ msgstr "Store with already received stock" msgid "Batch Code" msgstr "Batch Code" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Enter batch code for received items" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Serial Numbers" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Enter serial numbers for received items" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Expiry Date" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Enter an expiry date for received items" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4897,19 +4910,19 @@ msgstr "Enter an expiry date for received items" msgid "Packaging" msgstr "Packaging" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Note" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4917,11 +4930,11 @@ msgstr "SKU" msgid "Received" msgstr "Received" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Receive Line Items" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Items received" @@ -4934,52 +4947,52 @@ msgid "Item received into stock" msgstr "Item received into stock" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "Price based on part and quantity differs{0}" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Check Shipment" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Shipment marked as checked" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Uncheck Shipment" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Marking the shipment as unchecked indicates that the shipment requires further verification" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Shipment marked as unchecked" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "Completing shipment" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "Shipment completed successfully" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Complete Shipment" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Leave blank to use the order address" @@ -10356,10 +10369,6 @@ msgstr "No attachments found" msgid "Drag attachment file here to upload" msgstr "Drag attachment file here to upload" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Item" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Model" @@ -10451,59 +10460,59 @@ msgstr "Create a new parameter" msgid "Import parameters from a file" msgstr "Import parameters from a file" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Add Parameter Template" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Duplicate Parameter Template" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Delete Parameter Template" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Edit Parameter Template" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Checkbox" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Show checkbox templates" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Has choices" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Show templates with choices" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Has Units" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Show templates with units" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "Show enabled templates" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Model Type" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "Filter by model type" diff --git a/src/frontend/src/locales/es/messages.po b/src/frontend/src/locales/es/messages.po index dfaa639e7e..0e11f177a8 100644 --- a/src/frontend/src/locales/es/messages.po +++ b/src/frontend/src/locales/es/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Cancelar" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Acciones" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "No" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Categorías de Pieza" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Introduce datos de código de barras" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Escanear código de barras" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Esto eliminará el enlace al código de barras asociado" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Desvincular Código de Barras" @@ -1456,23 +1456,23 @@ msgstr "Imagen descargada correctamente" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Error al cargar la imagen" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Imagen cargada con éxito" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notas guardadas correctamente" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Error al guardar las notas" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Error al guardar notas" @@ -1480,15 +1480,15 @@ msgstr "Error al guardar notas" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Guardar notas" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Cerrar editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Habilitar la edición" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Complementos" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Seleccionar paquete" msgid "{0} icons" msgstr "Iconos {0}" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Cargando" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "No hay resultados" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Elemento" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "entrada modelRenderer requerida para tablas" @@ -2181,7 +2190,7 @@ msgstr "Los datos se han importado satisfactoriamente" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Cerrar" @@ -2912,15 +2921,19 @@ msgstr "Archivos adjuntos" msgid "Notes" msgstr "Notas" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Categoría" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Número de serie" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Acerca del proyecto InvenTree" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Asignado" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Ubicación origen" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Seleccione la ubicación de origen para la asignación de stock" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Asignar Stock" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Artículos de stock seleccionados" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "Consumido" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "Suscribirse a las notificaciones de esta categoría" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Elegir ubicación" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Destino de artículo seleccionado" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Ubicación por defecto de la categoría de pieza eleccionada" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Seleccionada ubicación de existencias recibidas" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Ubicación por defecto seleccionada" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Ubicación por defecto seleccionada" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Establecer ubicación" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Asignar código de lote" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Establecer ubicación" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Asignar código de lote" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Establecer Fecha de Vencimiento" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Ajustar empaquetado" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Cambiar Estado" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Añadir Nota" @@ -4845,19 +4858,19 @@ msgstr "Añadir Nota" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Guardar en la ubicación predeterminada" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Guardar con cantidad ya recibida" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Guardar con cantidad ya recibida" msgid "Batch Code" msgstr "Código de lote" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Introduzca el código de lote para los artículos recibidos" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Números de serie" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Introduzca números de serie para los elementos recibidos" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "Empaquetado" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Nota" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "Número De Referencia" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "Número De Referencia" msgid "Received" msgstr "Recibido" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Recibir ítem de línea" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Artículos Recibidos" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Artículo recibido en existencias" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "No se encontraron adjuntos" msgid "Drag attachment file here to upload" msgstr "Arrastra el archivo adjunto aquí para subirlo" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Elemento" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/es_MX/messages.po b/src/frontend/src/locales/es_MX/messages.po index 0fa36c210f..ff14ed2c51 100644 --- a/src/frontend/src/locales/es_MX/messages.po +++ b/src/frontend/src/locales/es_MX/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: es_MX\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Cancelar" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Acciones" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "No" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Categorías de Pieza" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Introduce datos del código de barras" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Escanear código de barras" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Código de barras no coincide con el modelo esperado" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Esto eliminará el enlace al código de barras asociado" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Desvincular Código de Barras" @@ -1456,23 +1456,23 @@ msgstr "Imagen descargada correctamente" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Error al cargar la imagen" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Imagen cargada con éxito" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notas guardadas correctamente" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Error al guardar las notas" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Error al guardar notas" @@ -1480,15 +1480,15 @@ msgstr "Error al guardar notas" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Guardar notas" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Cerrar editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Habilitar la edición" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Complementos" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Seleccionar paquete" msgid "{0} icons" msgstr "Iconos {0}" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Cargando" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "No hay resultados" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Artículo" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "entrada de modelRenderer requerida para tablas" @@ -2181,7 +2190,7 @@ msgstr "Los datos se han importado satisfactoriamente" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Cerrar" @@ -2912,15 +2921,19 @@ msgstr "Archivos adjuntos" msgid "Notes" msgstr "Notas" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Categoría" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Número de serie" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Acerca del proyecto InvenTree" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Asignado" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Ubicación origen" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Seleccione la ubicación de origen para la asignación de stock" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Stock Asignado" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Artículos de stock seleccionados" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "Consumido" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "Suscribirse a las notificaciones de esta categoría" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Elegir ubicación" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Destino de artículo seleccionado" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Ubicación por defecto de la categoría de pieza eleccionada" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Seleccionada ubicación de existencias recibidas" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Ubicación por defecto seleccionada" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Ubicación por defecto seleccionada" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Establecer ubicación" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Asignar código de lote" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Establecer ubicación" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Asignar código de lote" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Establecer la fecha de caducidad" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Ajustar empaquetado" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Cambiar Estado" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Añadir Nota" @@ -4845,19 +4858,19 @@ msgstr "Añadir Nota" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Guardar en la ubicación predeterminada" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Guardar con cantidad ya recibida" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Guardar con cantidad ya recibida" msgid "Batch Code" msgstr "Código de lote" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Introduzca el código de lote para los artículos recibidos" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Números de serie" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Introduzca números de serie para los elementos recibidos" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Fecha de caducidad" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Introduzca una fecha de caducidad para los artículos recibidos" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Introduzca una fecha de caducidad para los artículos recibidos" msgid "Packaging" msgstr "Empaquetado" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Nota" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Recibido" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Recibir partidas" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Artículos recibidos" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Artículo recibido en existencias" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Artículo" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Tiene opciones" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Mostrar plantillas con opciones" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Tiene Unidades" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Mostrar plantillas con unidades" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/et/messages.po b/src/frontend/src/locales/et/messages.po index 871cd96503..2aec8662dc 100644 --- a/src/frontend/src/locales/et/messages.po +++ b/src/frontend/src/locales/et/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: et\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Tühista" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Toimingud" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Ei" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Osa kategooriad" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "See eemaldab lingi seotud vöötikoodile" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Linki ribakood" @@ -1456,23 +1456,23 @@ msgstr "Pilt on alla laetud" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Pildi üleslaadimine ebaõnnestus" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Pildifail üles laaditud" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Märkmed salvestati edukalt" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Märkmete salvestamine ebaõnnestus" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Viga märkmete salvestamisel" @@ -1480,15 +1480,15 @@ msgstr "Viga märkmete salvestamisel" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Salvesta märkmed" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Sulge redaktor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Luba Kohaldada" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Pluginad" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Vali pakk" msgid "{0} icons" msgstr "{0} ikoonid" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Laadimine" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Tulemusi pole" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "modelRenderer sissekanne on tabelite jaoks kohustuslik" @@ -2181,7 +2190,7 @@ msgstr "Andmed on edukalt importitud" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Sulge" @@ -2912,15 +2921,19 @@ msgstr "Manused" msgid "Notes" msgstr "Märkmed" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Kategooria" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Seerianumber" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Eraldatud" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Lähtekoht" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Valige laoseisu eraldamise alguskoht" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Selle plugina jaoks ei ole sisu esitatud" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Vali asukoht" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Osakategooria vaikimisi asukoht valitud" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Kättesaadud varude asukoha valitud" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "Virtuaalne osa" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Määra asukoht" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Määra asukoht" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Muuda staatust" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Lisa märkus" @@ -4845,19 +4858,19 @@ msgstr "Lisa märkus" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Pood juba saadud varudega" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Pood juba saadud varudega" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Seerianumbrid" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Sisesta saadus ühikute seerianumbrid" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Aegumise kuupäev" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Sisesta saabunud ühikute aegumise kuupäevad" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Sisesta saabunud ühikute aegumise kuupäevad" msgid "Packaging" msgstr "Pakkimine" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Märkus" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "Tootekood" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "Tootekood" msgid "Received" msgstr "Saabunud" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Üksus on laoseisu vastu võetud" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "Lohistage manusefail siia üles laadimiseks" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "Loo uus parameeter" msgid "Import parameters from a file" msgstr "Impordi parameetrid failist" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Lisa parameetri mall" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Kustuta parameetrite mall" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Muuda parameetri mall" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Märkekast" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Näita märkeruutude malle" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Valikutega" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Kuva valikuga mallid" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Näita malle ühikutega" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Mudeli liik" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "Filtreeri mudeli liik" diff --git a/src/frontend/src/locales/fa/messages.po b/src/frontend/src/locales/fa/messages.po index 73b6ef9b78..f04849ce95 100644 --- a/src/frontend/src/locales/fa/messages.po +++ b/src/frontend/src/locales/fa/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fa\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Persian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/fi/messages.po b/src/frontend/src/locales/fi/messages.po index 0b5e1b175f..9138c5e718 100644 --- a/src/frontend/src/locales/fi/messages.po +++ b/src/frontend/src/locales/fi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/fr/messages.po b/src/frontend/src/locales/fr/messages.po index 7c71f9f2dd..22b3a77e88 100644 --- a/src/frontend/src/locales/fr/messages.po +++ b/src/frontend/src/locales/fr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -72,7 +72,7 @@ msgstr "Annuler" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Actions" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Non" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Catégories de composants" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Saisissez les données du code-barres" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Scanner le code-barres" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Le Code-barre ne correspond pas au type de modèle attendu" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Ceci supprimera le lien vers le code-barres associé" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Délier le code-barre" @@ -1456,23 +1456,23 @@ msgstr "Image téléchargée avec succès" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Le téléchargement de l'image a échoué" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Image téléchargée avec succès" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notes enregistrées avec succès" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Échec de l'enregistrement des notes" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Erreur lors de l'enregistrement des notes" @@ -1480,15 +1480,15 @@ msgstr "Erreur lors de l'enregistrement des notes" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Enregistrer les notes" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Fermer l'éditeur" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Activer le mode édition" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Extensions" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Sélectionnez le pack" msgid "{0} icons" msgstr "Icônes {0}" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Chargement" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Aucun résultat trouvé" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Élément" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Entrée \"modelRenderer\" requise pour les tables" @@ -2181,7 +2190,7 @@ msgstr "Les données on était correctement importés" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Fermer" @@ -2912,15 +2921,19 @@ msgstr "Fichiers joints" msgid "Notes" msgstr "Notes" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Plugin fourni" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Replier les panneaux" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Déplier les panneaux" @@ -3180,7 +3193,7 @@ msgstr "Catégorie" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Numéro de série" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "A propos du projet InvenTree" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Substituer une pièce" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Éditer les alternatives de la nomenclature" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Ajouter une alternative" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Alternative ajoutée" @@ -4555,7 +4568,7 @@ msgstr "Quantité à allouer" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Allouée" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Emplacement d'origine" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Sélectionnez l'emplacement de la source pour l'allocation du stock" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Stock alloué" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Éléments du stock alloués" @@ -4717,10 +4730,10 @@ msgstr "Complétement consommé" msgid "Consumed" msgstr "Consommé" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "S'abonner aux notifications pour cette catégorie" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Choisir l'emplacement" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Destination de l'élément sélectionné" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Emplacement par défaut de la catégorie" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Emplacement de stock reçu" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Emplacement par défaut" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Emplacement par défaut" msgid "Virtual Part" msgstr "Pièce virtuelle" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Définir l'emplacement" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Attribuer un code de lot" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Définir l'emplacement" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Attribuer un code de lot" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "Assigner des numéros de série" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Indiquer une date d'expiration" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Ajuster le conditionnement" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Changer le statut" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Ajouter une note" @@ -4845,19 +4858,19 @@ msgstr "Ajouter une note" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Stocker à l'emplacement par défaut" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Stocker à la destination de l'article " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Stocker avec le stock déjà reçu" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Stocker avec le stock déjà reçu" msgid "Batch Code" msgstr "Barre-code" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Saisir le code de lot pour les articles reçus" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Numéros de Série" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Saisir les numéros de série des articles reçus" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Date d'expiration" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Entrer une date d'expiration pour les articles reçus" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Entrer une date d'expiration pour les articles reçus" msgid "Packaging" msgstr "Conditionnement" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Note" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Réceptionnée" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Articles reçus" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Articles reçus" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Article reçu en stock" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Vérifier l'expédition" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Marquer l'expédition comme étant vérifiée indique que vous avez vérifié que tous les articles inclus dans cet envoi sont corrects" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Expédition marquée comme étant vérifiée" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Ne pas valider l'expédition" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Marquer l'expédition comme non validée indique que l'envoi nécessite une vérification supplémentaire" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Envoi marqué comme non validé" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Compléter l'envoi" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Laisser vide pour utiliser l'adresse de commande" @@ -10361,10 +10374,6 @@ msgstr "Aucune pièce jointe n'a été trouvé" msgid "Drag attachment file here to upload" msgstr "Faites glisser le fichier joint ici pour le télécharger" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Élément" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Modèle" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Ajouter un modèle de paramètre" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Dupliquer le paramètre de modèle" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Supprimer un modèle de paramètre" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Modifier le modèle de paramètre" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Case à cocher" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Afficher le modèle de cases à cocher" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "A des choix" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Afficher les modèles avec choix" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "A des unités" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Afficher les modèles avec les unités" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Type de modèle" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/he/messages.po b/src/frontend/src/locales/he/messages.po index 57af40371c..32f5d5a925 100644 --- a/src/frontend/src/locales/he/messages.po +++ b/src/frontend/src/locales/he/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: he\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" @@ -72,7 +72,7 @@ msgstr "בטל" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "לא" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "קטגוריית פריטים" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "פעולה זו תסיר את הקישור לברקוד המשויך" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "בטל קישור של ברקוד" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "העלאת התמונה נכשלה" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "ההערות נשמרו בהצלחה" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "שמירת ההערות נכשלה" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "שמור הערות" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "תוספים" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "בחר חבילה" msgid "{0} icons" msgstr "{0} סמלים" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "טוען" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "לא נמצאו תוצאות" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "הנתונים יובאו בהצלחה" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "סגור" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "מספר סידורי" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/hi/messages.po b/src/frontend/src/locales/hi/messages.po index c508a3360f..9e6e587f3d 100644 --- a/src/frontend/src/locales/hi/messages.po +++ b/src/frontend/src/locales/hi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: hi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/hu/messages.po b/src/frontend/src/locales/hu/messages.po index 6f7bdecd98..ab192a2f62 100644 --- a/src/frontend/src/locales/hu/messages.po +++ b/src/frontend/src/locales/hu/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: hu\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Mégsem" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Műveletek" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nem" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Alkatrész kategóriák" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Add meg a vonalkódot" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Vonalkód beolvasás" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "A vonalkód nem egyezik a várt model típussal" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "A hozzárendelt vonalkód kapcsolat megszüntetése" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Vonalkód leválasztása" @@ -1456,23 +1456,23 @@ msgstr "A kép sikeresen letöltve" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Képfeltöltés sikertelen" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "A kép sikeresen feltöltve" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Jegyzet mentés sikeres" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Megjegyzések mentése nem sikerült" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Hiba a Jegyzet Mentésekor" @@ -1480,15 +1480,15 @@ msgstr "Hiba a Jegyzet Mentésekor" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Jegyzet Mentése" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Szerkesztő bezárása" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Szerkesztés engedélyezése" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Pluginok" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Csomag választás" msgid "{0} icons" msgstr "{0} db" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Betöltés" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Nincs találat" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Tétel" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Táblákhoz modelRenderer példány szükséges" @@ -2181,7 +2190,7 @@ msgstr "Az adatok sikeresen importálva" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Bezárás" @@ -2912,15 +2921,19 @@ msgstr "Mellékletek" msgid "Notes" msgstr "Megjegyzések" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Plugin nyújtotta" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Panelek becsukása" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Panelek kinyitása" @@ -3180,7 +3193,7 @@ msgstr "Kategória" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Sorozatszám" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Az InvenTree projektről" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Helyettesítő alkatrész" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Anyagjegyzék helyettesítők szerkesztése" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Helyettesítő hozzáadása" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Helyettesítő hozzáadva" @@ -4555,7 +4568,7 @@ msgstr "Teljesítendő mennyiség" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Lefoglalva" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Készlet helye" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "A készlet hozzárendelés forrás készlethelyének kiválasztása" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Készlet foglalása" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Készlet lefoglalva" @@ -4717,10 +4730,10 @@ msgstr "Teljesen elfogyasztva" msgid "Consumed" msgstr "Elhasználva" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Projekt kód kiválasztása ehhez a sortételhez" @@ -4770,27 +4783,27 @@ msgstr "Feliratkozás az értesítésekre ehhez a kategóriához" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Hely kiválasztása" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Tétel cél kiválasztva" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Alkatrész kategória alapértelmezett készlethelye kiválasztva" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Fogadott készlet készlethelye kiválasztva" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Alapértelmezett készlethely kiválasztva" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Alapértelmezett készlethely kiválasztva" msgid "Virtual Part" msgstr "Virtuális alkatrész" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Helyszín beállítása" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Gyártási szám hozzárendelése" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Helyszín beállítása" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Gyártási szám hozzárendelése" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "Sorozatszám hozzárendelése" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Lejárati dátum beállítása" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Csomagolás módosítása" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Állapot megváltoztatása" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Megjegyzés hozzáadása" @@ -4845,19 +4858,19 @@ msgstr "Megjegyzés hozzáadása" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Alapértelmezett helyre tárolás" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Tárolás a sortétel célhelyén" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Tárolás a már megérkezett készlettel" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Tárolás a már megérkezett készlettel" msgid "Batch Code" msgstr "Batch kód" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Gyártási szám megadása a fogadott tételekhez" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Sorozatszámok megadása a fogadott tételekhez" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Lejárati dátum" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Lejárati dátum megadása a fogadott tételekhez" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Lejárati dátum megadása a fogadott tételekhez" msgid "Packaging" msgstr "Csomagolás" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Megjegyzés" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU (leltári azonosító)" msgid "Received" msgstr "Fogadott" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Sortételek fogadása" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Tételek beérkeztek" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Tétel beérkezett a készletbe" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "Az alkatrész és mennyiség alapján számított ár eltér{0}" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Szállítmány ellenőrzése" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "A szállítmány ellenőrzöttként történő megjelölése azt jelzi, hogy ellenőrizte, hogy a szállítmányban található összes tétel helyes" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Szállítmány ellenőrzöttként megjelölve" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Szállítmány ellenőrzés visszavonása" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "A szállítmány ellenőrizetlenként történő megjelölése azt jelzi, hogy a szállítmány további ellenőrzést igényel" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Szállítmány ellenőrizetlenként megjelölve" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "Szállítmány lezárása" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "Szállítmány sikeresen lezárva" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Szállítmány befejezése" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Hagyja üresen a rendelési cím használatához" @@ -10361,10 +10374,6 @@ msgstr "Nem találhatók mellékletek" msgid "Drag attachment file here to upload" msgstr "Húzza ide a melléklet fájlt a feltöltéshez" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Tétel" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Model" @@ -10456,59 +10465,59 @@ msgstr "Új paraméter létrehozása" msgid "Import parameters from a file" msgstr "Paraméterek importálása fájlból" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Paraméter sablon létrehozás" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Paraméter sablon másolása" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Paraméter sablon törlés" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Alkatrész paraméter sablon szerkesztés" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Jelölőnégyzet sablonok megjelenítése" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Vannak lehetőségei" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Választási lehetőségekkel rendelkező sablonok megjelenítése" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Van mértékegysége" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Mértékegységgel rendelkező sablonok megjelenítése" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "Engedélyezett sablonok megjelenítése" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Modell típusa" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "Szűrés modell típus szerint" diff --git a/src/frontend/src/locales/id/messages.po b/src/frontend/src/locales/id/messages.po index 053d2ae916..09891258d5 100644 --- a/src/frontend/src/locales/id/messages.po +++ b/src/frontend/src/locales/id/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: id\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -72,7 +72,7 @@ msgstr "Batal" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Tidak" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Pengunggahan gambar gagal" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Catatan berhasil tersimpan" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Gagal untuk menyimpan catatan" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Simpan catatan" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "{0} icon" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Memuat" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Tidak ada hasil yang ditemukan" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Tutup" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Nomor Seri" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Atur Lokasi" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Atur Lokasi" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Tambah Catatan" @@ -4845,19 +4858,19 @@ msgstr "Tambah Catatan" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Nomor Seri" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Catatan" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "Telah diterima" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/it/messages.po b/src/frontend/src/locales/it/messages.po index 94ecc8f833..80d133fbf8 100644 --- a/src/frontend/src/locales/it/messages.po +++ b/src/frontend/src/locales/it/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: it\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Italian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Annulla" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Azioni" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "No" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Categorie Articolo" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Inserire il codice a barre" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Scansiona codice a barre" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Il codice a barre non corrisponde al tipo di modello previsto" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Questo rimuoverà il collegamento al codice a barre associato" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Scollega Codice a Barre" @@ -1456,23 +1456,23 @@ msgstr "Immagine scaricata con successo" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Il caricamento della foto è fallito" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Immagine caricata con successo" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Note salvate con successo" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Salvataggio delle note non riuscito" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Errore Nel Salvare Le Note" @@ -1480,15 +1480,15 @@ msgstr "Errore Nel Salvare Le Note" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Salva note" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Chiudere l'editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Abilita Modifica" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plugin" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Seleziona la confezione" msgid "{0} icons" msgstr "{0} icone" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Caricamento" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Nessun risultato trovato" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Articolo" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Voce ModelRenderer necessaria per le tabelle" @@ -2181,7 +2190,7 @@ msgstr "I dati sono stati importati correttamente" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Chiudi" @@ -2912,15 +2921,19 @@ msgstr "Allegati" msgid "Notes" msgstr "Note" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Plugin Fornito" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Comprimi pannelli" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Espandi pannelli" @@ -3180,7 +3193,7 @@ msgstr "Categoria" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Numero Seriale" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "A proposito del progetto InvenTree" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Articolo Sostituivo" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Modifica Sostitutivi della Distinta Base" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Aggiungi Sostitutivo" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Sostitutivo aggiunto" @@ -4555,7 +4568,7 @@ msgstr "Quantità da completare" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Allocato" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Posizione sorgente" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Selezionare la posizione di origine per l'assegnazione dello stock" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Assegna Scorte" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Articoli di stock assegnati" @@ -4717,10 +4730,10 @@ msgstr "Completamente consumato" msgid "Consumed" msgstr "Utilizzato" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Seleziona il codice progetto per questa voce di riga" @@ -4770,27 +4783,27 @@ msgstr "Sottoscrivi notifiche per questa categoria" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Scegliere la posizione" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Destinazione oggetto selezionata" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Posizione predefinita della categoria parte selezionata" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Posizione stock ricevuto selezionata" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Posizione predefinita selezionata" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Posizione predefinita selezionata" msgid "Virtual Part" msgstr "Articolo Virtuale" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Imposta Posizione" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Assegna Codice Lotto" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Imposta Posizione" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Assegna Codice Lotto" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Impostare una Data di Scadenza" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Regola Imballaggio" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Modifica Stato" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Aggiungi Nota" @@ -4845,19 +4858,19 @@ msgstr "Aggiungi Nota" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Memorizza nella posizione predefinita" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Salva alla destinazione dell'articolo" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Memorizza con stock già ricevuto" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Memorizza con stock già ricevuto" msgid "Batch Code" msgstr "Codice Lotto" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Inserisci il codice lotto per gli articoli ricevuti" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Numeri di serie" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Inserisci i numeri di serie per gli elementi ricevuti" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Data di scadenza" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Inserisci una data di scadenza per gli articoli ricevuti" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Inserisci una data di scadenza per gli articoli ricevuti" msgid "Packaging" msgstr "Imballaggio" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Nota" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Ricevuto" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Ricevi Elementi Riga" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Articoli ricevuti" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Oggetto ricevuto in magazzino" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Controlla spedizione" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Marcatura della spedizione come controllato indica che hai verificato che tutti gli articoli inclusi in questa spedizione sono corretti" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Spedizione contrassegnata come controllata" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Deseleziona Spedizione" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Contrassegnare la spedizione come non controllata indica che la spedizione richiede ulteriori verifiche" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Spedizione contrassegnata come non controllata" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Completa Spedizione" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Lascia vuoto per utilizzare l'indirizzo dell'ordine" @@ -10361,10 +10374,6 @@ msgstr "Nessun allegato trovato" msgid "Drag attachment file here to upload" msgstr "Trascina qui il file allegato per caricare" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Articolo" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Modello" @@ -10456,59 +10465,59 @@ msgstr "Crea un nuovo parametro" msgid "Import parameters from a file" msgstr "Importa parametri da file" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Aggiungi Modello Parametro" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Duplica Modello Parametro" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Elimina Modello Parametro" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Modifica Modello Parametro" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Casella di spunta" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Mostra i modelli di casella di spunta" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Ha scelte" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Mostra modelli con scelte" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Ha Unità" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Mostra modelli con unità" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "Mostra modelli abilitati" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Tipo Modello" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "Filtra per tipo di modello" diff --git a/src/frontend/src/locales/ja/messages.po b/src/frontend/src/locales/ja/messages.po index 078a856441..2bb126a448 100644 --- a/src/frontend/src/locales/ja/messages.po +++ b/src/frontend/src/locales/ja/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ja\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -72,7 +72,7 @@ msgstr "キャンセル" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "アクション" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "いいえ" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "パーツカテゴリ" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "バーコードデータの入力" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "バーコードをスキャン" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "バーコードが想定されるモデルタイプと一致しません" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "これにより、関連するバーコードへのリンクが削除さ #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "リンク解除バーコード" @@ -1456,23 +1456,23 @@ msgstr "画像のダウンロードに成功しました" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "画像のアップロードに失敗しました" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "画像のアップロードに成功しました" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "メモが正常に保存されました" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "メモの保存に失敗しました" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "メモの保存エラー" @@ -1480,15 +1480,15 @@ msgstr "メモの保存エラー" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "メモを保存" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "エディターを閉じる" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "編集を有効にする" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "プラグイン" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "パック選択" msgid "{0} icons" msgstr "{0} アイコン" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "読み込み中" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "一致するものが見つかりませんでした" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "アイテム" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "テーブルに必要な modelRenderer エントリ" @@ -2181,7 +2190,7 @@ msgstr "データは正常にインポートされました" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "閉じる" @@ -2912,15 +2921,19 @@ msgstr "添付ファイル" msgid "Notes" msgstr "メモ" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "プラグイン提供" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "パネルを折りたたむ" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "パネルを展開する" @@ -3180,7 +3193,7 @@ msgstr "カテゴリ" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "シリアル番号" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "InvenTreeプロジェクトについて" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "代替部品" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "BOM代替品編集" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "代替品を追加" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "代替品を追加した" @@ -4555,7 +4568,7 @@ msgstr "完了数量" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "割り当てられた" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "ソース・ロケーション" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "在庫配分のソースの場所を選択します。" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "株式の割当" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "割り当てられた在庫品目" @@ -4717,10 +4730,10 @@ msgstr "完全に消費されました" msgid "Consumed" msgstr "消費済み" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "この明細行のプロジェクトコードを選択してください" @@ -4770,27 +4783,27 @@ msgstr "このカテゴリの通知を受け取る" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "地域を選択" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "選択された項目" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "選択されたパートカテゴリーのデフォルトの場所" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "選択された受入在庫場所" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "デフォルトの場所を選択" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "デフォルトの場所を選択" msgid "Virtual Part" msgstr "バーチャルパート" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "セット場所" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "バッチコードの割り当て" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "セット場所" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "バッチコードの割り当て" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "有効期限の設定" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "パッケージの調整" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "ステータスを変更" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "コメントを挿入" @@ -4845,19 +4858,19 @@ msgstr "コメントを挿入" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "デフォルトの場所に保存" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "行先での保存" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "入荷済みの在庫がある店舗" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "入荷済みの在庫がある店舗" msgid "Batch Code" msgstr "バッチコード" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "受領品のバッチコードを入力" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "シリアル番号" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "受け取った商品のシリアル番号を入力" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "有効期限" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "受け取った商品の有効期限を入力してください。" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "受け取った商品の有効期限を入力してください。" msgid "Packaging" msgstr "パッケージング" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "備考" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "受信" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "ラインアイテムの受信" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "受領品目" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "入荷した商品" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "出荷状況を確認する" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "「確認済み」とマークすることで、全送付品の照合が完了したことを示します" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "出荷はチェック済みとしてマークされました" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "出荷のチェックを外す" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "チェックを外すと、出荷時に再確認が必要になります" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "出荷はチェックが外された" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "完全出荷" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "オーダーの住所を使用する場合は空欄のままにしてください" @@ -10361,10 +10374,6 @@ msgstr "%s 孤立した添付ファイルが見つかりました" msgid "Drag attachment file here to upload" msgstr "添付ファイルをここにドラッグしてアップロードしてください。" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "アイテム" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "モデル" @@ -10456,59 +10465,59 @@ msgstr "新しいパラメーターを作成します" msgid "Import parameters from a file" msgstr "ファイルからパラメーターをインポートします" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "パラメータテンプレートの追加" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "重複パラメーターテンプレート" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "パラメータテンプレートの削除" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "パラメータテンプレートの編集" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "チェックボックス" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "チェックボックステンプレートを表示" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "選択肢があります" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "選択肢のあるテンプレートを表示" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "ユニット" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "単位付きテンプレートの表示" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "有効なテンプレートを表示します" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "モデルタイプ" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "モデルタイプで絞り込みます" diff --git a/src/frontend/src/locales/ko/messages.po b/src/frontend/src/locales/ko/messages.po index 6ceeeda2e1..9b87030fac 100644 --- a/src/frontend/src/locales/ko/messages.po +++ b/src/frontend/src/locales/ko/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ko\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Korean\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -72,7 +72,7 @@ msgstr "취소" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "작업" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "아니요" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "부품 카테고리 목록" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "선택 항목" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "선택 항목" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "바코드 데이터 입력" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "바코드 스캔하기" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "바코드가 예상 모델 유형과 일치하지 않습니다." #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "연결된 바코드 링크가 제거됩니다" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "바코드 연결 해제" @@ -1456,23 +1456,23 @@ msgstr "이미지가 성공적으로 다운로드되었습니다." #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "이미지 업로드 실패" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "이미지가 성공적으로 업로드되었습니다." -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "메모가 성공적으로 저장되었습니다." -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "메모를 저장하지 못했습니다." -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "메모를 저장하는 중에 오류가 발생했습니다." @@ -1480,15 +1480,15 @@ msgstr "메모를 저장하는 중에 오류가 발생했습니다." #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "메모 저장" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Close Editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "편집 활성화" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "플러그인" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "패키지 선택" msgid "{0} icons" msgstr "{0} 아이콘" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "불러오는 중" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "결과를 찾을 수 없습니다" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "목" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "테이블에 modelRenderer 항목이 필요함" @@ -2181,7 +2190,7 @@ msgstr "데이터를 성공적으로 가져왔습니다." #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "닫다" @@ -2912,15 +2921,19 @@ msgstr "첨부파일" msgid "Notes" msgstr "메모" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "플러그인 제공" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "패널 축소" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "패널 확장" @@ -3180,7 +3193,7 @@ msgstr "카테고리" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "시리얼 번호" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "InvenTree 프로젝트 소개" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "대체 부품" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "BOM 대체 부품 편집" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "대체 부품 추가" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "대체 부품이 추가되었습니다" @@ -4555,7 +4568,7 @@ msgstr "완료할 수량" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "품목 번호(IPN)" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "할당됨" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "원본 위치" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "재고 할당의 원본 위치를 선택하세요" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "재고 할당" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "재고 품목이 할당되었습니다" @@ -4717,10 +4730,10 @@ msgstr "완전히 소비됨" msgid "Consumed" msgstr "소비됨" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "이 품목의 프로젝트 코드를 선택하세요." @@ -4770,27 +4783,27 @@ msgstr "이 카테고리의 알림을 구독" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "위치 선택" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "항목 대상 위치가 선택되었습니다" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "부품 카테고리 기본 위치가 선택되었습니다" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "입고 재고 위치가 선택되었습니다" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "기본 위치가 선택되었습니다" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "기본 위치가 선택되었습니다" msgid "Virtual Part" msgstr "가상 부품" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "이 부품은 가상이므로 실제 재고가 입고되지 않습니다" @@ -4806,38 +4819,38 @@ msgstr "이 부품은 가상이므로 실제 재고가 입고되지 않습니다 #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "위치 설정" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "배치 코드 지정" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "위치 설정" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "배치 코드 지정" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "시리얼 번호 지정" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "만료일 설정" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "포장 조정" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "상태 변경" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "메모 추가" @@ -4845,19 +4858,19 @@ msgstr "메모 추가" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "기본 위치에 저장" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "항목 대상 위치에 보관" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "이미 입고된 재고로 보관" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "이미 입고된 재고로 보관" msgid "Batch Code" msgstr "배치 코드" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "입고된 항목의 배치 코드를 입력하세요" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "일련번호" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "입고된 항목의 시리얼 번호를 입력하세요" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "만료 날짜" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "입고된 항목의 만료일을 입력하세요" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "입고된 항목의 만료일을 입력하세요" msgid "Packaging" msgstr "포장" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "메모" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "받았다" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "항목 입고" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "받은 상품" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "입고된 품목" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "부품과 수량 기준 가격이 다릅니다{0}" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "출하 확인" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "출하를 확인됨으로 표시하면 이 출하에 포함된 모든 항목이 올바른지 검증했음을 의미합니다" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "출하가 확인됨으로 표시되었습니다" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "출하 확인 해제" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "출하를 미확인으로 표시하면 추가 검증이 필요함을 의미합니다" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "출하가 미확인으로 표시되었습니다" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "출하 완료 처리 중" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "출하가 성공적으로 완료되었습니다" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "출하 완료" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "주문 주소를 사용하려면 비워두세요." @@ -10361,10 +10374,6 @@ msgstr "첨부파일이 없습니다." msgid "Drag attachment file here to upload" msgstr "첨부파일을 여기에 끌어다 놓아 업로드하세요" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "목" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "모델" @@ -10456,59 +10465,59 @@ msgstr "새 매개변수 생성" msgid "Import parameters from a file" msgstr "파일에서 매개변수 가져오기" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "매개변수 템플릿 추가" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "중복 매개변수 템플릿" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "매개변수 템플릿 삭제" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "매개변수 템플릿 편집" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "체크박스" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "체크박스 템플릿 표시" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "선택권 있음" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "선택 항목이 있는 템플릿 표시" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "단위 있음" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "단위가 포함된 템플릿 표시" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "활성화된 템플릿 표시" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "모델 유형" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "모델 유형으로 필터링" diff --git a/src/frontend/src/locales/lt/messages.po b/src/frontend/src/locales/lt/messages.po index 00de31213e..32c551c58f 100644 --- a/src/frontend/src/locales/lt/messages.po +++ b/src/frontend/src/locales/lt/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: lt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Ne" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Įveskite brūkšninio kodo duomenis" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Nuskaityti brūkšninį kodą" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Tai pašalins nuorodą į susietą brūkšninį kodą" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Atsieti brūkšninį kodą" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/lv/messages.po b/src/frontend/src/locales/lv/messages.po index 4544fa6613..8160f482fb 100644 --- a/src/frontend/src/locales/lv/messages.po +++ b/src/frontend/src/locales/lv/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: lv\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/nl/messages.po b/src/frontend/src/locales/nl/messages.po index 1811d0773e..fa58b51761 100644 --- a/src/frontend/src/locales/nl/messages.po +++ b/src/frontend/src/locales/nl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: nl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Annuleer" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Acties" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nee" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Onderdeel categorieën" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Voer barcode gegevens in" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Scan barcode" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Barcode komt niet overeen met het verwachte type model" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Dit verwijdert de link naar de bijbehorende barcode" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Barcode loskoppelen" @@ -1456,23 +1456,23 @@ msgstr "Afbeelding succesvol gedownload" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Afbeelding uploaden is mislukt" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Afbeelding met succes geüpload" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notitie succesvol opgeslagen" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Opslaan van notities mislukt" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Fout bij opslaan notities" @@ -1480,15 +1480,15 @@ msgstr "Fout bij opslaan notities" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Notitie opslaan" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Sluit editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Bewerken inschakelen" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plug-ins" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Selecteer pakket" msgid "{0} icons" msgstr "{0} pictogrammen" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Laden" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Geen resultaten gevonden" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Item" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "modelRenderer-invoer vereist voor tabellen" @@ -2181,7 +2190,7 @@ msgstr "De gegevens zijn met succes geïmporteerd" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Sluiten" @@ -2912,15 +2921,19 @@ msgstr "Bijlagen" msgid "Notes" msgstr "Opmerkingen" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Plug-in geleverd" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Panelen samenvouwen" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Panelen uitklappen" @@ -3180,7 +3193,7 @@ msgstr "Categorie" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Serienummer" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Over het InvenTree project" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Vervanging onderdeel" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Stuk lijst BOM Item vervangingen bewerken" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Vervanging toevoegen" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Vervanging toegevoegd" @@ -4555,7 +4568,7 @@ msgstr "Te voltooien hoeveelheid" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Toegewezen" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Bron locatie" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Selecteer de bron locatie voor de voorraadtoewijzing" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Voorraad toewijzen" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Voorraad items toegewezen" @@ -4717,10 +4730,10 @@ msgstr "Volledig verbruikt" msgid "Consumed" msgstr "Verbruikt" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Selecteer projectcode voor deze bestelling" @@ -4770,27 +4783,27 @@ msgstr "Abonneer je op meldingen voor deze categorie" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Kies locatie" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Item bestemming geselecteerd" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Standaardlocatie voor de subcategorie" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Ontvangen voorraadlocatie geselecteerd" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Standaard locatie geselecteerd" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Standaard locatie geselecteerd" msgid "Virtual Part" msgstr "Virtueel onderdeel" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Locatie invoeren" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Batch code toewijzen" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Locatie invoeren" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Batch code toewijzen" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "Serienummers toewijzen" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Stel vervaldatum in" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Verpakking aanpassen" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Status wijzigen" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Opmerking toevoegen" @@ -4845,19 +4858,19 @@ msgstr "Opmerking toevoegen" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Op standaardlocatie opslaan" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Bewaar op de bestemming van het item " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Winkel met reeds ontvangen voorraad" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Winkel met reeds ontvangen voorraad" msgid "Batch Code" msgstr "Batch code" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Voer batch code in voor ontvangen items" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Serienummers" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Voer serienummers in voor ontvangen items" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Vervaldatum" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Voer een vervaldatum in voor ontvangen items" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Voer een vervaldatum in voor ontvangen items" msgid "Packaging" msgstr "Verpakking" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Opmerking" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Ontvangen" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Ontvang regelitems" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Ontvangen items" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Item ontvangen in voorraad" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Controleer Levering" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Het markeren van de zending als gecontroleerd geeft aan dat u hebt geverifieerd dat alle artikelen in deze zending correct zijn" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Verzending gemarkeerd als gecontroleerd" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Verzending uitvinken" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Het uitvinken van de zending geeft aan dat de verzending verder gecontroleerd moet worden" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Verzending gemarkeerd als ongecontroleerd" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Zending voltooien" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Laat leeg om het besteladres te gebruiken" @@ -10361,10 +10374,6 @@ msgstr "Geen bijlagen gevonden" msgid "Drag attachment file here to upload" msgstr "Sleep het bijlagebestand hier om te uploaden" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Item" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Model" @@ -10456,59 +10465,59 @@ msgstr "Een nieuwe parameter maken" msgid "Import parameters from a file" msgstr "Importeer parameters uit een bestand" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Parameter sjabloon toevoegen" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Dupliceer parameter sjabloon" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Parameter sjabloon verwijderen" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Parameter sjabloon bewerken" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Selectievakje" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Toon selectie vak sjabloon" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Heeft keuzes" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Toon sjablonen met keuzes" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Heeft eenheden" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Toon sjablonen met eenheden" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "Ingeschakelde sjablonen weergeven" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Model type" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "Sorteren op model type" diff --git a/src/frontend/src/locales/no/messages.po b/src/frontend/src/locales/no/messages.po index 151e9c2828..3f71766662 100644 --- a/src/frontend/src/locales/no/messages.po +++ b/src/frontend/src/locales/no/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: no\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Avbryt" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Handlinger" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nei" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Delkategorier" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Skann strekkode" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Fjern strekkodekobling" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Kunne ikke lagre notater" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Utvidelser" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Laster" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Ingen resultater funnet" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Artikkel" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Lukk" @@ -2912,15 +2921,19 @@ msgstr "Vedlegg" msgid "Notes" msgstr "Notater" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Kategori" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Serienummer" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Tildelt" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Tildel lagerbeholdning" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Serienumre" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Utløpsdato" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "Mottatt" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "Ingen vedlegg funnet" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Artikkel" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Slett parametermal" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Rediger parametermal" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Sjekkboks" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Vis sjekkboks-maler" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Har valg" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Vis maler med valg" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Har enheter" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Vis maler med enheter" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/pl/messages.po b/src/frontend/src/locales/pl/messages.po index ea6e920179..1328535275 100644 --- a/src/frontend/src/locales/pl/messages.po +++ b/src/frontend/src/locales/pl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Polish\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" @@ -72,7 +72,7 @@ msgstr "Anuluj" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Akcje" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nie" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Kategorie części" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Wprowadź dane kodu kreskowego" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Zeskanuj kod kreskowy" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Kod kreskowy nie pasuje do oczekiwanego typu modelu" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Spowoduje to usunięcie powiązania z przypisanym kodem kreskowym" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Odłącz Kod Kreskowy" @@ -1456,23 +1456,23 @@ msgstr "Obraz został pomyślnie pobrany" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Przesłanie obrazu nie powiodło się" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Obraz został pomyślnie przesłany" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notatki zapisane pomyślnie" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Nie udało się zapisać notatek" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Błąd zapisywania notatek" @@ -1480,15 +1480,15 @@ msgstr "Błąd zapisywania notatek" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Zapisz notatki" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Zamknij edytor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Włącz edycję" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Wtyczki" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Wybierz paczkę" msgid "{0} icons" msgstr "{0} ikon(y)" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Wczytuję" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Nie znaleziono wyników" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Komponent" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Wpis modelRenderer jest wymagany dla tabel" @@ -2181,7 +2190,7 @@ msgstr "Dane zostały zaimportowane" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Zamknij" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Numer seryjny" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Wybierz lokalizację" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Wybrano domyślną lokalizację" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Wybrano domyślną lokalizację" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Ustaw lokalizację" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Ustaw lokalizację" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Dostosuj opakowanie" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Zmień status" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Dodaj notatkę" @@ -4845,19 +4858,19 @@ msgstr "Dodaj notatkę" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Zapisz w domyślnej lokalizacji" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "Kod partii" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Numery seryjne" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "Opakowanie" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Notatka" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Otrzymano" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Komponent" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/pt/messages.po b/src/frontend/src/locales/pt/messages.po index 86647bdd1d..d87a73e5c4 100644 --- a/src/frontend/src/locales/pt/messages.po +++ b/src/frontend/src/locales/pt/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Cancelar" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Ações" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Não" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Categorias da Peça" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Ler Código de Barras" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Desatribuir Código de Barras" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Falha no carregamento da imagem" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notas guardadas com sucesso" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Falha ao guardar notas" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Gravar notas" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1936,8 +1936,8 @@ msgid "Plugins" msgstr "Extensões" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2002,16 +2002,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "A carregar" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Nenhum resultado encontrado" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Item" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "entrada do modelRenderer necessária para tabelas" @@ -2182,7 +2191,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2913,15 +2922,19 @@ msgstr "Anexos" msgid "Notes" msgstr "Anotações" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3181,7 +3194,7 @@ msgstr "Categoria" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3214,9 +3227,9 @@ msgstr "Número de Série" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4514,19 +4527,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4556,7 +4569,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4650,7 +4663,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4660,19 +4673,19 @@ msgid "Allocated" msgstr "Alocado" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Localização de Origem" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4683,7 +4696,7 @@ msgid "Allocate Stock" msgstr "Alocar estoque" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4718,10 +4731,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4771,27 +4784,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Escolher Localização" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Destino do item selecionado" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Localização padrão da categoria de peça selecionada" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Localização do estoque recebido selecionada" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Localização padrão selecionada" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4799,7 +4812,7 @@ msgstr "Localização padrão selecionada" msgid "Virtual Part" msgstr "Peça virtual" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4807,38 +4820,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Definir localização" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Definir localização" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Alterar Estado" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4846,19 +4859,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Armazenar no local padrão" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Armazenar com estoque já recebido" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4871,30 +4884,30 @@ msgstr "Armazenar com estoque já recebido" msgid "Batch Code" msgstr "Código de Lote" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Números de Série" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4903,19 +4916,19 @@ msgstr "" msgid "Packaging" msgstr "Embalagem" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Nota" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4923,11 +4936,11 @@ msgstr "SKU" msgid "Received" msgstr "Recebido" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Receber item de linha" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4940,52 +4953,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10362,10 +10375,6 @@ msgstr "Nenhum anexo encontrado" msgid "Drag attachment file here to upload" msgstr "Arraste o arquivo de anexo aqui para enviar" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Item" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10457,59 +10466,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Adicionar modelo de Parâmetro" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Excluir Modelo de Parâmetro" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Editar Modelo de Parâmetro" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Caixa de seleção" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Mostrar modelos da caixa de seleção" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Possui escolhas" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Mostrar modelos com escolhas" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Possui unidades" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Mostrar modelos com escolhas" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Tipo de Modelo" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/pt_BR/messages.po b/src/frontend/src/locales/pt_BR/messages.po index 79ddca5fc8..48968b6594 100644 --- a/src/frontend/src/locales/pt_BR/messages.po +++ b/src/frontend/src/locales/pt_BR/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: pt\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Cancelar" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Ações" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Não" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Categorias de Peça" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Digitar informações do código de barras" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Ler Código de Barras" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Código de barras não corresponde ao tipo de modelo esperado" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Isto irá remover o link com o código de barras associado" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Desvincular Código de Barras" @@ -1456,23 +1456,23 @@ msgstr "Imagem baixada com sucesso" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Upload da imagem falhou" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Imagem enviada com sucesso" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notas salvas com sucesso" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Falha em salvar notas" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Erro ao Salvar Notas" @@ -1480,15 +1480,15 @@ msgstr "Erro ao Salvar Notas" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Salvar Notas" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Fechar Editor" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Permitir edição" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Extensões" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Selecione o pacote" msgid "{0} icons" msgstr "Ícones {0}" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Carregando" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Nenhum resultado encontrado" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Item" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "entrada modelo de renderização é necessária para tabelas" @@ -2181,7 +2190,7 @@ msgstr "Dados importados com sucesso" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Fechar" @@ -2912,15 +2921,19 @@ msgstr "Anexos" msgid "Notes" msgstr "Anotações" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Categoria" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Número de Série" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "Sobre o projeto InvenTree" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Parte substituta" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Adicionar substituto" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Substituto adicionado" @@ -4555,7 +4568,7 @@ msgstr "Quantidade a completar" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Alocado" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Local de Origem" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Selecione o local de origem para alocação de estoque" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Alocar Estoque" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Itens de estoque alocados" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "Receber notificações desta categoria" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Escolher local" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Destino do item selecionado" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Localização padrão da categoria de peça selecionada" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Localização do estoque recebida selecionada" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Localização padrão selecionada" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Localização padrão selecionada" msgid "Virtual Part" msgstr "Parte Virtual" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Definir Localização" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Definir código em Lote" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Definir Localização" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Definir código em Lote" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Definir data de validade" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Ajustar Pacotes" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Alterar Status" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Adicionar observação" @@ -4845,19 +4858,19 @@ msgstr "Adicionar observação" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Armazenar no local padrão" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Armazenar com estoque já recebido" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Armazenar com estoque já recebido" msgid "Batch Code" msgstr "Código de Lote" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Digite o código do lote para itens de estoque recebidos" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Números de Série" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Digite o número de série para itens de estoque recebidos" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Data de Validade" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Insira uma data de expiração para os itens recebidos" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Insira uma data de expiração para os itens recebidos" msgid "Packaging" msgstr "Embalagem" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Anotação" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "Código (SKU)" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "Código (SKU)" msgid "Received" msgstr "Recebido" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Excluir Itens de Linha" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Itens Recebidos" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Ítem recebido em estoque" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Remessa Completa" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "Nenhum anexo encontrado" msgid "Drag attachment file here to upload" msgstr "Arraste o arquivo de anexo aqui para enviar" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Item" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Modelo" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Adicionar Modelo de Parâmetro" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Excluir Modelo de Parâmetro" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Edital Modelo de Parâmetro" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Caixa de seleção" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Mostrar modelos da caixa de seleção" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Tem escolhas" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Mostrar modelos com escolhas" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Possui unidades" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Mostrar modelos com unidades" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Tipo de Modelo" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/ro/messages.po b/src/frontend/src/locales/ro/messages.po index e128fd9651..c644d8fb3a 100644 --- a/src/frontend/src/locales/ro/messages.po +++ b/src/frontend/src/locales/ro/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ro\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" @@ -72,7 +72,7 @@ msgstr "Anulează" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Acțiuni" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nu" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Categorii Piese" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Introduceți datele codului de bare" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Scanați codul de bare" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Codul de bare nu se potrivește cu tipul de model așteptat" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Acest lucru va elimina asocierea către codul de bare asociat" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Dezasociază Codul de Bare" @@ -1456,23 +1456,23 @@ msgstr "Imagine descărcată cu succes" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Încărcarea imaginii a eșuat" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Imaginea a fost încărcată cu succes" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Note salvate cu succes" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Salvarea notei a eșuat" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Eroare la salvarea notelor" @@ -1480,15 +1480,15 @@ msgstr "Eroare la salvarea notelor" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Salvează note" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Închide Editorul" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Activează editarea" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plugin-uri" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "Notițe" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Locația sursei" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Selectaţi locaţia sursă pentru alocarea stocurilor" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Atribuie cod lot" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Atribuie cod lot" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "Cod lot" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Introduceți codul lotului pentru articolele primite" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/ru/messages.po b/src/frontend/src/locales/ru/messages.po index e06094d2f1..c0c178f8f1 100644 --- a/src/frontend/src/locales/ru/messages.po +++ b/src/frontend/src/locales/ru/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: ru\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Russian\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" @@ -72,7 +72,7 @@ msgstr "Отменить" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Действия" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Нет" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Категории деталей" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Введите данные штрихкода" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Сканировать штрихкод" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Штрихкод не соответствует ожидаемому типу модели" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Это удалит ссылку на связанный штрих-ко #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Отвязать штрихкод" @@ -1456,23 +1456,23 @@ msgstr "Изображение успешно скачано" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Не удалось загрузить изображение" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Изображение успешно загружено" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Заметка успешно сохранена" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Не удалось сохранить заметки" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Ошибка при сохранении заметок" @@ -1480,15 +1480,15 @@ msgstr "Ошибка при сохранении заметок" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Сохранить заметки" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Закрыть редактор" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Разрешить редактирование" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Плагины" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Выбрать набор" msgid "{0} icons" msgstr "{0} значков" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Загрузка" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Ничего не найдено" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Элемент" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "запись modelRenderer необходима для таблиц" @@ -2181,7 +2190,7 @@ msgstr "Данные успешно импортированы" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Закрыть" @@ -2912,15 +2921,19 @@ msgstr "Вложения" msgid "Notes" msgstr "Заметки" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Плагин предоставлен" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Свернуть панели" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Развернуть панели" @@ -3180,7 +3193,7 @@ msgstr "Категория" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Серийный номер" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "О проекте InvenTree" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "Детали для замены" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "Редактировать варианты замены позиции спецификации" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "Создать замену" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "Замена создана" @@ -4555,7 +4568,7 @@ msgstr "Количество для завершения" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "Внутренний артикул" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Зарезервировано" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Место хранения комплектующих" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Выберите исходное расположение для распределения запасов" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Зарезервировать остатки" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Запасы назначены" @@ -4717,10 +4730,10 @@ msgstr "Полностью израсходовано" msgid "Consumed" msgstr "Израсходовано" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "Выберите код проекта для этой позиции" @@ -4770,27 +4783,27 @@ msgstr "Подписаться на уведомления для этой ка #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Выберите место хранения" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Пункт назначения товара выбран" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Выбрано расположение категории по умолчанию" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Выбрано место получения запасов" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Выбрано местоположение по умолчанию" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Выбрано местоположение по умолчанию" msgid "Virtual Part" msgstr "Виртуальная деталь" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Задать место хранения" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Назначить код партии" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Задать место хранения" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Назначить код партии" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "Назначить серийный номер" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Задать срок годности" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Настройка упаковки" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Изменить статус" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Добавить заметку" @@ -4845,19 +4858,19 @@ msgstr "Добавить заметку" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Использовать место хранения по умолчанию" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Использовать место хранения позиции заказа " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Использовать место хранения уже полученных запасов" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Использовать место хранения уже получе msgid "Batch Code" msgstr "Код партии" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Введите код партии для полученных запасов" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Серийные номера" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Введите серийные номера для полученных запасов" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Срок годности" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "Введите дату истечения срока годности полученных элементов" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "Введите дату истечения срока годности msgid "Packaging" msgstr "Упаковка" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Заметка" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "Артикул поставщика" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "Артикул поставщика" msgid "Received" msgstr "Получено" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Получить позиции" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "Элементы получены" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Товар получен на складе" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "Цена на основе детали и количества отличается{0}" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "Проверить отправку" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "Отметка отправления как проверенного означает, что вы проверили корректность всех предметов, включённых в эту отправку" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "Отправление отмечено как проверенное" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "Снять отметку проверки с отправки" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "Отметка отправления как непроверенного означает, что требуется дополнительная проверка" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "Отправление отмечено как непроверенное" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Завершить отправку" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "Оставьте поле пустым, чтобы использовать адрес заказа" @@ -10361,10 +10374,6 @@ msgstr "Вложений не найдено" msgid "Drag attachment file here to upload" msgstr "Перетащите файл для загрузки" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Элемент" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Модель" @@ -10456,59 +10465,59 @@ msgstr "Создайте новый параметр" msgid "Import parameters from a file" msgstr "Импортировать параметры из файла" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Создать шаблон параметра" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "Дублировать шаблон параметра" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Удалить шаблон параметра" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Редактировать шаблон параметра" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Чекбокс" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Показать шаблоны-переключатели" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Есть варианты" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Показать шаблоны с вариантами" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Имеет единицу измерения" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Показать шаблоны с единицами измерения" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "Показывать включённые шаблоны" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Тип модели" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "Фильтровать по типу модели" diff --git a/src/frontend/src/locales/sk/messages.po b/src/frontend/src/locales/sk/messages.po index 26beb4626b..138c531ec8 100644 --- a/src/frontend/src/locales/sk/messages.po +++ b/src/frontend/src/locales/sk/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sk\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/sl/messages.po b/src/frontend/src/locales/sl/messages.po index 5ba947ab0f..8bde95e39a 100644 --- a/src/frontend/src/locales/sl/messages.po +++ b/src/frontend/src/locales/sl/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sl\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" @@ -72,7 +72,7 @@ msgstr "Prekliči" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Dejanja" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/sr/messages.po b/src/frontend/src/locales/sr/messages.po index fee5dd4a43..213578df86 100644 --- a/src/frontend/src/locales/sr/messages.po +++ b/src/frontend/src/locales/sr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -72,7 +72,7 @@ msgstr "Poništi" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Akcije" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Ne" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Kategorije delova" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Unesi podatke bar koda" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Skeniraj barkod" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Ovo će ukloniti link sa povezanim barkodom" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Prekini vezu Barkoda" @@ -1456,23 +1456,23 @@ msgstr "Slika preuzeta uspešno" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Učitavanje slike nije uspelo" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Slika je učitana uspešno" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Beleške sačuvane uspešno" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Beleške nisu sačuvane" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Greška prilikom čuvanja beleški" @@ -1480,15 +1480,15 @@ msgstr "Greška prilikom čuvanja beleški" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Sačuvaj beleške" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Zatvori prozor za izmene" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Omogući izmene" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Ekstenzije" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Izaberi pakovanje" msgid "{0} icons" msgstr "{0} ikone" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Učitavanje" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Nema pronađenih rezultata" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Stavka" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Generator potreban za tabele" @@ -2181,7 +2190,7 @@ msgstr "Podaci su učitani uspešno" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Zatvori" @@ -2912,15 +2921,19 @@ msgstr "Prilozi" msgid "Notes" msgstr "Beleške" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Kategorija" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Serijski broj" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "O InvenTree Projektu" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "Identifikacioni broj dela" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Alocirano" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Lokacija izvora" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Izaberi lokaciju izvora radi alokacije zaliha" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Alociraj zalihe" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Stavke zaliha alocirane" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "Iskorišćeno" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "Pretplati se za obaveštenja za ovu kategoriju" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Izaberi lokaciju" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Destinacije stavke odabrana" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Podrazmevana lokacija kategorije dela izabrana" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Primljena lokacija zaliha selektovana" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Podrazumevana lokacija izabrana" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Podrazumevana lokacija izabrana" msgid "Virtual Part" msgstr "Virtualni deo" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Podesi lokaciju" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Dodeli kod serije" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Podesi lokaciju" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Dodeli kod serije" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Doradi pakovanje" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Promeni status" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Dodaj belešku" @@ -4845,19 +4858,19 @@ msgstr "Dodaj belešku" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Prodavnica na podrazumevanoj lokaciji" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Prodavnica sa već primeljenom zalihom" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Prodavnica sa već primeljenom zalihom" msgid "Batch Code" msgstr "Kod serije" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Unesi kod serije za primljene stavke" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Serijski brojevi" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "Unesi serijske brojeve za primljene stavke" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Datum isteka" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "Pakovanje" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Beleška" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "Jedinica za praćenje zaliha" msgid "Received" msgstr "Primljeno" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Primi linijske stavke" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Stavka primljena u zalihe" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Završi isporuku" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "Nema pronađenih priloga" msgid "Drag attachment file here to upload" msgstr "Prevuci prilog ovde za upload" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Stavka" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Model" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Dodaj šablon parametara" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Obriši šablon parametara" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Izmeni šablon parametara" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Potvrdni okvir" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Prikaži šablone sa potvrdnim okvirima" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Ima izbore" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Prikaži šablone sa izborima" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Ima merne jedinice" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Prikaži šablon sa mernim jedinicama" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Tip modela" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/sv/messages.po b/src/frontend/src/locales/sv/messages.po index 3623f662f4..a575af3170 100644 --- a/src/frontend/src/locales/sv/messages.po +++ b/src/frontend/src/locales/sv/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: sv\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Avbryt" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Åtgärder" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Nej" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Artikelkategorier" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Skanna streckkod" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Ta bort länk för streckkod" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Bilduppladdning misslyckades" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Anteckningarna sparades framgångsrikt" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Det gick inte att spara anteckningarna" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Spara anteckningar" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Stäng redigerare" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plugins" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Välj paket" msgid "{0} icons" msgstr "{0} ikoner" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Laddar" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Inga resultat hittades" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Artikel" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "modelRenderer post krävs för tabeller" @@ -2181,7 +2190,7 @@ msgstr "Data har importerats framgångsrikt" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Stäng" @@ -2912,15 +2921,19 @@ msgstr "Bilagor" msgid "Notes" msgstr "Anteckningar" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Kategori" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Serienummer" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IAN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Allokerad" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Välj plats" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "Virtuell artikel" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Tilldela streckkod" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Tilldela streckkod" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Ändra status" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Lägg till anteckning" @@ -4845,19 +4858,19 @@ msgstr "Lägg till anteckning" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "Batchkod" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Serienummer" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Artikel" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Modell" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Kryssruta" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Har val" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Har enheter" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Modelltyp" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/th/messages.po b/src/frontend/src/locales/th/messages.po index 24fd5d0ea7..9e3c612a96 100644 --- a/src/frontend/src/locales/th/messages.po +++ b/src/frontend/src/locales/th/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: th\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Thai\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -72,7 +72,7 @@ msgstr "" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "" msgid "{0} icons" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "" @@ -2181,7 +2190,7 @@ msgstr "" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "" @@ -2912,15 +2921,19 @@ msgstr "" msgid "Notes" msgstr "" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "" msgid "Received" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/tr/messages.po b/src/frontend/src/locales/tr/messages.po index a323fe826f..a3f8c54595 100644 --- a/src/frontend/src/locales/tr/messages.po +++ b/src/frontend/src/locales/tr/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: tr\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -72,7 +72,7 @@ msgstr "Vazgeç" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Eylemler" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Hayır" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Parça Kategorileri" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Barkod verisi gir" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Barkod Tara" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "Barkod beklenen model ile uyuşmuyor" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Bu, ilgili barkoda olan bağlantıyı kaldıracaktır" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Barkodun Bağlantısını Kaldır" @@ -1456,23 +1456,23 @@ msgstr "Görsel başarıyla indirildi" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Görsel yükleme başarısız oldu" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Görsel başarıyla yüklendi" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Notlar başarıyla kaydedildi" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Notların kaydı başarısız oldu" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Notları Kaydederken Hata Oluştu" @@ -1480,15 +1480,15 @@ msgstr "Notları Kaydederken Hata Oluştu" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Notları Kaydet" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "Editörü Kapat" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Düzenlemeyi Etkinleştirin" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Eklentiler" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Paket seç" msgid "{0} icons" msgstr "{0} simge" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Yükleniyor" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Hiçbir şey bulunamadı" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Öge" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "Tablolar için gerekli modelRenderer girdisi" @@ -2181,7 +2190,7 @@ msgstr "Veri başarıyla içe aktarıldı" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Kapat" @@ -2912,15 +2921,19 @@ msgstr "Ekler" msgid "Notes" msgstr "Notlar" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "Eklenti Sağlandı" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "Panelleri daralt" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "Panelleri genişlet" @@ -3180,7 +3193,7 @@ msgstr "Kategori" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Seri Numarası" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "DPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "Tahsis Edildi" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Kaynak Konum" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Stoku Tahsis Et" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "Tüketildi" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Konum Seçiniz" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Kalemin Hedefi seçildi" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Parça kategorisi varsayılan konumu seçildi" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Varış konumu seçildi" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Varsayılan konum seçildi" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Varsayılan konum seçildi" msgid "Virtual Part" msgstr "Sanal Parça" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Konum Ayarla" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Parti Kodu Ata" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Konum Ayarla" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Parti Kodu Ata" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "Son Kullanma Tarihi Belirle" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Paketlemeyi Ayarla" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Durumu Değiştir" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Note Ekle" @@ -4845,19 +4858,19 @@ msgstr "Note Ekle" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Varsayılan konumda depola" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "Satırdaki hedefe depola " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Mevcut stokla birlikte depola" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Mevcut stokla birlikte depola" msgid "Batch Code" msgstr "Parti Kodu" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "Son Kullanma Tarihi" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "Paketleme" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Not" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Teslim Alındı" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Kalemleri Teslim Al" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "Gönderiyi Tamamla" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "Hiç ek bulunamadı" msgid "Drag attachment file here to upload" msgstr "Ek dosyasını yüklemek için buraya sürükleyiniz" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Öge" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "Model" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "Parametre Şablonu Ekle" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "Parametre Şablonunu Sil" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "Parametre Şablonunu Düzenle" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "Onay kutusu" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "Onay kutusu şablonlarını göster" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "Seçenekleri olanlar" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "Seçenekli şablonları göster" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Birimi Var" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "Birimli şablonları göster" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "Model Türü" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/uk/messages.po b/src/frontend/src/locales/uk/messages.po index 2250983ef1..7ed7146524 100644 --- a/src/frontend/src/locales/uk/messages.po +++ b/src/frontend/src/locales/uk/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: uk\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" @@ -72,7 +72,7 @@ msgstr "Скасувати" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Дії" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Ні" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Категорії" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Введіть дані штрихкоду" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Сканувати штрих-код" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Це призведе до видалення посилання з ві #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Відв'язати штрих-код" @@ -1456,23 +1456,23 @@ msgstr "Зображення успішно завантажено" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Не вдалося завантажити зображення" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "Зобращення успішно завантажено" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Примітки успішно збережено" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Не вдалося зберегти примітки" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "Помилка під час збереження нотаток" @@ -1480,15 +1480,15 @@ msgstr "Помилка під час збереження нотаток" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Зберегти примітки" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "Увімкнути редагування" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Плагіни" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Вибрати пакет" msgid "{0} icons" msgstr "Значки {0}" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Завантаження" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Результатів не знайдено" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "для таблиць, необхідний запис modelRenderer" @@ -2181,7 +2190,7 @@ msgstr "Дані успішно імпортовано" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Закрити" @@ -2912,15 +2921,19 @@ msgstr "Вкладення" msgid "Notes" msgstr "Нотатки" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Категорія" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Серійний номер" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Розташування джерела" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "Вибір розташування вихідного товару при розподілі запасів" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "Елементи складу виділені" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "Використано" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Оберіть розташування" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "" msgid "Virtual Part" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "Призначити Номер серії збірки" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "Призначити Номер серії збірки" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "" @@ -4845,19 +4858,19 @@ msgstr "" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "" msgid "Batch Code" msgstr "Номер серії збірки" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "Введіть Номер серії збірки для отриманих елементів" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Нотатки" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "Артикул, SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "Артикул, SKU" msgid "Received" msgstr "Отримано" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "Елемент, отриманий на складі" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/vi/messages.po b/src/frontend/src/locales/vi/messages.po index 7e8aebd175..524497b251 100644 --- a/src/frontend/src/locales/vi/messages.po +++ b/src/frontend/src/locales/vi/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: vi\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:32\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -72,7 +72,7 @@ msgstr "Hủy bỏ" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "Chức năng" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "Không" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "Danh mục phụ kiện" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "Nhập dữ liệu mã vạch" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "Quét mã vạch" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "Thao tác này sẽ xóa liên kết đến mã vạch được liên k #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "Gỡ liên kết mã vạch" @@ -1456,23 +1456,23 @@ msgstr "" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "Tải ảnh thất bại" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "Lưu ghi chú thành công" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "Không lưu được chú thích" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "" @@ -1480,15 +1480,15 @@ msgstr "" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "Lưu ghi chú" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "Plugins" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "Chọn gói" msgid "{0} icons" msgstr "{0} icons" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "Đang tải" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "Không có kết quả nào được tìm thấy" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "Hàng hóa" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "modelRenderer mục nhập bắt buộc cho bảng" @@ -2181,7 +2190,7 @@ msgstr "Dữ liệu đã được nhập thành công" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "Đóng" @@ -2912,15 +2921,19 @@ msgstr "Đính kèm" msgid "Notes" msgstr "Ghi chú" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "" @@ -3180,7 +3193,7 @@ msgstr "Danh mục" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "Số sê-ri" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "" @@ -4555,7 +4568,7 @@ msgstr "" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "Vị trí nguồn cung" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "Phân kho" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "" @@ -4717,10 +4730,10 @@ msgstr "" msgid "Consumed" msgstr "" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "Chọn vị trí" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "Đã chọn đích đến của mặt hàng" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "Vị trí mặc định danh mục đã được chọn" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "Vị trí kho hàng nhận đã được chọn" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "Vị trí mặc định đã chọn" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "Vị trí mặc định đã chọn" msgid "Virtual Part" msgstr "Nguyên liệu ảo" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "" @@ -4806,38 +4819,38 @@ msgstr "" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "Cài đặt vị trí" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "Cài đặt vị trí" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "Điều chỉnh bao bì" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "Thay đổi trạng thái" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "Thêm ghi chú" @@ -4845,19 +4858,19 @@ msgstr "Thêm ghi chú" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "Cửa hàng ở vị trí mặc định" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "Cửa hàng đã nhận hàng" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "Cửa hàng đã nhận hàng" msgid "Batch Code" msgstr "Mã lô hàng" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "Số sê-ri" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "Đóng gói" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "Ghi chú" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "SKU" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "SKU" msgid "Received" msgstr "Đã nhận" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "Nhận hạng mục" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "" @@ -10361,10 +10374,6 @@ msgstr "Không tìm thấy tệp đính kèm" msgid "Drag attachment file here to upload" msgstr "" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "Hàng hóa" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "" @@ -10456,59 +10465,59 @@ msgstr "" msgid "Import parameters from a file" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "Có đơn vị" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "" diff --git a/src/frontend/src/locales/zh_Hans/messages.po b/src/frontend/src/locales/zh_Hans/messages.po index 8e95d4047e..ad5c380f28 100644 --- a/src/frontend/src/locales/zh_Hans/messages.po +++ b/src/frontend/src/locales/zh_Hans/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: zh\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -72,7 +72,7 @@ msgstr "取消" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "操作" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "否" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -251,7 +251,7 @@ msgstr "零件类别" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -578,7 +578,7 @@ msgstr "" #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -734,8 +734,8 @@ msgstr "输入条形码数据" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "扫描条形码" @@ -748,8 +748,8 @@ msgid "Barcode does not match the expected model type" msgstr "条形码与预期型号不匹配" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -820,7 +820,7 @@ msgstr "这将删除关联条形码的链接" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "解绑条形码" @@ -1456,23 +1456,23 @@ msgstr "图片下载成功" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "图片上传失败" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "图片已经上传成功" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "备注保存成功" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "保存记事失败" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" msgstr "错误保存笔记" @@ -1480,15 +1480,15 @@ msgstr "错误保存笔记" #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "保存备注" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" msgstr "关闭编辑器" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "启用编辑" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "插件" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -2001,16 +2001,25 @@ msgstr "选择包" msgid "{0} icons" msgstr "{0} 个图标" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "正在加载" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "未找到结果" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "项目" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "表格需要 modelRenderer 条目" @@ -2181,7 +2190,7 @@ msgstr "数据已成功导入" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "关闭" @@ -2912,15 +2921,19 @@ msgstr "附件" msgid "Notes" msgstr "备注" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" msgstr "插件已提供" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" msgstr "收起面板" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" msgstr "展开面板" @@ -3180,7 +3193,7 @@ msgstr "类别" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "序列号" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -4513,19 +4526,19 @@ msgstr "关于InvenTree项目" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" msgstr "替代零件" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" msgstr "编辑物料清单替代项" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" msgstr "添加替代项" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" msgstr "替代项已添加" @@ -4555,7 +4568,7 @@ msgstr "待完成数量" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4649,7 +4662,7 @@ msgstr "内部零件编码 IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "已分配" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "来源地点" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "选择分配库存的源位置" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "分配库存" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "分配的库存项目" @@ -4717,10 +4730,10 @@ msgstr "已全部消耗" msgid "Consumed" msgstr "已消耗" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" msgstr "请为此行项目选择项目编码" @@ -4770,27 +4783,27 @@ msgstr "订阅此类别的通知" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "选择位置" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "已选择项目目的地" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "已选择零件类别默认位置" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "已选择接收库存位置" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "已选择默认位置" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,7 +4811,7 @@ msgstr "已选择默认位置" msgid "Virtual Part" msgstr "虚拟零件" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." msgstr "该零件为虚拟件,不会接收实物库存。" @@ -4806,38 +4819,38 @@ msgstr "该零件为虚拟件,不会接收实物库存。" #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "设置位置" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "分配批号" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "设置位置" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "分配批号" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" msgstr "分配序列号" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" msgstr "设置到期日期" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "调整封包" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "更改状态" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "添加备注" @@ -4845,19 +4858,19 @@ msgstr "添加备注" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "存储在默认位置" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " msgstr "存储至行项目指定位置 " -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "存储已收到的库存" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "存储已收到的库存" msgid "Batch Code" msgstr "批号" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" msgstr "输入接收项目的批号" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "序列号" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" msgstr "输入接收项目的序列号" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "有效期至" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" msgstr "输入接收项目的到期日期" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "输入接收项目的到期日期" msgid "Packaging" msgstr "包装" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "备注" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "库存单位 (SKU)" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,11 +4935,11 @@ msgstr "库存单位 (SKU)" msgid "Received" msgstr "已接收" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "接收行项目" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" msgstr "物料已收货" @@ -4939,52 +4952,52 @@ msgid "Item received into stock" msgstr "已收到库存物品" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" msgstr "根据零件和数量计算的价格不一致 {0}" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" msgstr "检查发货" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" msgstr "将装运标记为已检查的货物,表明您已经验证这批装运的所有物品都是正确的" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" msgstr "发货单已标记为已核对" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" msgstr "取消核对发货单" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" msgstr "将发货单标记为未核对,表示该发货单需要进一步核查" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" msgstr "发货单已标记为未核对" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" msgstr "正在完成发货" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" msgstr "发货已成功完成" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "完成配送" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" msgstr "留空则使用订单地址" @@ -10361,10 +10374,6 @@ msgstr "找不到附件。" msgid "Drag attachment file here to upload" msgstr "拖拽附件文件到此处上传" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "项目" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "型号" @@ -10456,59 +10465,59 @@ msgstr "创建一个新参数" msgid "Import parameters from a file" msgstr "从文件导入参数" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "添加参数模板" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" msgstr "重复参数模板" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "删除零件参数模板" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "编辑参数模板" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "勾选框" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "显示复选框模板" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "有选项" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "显示有选项的模板" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "有单位" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "显示有单位的模板" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" msgstr "显示已启用的模板" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "型号类型" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" msgstr "按型号类型筛选" diff --git a/src/frontend/src/locales/zh_Hant/messages.po b/src/frontend/src/locales/zh_Hant/messages.po index 5ed9d3bd16..5e45645db1 100644 --- a/src/frontend/src/locales/zh_Hant/messages.po +++ b/src/frontend/src/locales/zh_Hant/messages.po @@ -8,7 +8,7 @@ msgstr "" "Language: zh\n" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-04-21 00:31\n" +"PO-Revision-Date: 2026-04-23 02:58\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -72,7 +72,7 @@ msgstr "取消" #: lib/components/RowActions.tsx:136 #: src/components/nav/NavigationDrawer.tsx:190 -#: src/forms/PurchaseOrderForms.tsx:891 +#: src/forms/PurchaseOrderForms.tsx:902 #: src/forms/StockForms.tsx:805 #: src/forms/StockForms.tsx:852 #: src/forms/StockForms.tsx:905 @@ -84,7 +84,7 @@ msgid "Actions" msgstr "操作" #: lib/components/SearchInput.tsx:34 -#: src/components/forms/fields/RelatedModelField.tsx:493 +#: src/components/forms/fields/RelatedModelField.tsx:523 #: src/components/nav/Header.tsx:190 #: src/components/wizards/ImportPartWizard.tsx:200 #: src/components/wizards/ImportPartWizard.tsx:233 @@ -126,9 +126,9 @@ msgstr "否" #: src/forms/BuildForms.tsx:669 #: src/forms/BuildForms.tsx:833 #: src/forms/BuildForms.tsx:936 -#: src/forms/PurchaseOrderForms.tsx:887 +#: src/forms/PurchaseOrderForms.tsx:898 #: src/forms/ReturnOrderForms.tsx:244 -#: src/forms/SalesOrderForms.tsx:429 +#: src/forms/SalesOrderForms.tsx:434 #: src/forms/StockForms.tsx:368 #: src/forms/StockForms.tsx:800 #: src/forms/StockForms.tsx:847 @@ -174,7 +174,7 @@ msgstr "零件" #: lib/enums/ModelInformation.tsx:39 msgid "Parameter" -msgstr "" +msgstr "參數" #: lib/enums/ModelInformation.tsx:40 #: src/components/panels/ParametersPanel.tsx:21 @@ -193,7 +193,7 @@ msgstr "參數模板" #: lib/enums/ModelInformation.tsx:46 #: src/pages/Index/Settings/AdminCenter/ParameterPanel.tsx:13 msgid "Parameter Templates" -msgstr "" +msgstr "參數模板" #: lib/enums/ModelInformation.tsx:52 msgid "Part Test Template" @@ -251,7 +251,7 @@ msgstr "零件類別" #: src/forms/BuildForms.tsx:512 #: src/forms/BuildForms.tsx:672 #: src/forms/BuildForms.tsx:834 -#: src/forms/SalesOrderForms.tsx:431 +#: src/forms/SalesOrderForms.tsx:436 #: src/pages/stock/StockDetail.tsx:1008 #: src/tables/ColumnRenderers.tsx:129 #: src/tables/part/PartTestResultTable.tsx:256 @@ -568,17 +568,17 @@ msgstr "選擇列表" #: lib/enums/ModelInformation.tsx:291 msgid "Selection Entry" -msgstr "" +msgstr "選取項目" #: lib/enums/ModelInformation.tsx:292 msgid "Selection Entries" -msgstr "" +msgstr "選取項目 (多筆)" #: lib/enums/ModelInformation.tsx:298 #: src/components/barcodes/BarcodeInput.tsx:114 #: src/components/buttons/StarredToggleButton.tsx:46 #: src/components/dashboard/DashboardLayout.tsx:281 -#: src/components/editors/NotesEditor.tsx:74 +#: src/components/editors/NotesEditor.tsx:81 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:158 #: src/components/forms/fields/ApiFormField.tsx:251 #: src/components/forms/fields/TableField.tsx:45 @@ -592,7 +592,7 @@ msgstr "" #: src/components/settings/SettingList.tsx:145 #: src/components/wizards/ImportPartWizard.tsx:574 #: src/components/wizards/ImportPartWizard.tsx:719 -#: src/forms/BomForms.tsx:74 +#: src/forms/BomForms.tsx:80 #: src/functions/auth.tsx:691 #: src/pages/ErrorPage.tsx:11 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:317 @@ -665,11 +665,11 @@ msgstr "請求已超時" #: lib/hooks/MonitorDataOutput.tsx:57 #: lib/hooks/MonitorDataOutput.tsx:116 msgid "Process failed" -msgstr "" +msgstr "處理失敗" #: lib/hooks/MonitorDataOutput.tsx:75 msgid "Process completed successfully" -msgstr "" +msgstr "處理成功完成" #: src/components/DashboardItemProxy.tsx:34 #~ msgid "Title" @@ -734,8 +734,8 @@ msgstr "輸入條碼資料" #: src/components/barcodes/BarcodeScanDialog.tsx:56 #: src/components/buttons/ScanButton.tsx:27 #: src/components/nav/NavigationDrawer.tsx:122 -#: src/forms/PurchaseOrderForms.tsx:507 -#: src/forms/PurchaseOrderForms.tsx:648 +#: src/forms/PurchaseOrderForms.tsx:518 +#: src/forms/PurchaseOrderForms.tsx:659 msgid "Scan Barcode" msgstr "掃描條碼" @@ -745,11 +745,11 @@ msgstr "找不到符合的項目" #: src/components/barcodes/BarcodeScanDialog.tsx:150 msgid "Barcode does not match the expected model type" -msgstr "" +msgstr "條碼與預期的型號不符" #: src/components/barcodes/BarcodeScanDialog.tsx:161 -#: src/components/editors/NotesEditor.tsx:84 -#: src/components/editors/NotesEditor.tsx:118 +#: src/components/editors/NotesEditor.tsx:91 +#: src/components/editors/NotesEditor.tsx:125 #: src/components/forms/ApiForm.tsx:495 #: src/components/wizards/ImportPartWizard.tsx:566 #: src/components/wizards/ImportPartWizard.tsx:691 @@ -761,12 +761,12 @@ msgstr "操作成功" #: src/components/barcodes/BarcodeScanDialog.tsx:167 msgid "Failed to handle barcode" -msgstr "" +msgstr "條碼處理失敗" #: src/components/barcodes/BarcodeScanDialog.tsx:183 #: src/pages/Index/Scan.tsx:127 msgid "Failed to scan barcode" -msgstr "" +msgstr "條碼掃描失敗" #: src/components/barcodes/QRCode.tsx:94 msgid "Low (7%)" @@ -820,7 +820,7 @@ msgstr "這將刪除關聯條碼的鏈接" #: src/components/barcodes/QRCode.tsx:205 #: src/components/items/ActionDropdown.tsx:192 -#: src/forms/PurchaseOrderForms.tsx:638 +#: src/forms/PurchaseOrderForms.tsx:649 msgid "Unlink Barcode" msgstr "解綁條碼" @@ -834,11 +834,11 @@ msgstr "在管理員界面打開" #: src/components/buttons/PrintingActions.tsx:56 msgid "Printing Labels" -msgstr "" +msgstr "列印標籤" #: src/components/buttons/PrintingActions.tsx:61 msgid "Printing Reports" -msgstr "" +msgstr "列印報告" #: src/components/buttons/PrintingActions.tsx:77 #~ msgid "Printing" @@ -895,7 +895,7 @@ msgstr "移除此行" #: src/components/buttons/SSOButton.tsx:40 msgid "You will be redirected to the provider for further actions." -msgstr "" +msgstr "您將被重新導向至提供者以進行後續操作。" #: src/components/buttons/SSOButton.tsx:44 #~ msgid "This provider is not full set up." @@ -923,15 +923,15 @@ msgstr "打開聚焦" #: src/components/buttons/StarredToggleButton.tsx:36 msgid "Subscription Updated" -msgstr "" +msgstr "訂閱已更新" #: src/components/buttons/StarredToggleButton.tsx:38 msgid "Subscription removed" -msgstr "" +msgstr "已移除訂閱" #: src/components/buttons/StarredToggleButton.tsx:38 msgid "Subscription added" -msgstr "" +msgstr "已新增訂閱" #: src/components/buttons/StarredToggleButton.tsx:57 #~ msgid "Unsubscribe from part" @@ -939,28 +939,28 @@ msgstr "" #: src/components/buttons/StarredToggleButton.tsx:66 msgid "Unsubscribe from notifications" -msgstr "" +msgstr "取消訂閱通知" #: src/components/buttons/StarredToggleButton.tsx:67 msgid "Subscribe to notifications" -msgstr "" +msgstr "訂閱通知" #: src/components/calendar/Calendar.tsx:118 #: src/components/calendar/Calendar.tsx:181 msgid "Calendar Filters" -msgstr "" +msgstr "日曆過濾器" #: src/components/calendar/Calendar.tsx:133 msgid "Previous month" -msgstr "" +msgstr "上個月" #: src/components/calendar/Calendar.tsx:142 msgid "Select month" -msgstr "" +msgstr "選擇月份" #: src/components/calendar/Calendar.tsx:163 msgid "Next month" -msgstr "" +msgstr "下個月" #: src/components/calendar/Calendar.tsx:178 #: src/tables/InvenTreeTableHeader.tsx:294 @@ -970,15 +970,15 @@ msgstr "" #: src/components/calendar/Calendar.tsx:194 #: src/tables/InvenTreeTableHeader.tsx:292 msgid "Export data" -msgstr "" +msgstr "匯出資料" #: src/components/calendar/OrderCalendar.tsx:132 msgid "Order Updated" -msgstr "" +msgstr "訂單已更新" #: src/components/calendar/OrderCalendar.tsx:142 msgid "Error updating order" -msgstr "" +msgstr "更新訂單時發生錯誤" #: src/components/calendar/OrderCalendar.tsx:178 #: src/tables/Filter.tsx:194 @@ -987,20 +987,20 @@ msgstr "逾期" #: src/components/dashboard/DashboardLayout.tsx:282 msgid "Failed to load dashboard widgets." -msgstr "" +msgstr "無法載入儀表板小工具。" #: src/components/dashboard/DashboardLayout.tsx:293 msgid "No Widgets Selected" -msgstr "" +msgstr "未選擇小工具" #: src/components/dashboard/DashboardLayout.tsx:296 msgid "Use the menu to add widgets to the dashboard" -msgstr "" +msgstr "使用選單將小工具新增至儀表板" #: src/components/dashboard/DashboardMenu.tsx:62 #: src/components/dashboard/DashboardMenu.tsx:138 msgid "Accept Layout" -msgstr "" +msgstr "接受版面配置" #: src/components/dashboard/DashboardMenu.tsx:94 #: src/components/nav/NavigationDrawer.tsx:64 @@ -1016,35 +1016,35 @@ msgstr "編輯佈局" #: src/components/dashboard/DashboardMenu.tsx:111 msgid "Add Widget" -msgstr "" +msgstr "新增小工具" #: src/components/dashboard/DashboardMenu.tsx:120 msgid "Remove Widgets" -msgstr "" +msgstr "移除小工具" #: src/components/dashboard/DashboardMenu.tsx:129 msgid "Clear Widgets" -msgstr "" +msgstr "清除小工具" #: src/components/dashboard/DashboardWidget.tsx:81 msgid "Remove this widget from the dashboard" -msgstr "" +msgstr "從儀表板移除此小工具" #: src/components/dashboard/DashboardWidgetDrawer.tsx:77 msgid "Filter dashboard widgets" -msgstr "" +msgstr "過濾儀表板小工具" #: src/components/dashboard/DashboardWidgetDrawer.tsx:98 msgid "Add this widget to the dashboard" -msgstr "" +msgstr "將此小工具新增至儀表板" #: src/components/dashboard/DashboardWidgetDrawer.tsx:123 msgid "No Widgets Available" -msgstr "" +msgstr "沒有可用的小工具" #: src/components/dashboard/DashboardWidgetDrawer.tsx:124 msgid "There are no more widgets available for the dashboard" -msgstr "" +msgstr "儀表板沒有更多可用的小工具" #: src/components/dashboard/DashboardWidgetLibrary.tsx:25 msgid "Subscribed Parts" @@ -1052,7 +1052,7 @@ msgstr "已訂購零件" #: src/components/dashboard/DashboardWidgetLibrary.tsx:26 msgid "Show the number of parts which you have subscribed to" -msgstr "" +msgstr "顯示您已訂閱的零件數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:32 msgid "Subscribed Categories" @@ -1060,15 +1060,15 @@ msgstr "已訂閲類別" #: src/components/dashboard/DashboardWidgetLibrary.tsx:33 msgid "Show the number of part categories which you have subscribed to" -msgstr "" +msgstr "顯示您已訂閱的零件類別數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:42 msgid "Invalid BOMs" -msgstr "" +msgstr "無效的 BOM" #: src/components/dashboard/DashboardWidgetLibrary.tsx:43 msgid "Assemblies requiring bill of materials validation" -msgstr "" +msgstr "需要驗證材料清單 (BOM) 的組件" #: src/components/dashboard/DashboardWidgetLibrary.tsx:54 #: src/tables/part/PartTable.tsx:264 @@ -1077,7 +1077,7 @@ msgstr "低庫存" #: src/components/dashboard/DashboardWidgetLibrary.tsx:56 msgid "Show the number of parts which are low on stock" -msgstr "" +msgstr "顯示庫存不足的零件" #: src/components/dashboard/DashboardWidgetLibrary.tsx:65 msgid "Required for Build Orders" @@ -1085,31 +1085,31 @@ msgstr "生產訂單所需的" #: src/components/dashboard/DashboardWidgetLibrary.tsx:67 msgid "Show parts which are required for active build orders" -msgstr "" +msgstr "顯示進行中生產訂單所需的零件" #: src/components/dashboard/DashboardWidgetLibrary.tsx:72 msgid "Expired Stock Items" -msgstr "" +msgstr "過期庫存項目" #: src/components/dashboard/DashboardWidgetLibrary.tsx:74 msgid "Show the number of stock items which have expired" -msgstr "" +msgstr "顯示已過期的庫存項目數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:80 msgid "Stale Stock Items" -msgstr "" +msgstr "陳舊庫存項目" #: src/components/dashboard/DashboardWidgetLibrary.tsx:82 msgid "Show the number of stock items which are stale" -msgstr "" +msgstr "顯示陳舊的庫存項目數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:88 msgid "Active Build Orders" -msgstr "" +msgstr "進行中的生產訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:90 msgid "Show the number of build orders which are currently active" -msgstr "" +msgstr "顯示目前進行中的生產訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:95 msgid "Overdue Build Orders" @@ -1117,23 +1117,23 @@ msgstr "逾期的生產訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:97 msgid "Show the number of build orders which are overdue" -msgstr "" +msgstr "顯示已逾期的生產訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:102 msgid "Assigned Build Orders" -msgstr "" +msgstr "已分配的生產訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:104 msgid "Show the number of build orders which are assigned to you" -msgstr "" +msgstr "顯示分配給您的生產訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:109 msgid "Active Sales Orders" -msgstr "" +msgstr "進行中的銷售訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:111 msgid "Show the number of sales orders which are currently active" -msgstr "" +msgstr "顯示目前進行中的銷售訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:116 msgid "Overdue Sales Orders" @@ -1141,32 +1141,32 @@ msgstr "逾期的銷售訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:118 msgid "Show the number of sales orders which are overdue" -msgstr "" +msgstr "顯示已逾期的銷售訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:123 msgid "Assigned Sales Orders" -msgstr "" +msgstr "已分配的銷售訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:125 msgid "Show the number of sales orders which are assigned to you" -msgstr "" +msgstr "顯示分配給您的銷售訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:130 #: src/pages/sales/SalesIndex.tsx:87 msgid "Pending Shipments" -msgstr "" +msgstr "待處理發貨" #: src/components/dashboard/DashboardWidgetLibrary.tsx:132 msgid "Show the number of pending sales order shipments" -msgstr "" +msgstr "顯示待處理的銷售訂單發貨數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:137 msgid "Active Purchase Orders" -msgstr "" +msgstr "進行中的採購訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:139 msgid "Show the number of purchase orders which are currently active" -msgstr "" +msgstr "顯示目前進行中的採購訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:144 msgid "Overdue Purchase Orders" @@ -1174,23 +1174,23 @@ msgstr "逾期的採購訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:146 msgid "Show the number of purchase orders which are overdue" -msgstr "" +msgstr "顯示已逾期的採購訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:151 msgid "Assigned Purchase Orders" -msgstr "" +msgstr "已分配的採購訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:153 msgid "Show the number of purchase orders which are assigned to you" -msgstr "" +msgstr "顯示分配給您的採購訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:158 msgid "Active Return Orders" -msgstr "" +msgstr "進行中的退貨訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:160 msgid "Show the number of return orders which are currently active" -msgstr "" +msgstr "顯示目前進行中的退貨訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:165 msgid "Overdue Return Orders" @@ -1198,15 +1198,15 @@ msgstr "逾期的退貨訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:167 msgid "Show the number of return orders which are overdue" -msgstr "" +msgstr "顯示已逾期的退貨訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:172 msgid "Assigned Return Orders" -msgstr "" +msgstr "已分配的退貨訂單" #: src/components/dashboard/DashboardWidgetLibrary.tsx:174 msgid "Show the number of return orders which are assigned to you" -msgstr "" +msgstr "顯示分配給您的退貨訂單數量" #: src/components/dashboard/DashboardWidgetLibrary.tsx:194 #: src/components/dashboard/widgets/GetStartedWidget.tsx:15 @@ -1222,11 +1222,11 @@ msgstr "開始使用 InvenTree" #: src/components/dashboard/DashboardWidgetLibrary.tsx:202 #: src/components/dashboard/widgets/NewsWidget.tsx:123 msgid "News Updates" -msgstr "" +msgstr "最新消息" #: src/components/dashboard/DashboardWidgetLibrary.tsx:203 msgid "The latest news from InvenTree" -msgstr "" +msgstr "InvenTree 的最新消息" #: src/components/dashboard/widgets/ColorToggleWidget.tsx:18 #: src/components/nav/MainMenu.tsx:93 @@ -1235,15 +1235,15 @@ msgstr "更改色彩模式" #: src/components/dashboard/widgets/ColorToggleWidget.tsx:23 msgid "Change the color mode of the user interface" -msgstr "" +msgstr "變更使用者介面的顏色模式" #: src/components/dashboard/widgets/LanguageSelectWidget.tsx:18 msgid "Change Language" -msgstr "" +msgstr "變更語言" #: src/components/dashboard/widgets/LanguageSelectWidget.tsx:23 msgid "Change the language of the user interface" -msgstr "" +msgstr "變更使用者介面的語言" #: src/components/dashboard/widgets/NewsWidget.tsx:60 #: src/components/nav/NotificationDrawer.tsx:94 @@ -1253,42 +1253,42 @@ msgstr "標記為已讀" #: src/components/dashboard/widgets/NewsWidget.tsx:115 msgid "Requires Superuser" -msgstr "" +msgstr "需要超級使用者" #: src/components/dashboard/widgets/NewsWidget.tsx:116 msgid "This widget requires superuser permissions" -msgstr "" +msgstr "此小工具需要超級使用者權限" #: src/components/dashboard/widgets/NewsWidget.tsx:133 msgid "No News" -msgstr "" +msgstr "沒有新聞" #: src/components/dashboard/widgets/NewsWidget.tsx:134 msgid "There are no unread news items" -msgstr "" +msgstr "沒有未讀的新聞項目" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:15 msgid "Generating Stocktake Report" -msgstr "" +msgstr "正在產生盤點報告" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:20 #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:53 #: src/pages/part/PartStockHistoryDetail.tsx:96 msgid "Generate Stocktake Report" -msgstr "" +msgstr "產生盤點報告" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:37 #: src/pages/part/PartStockHistoryDetail.tsx:108 msgid "Generate" -msgstr "" +msgstr "產生" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:64 msgid "Stocktake" -msgstr "" +msgstr "盤點" #: src/components/dashboard/widgets/StocktakeDashboardWidget.tsx:65 msgid "Generate a new stocktake report" -msgstr "" +msgstr "產生新的盤點報告" #: src/components/details/Details.tsx:117 #~ msgid "Email:" @@ -1309,7 +1309,7 @@ msgstr "超級用户" #: src/tables/settings/UserTable.tsx:285 #: src/tables/settings/UserTable.tsx:406 msgid "Administrator" -msgstr "" +msgstr "管理員" #: src/components/details/Details.tsx:130 #: src/pages/core/UserDetail.tsx:87 @@ -1320,7 +1320,7 @@ msgstr "" #: src/components/details/Details.tsx:131 msgid "Email: " -msgstr "" +msgstr "電子郵件: " #: src/components/details/Details.tsx:423 msgid "No name defined" @@ -1352,11 +1352,11 @@ msgstr "移除" #: src/components/details/DetailsImage.tsx:88 msgid "Image removed" -msgstr "" +msgstr "圖片已移除" #: src/components/details/DetailsImage.tsx:89 msgid "The image has been removed successfully" -msgstr "" +msgstr "圖片已成功移除" #: src/components/details/DetailsImage.tsx:115 #~ msgid "Drag and drop to upload" @@ -1364,7 +1364,7 @@ msgstr "" #: src/components/details/DetailsImage.tsx:157 msgid "Drag and drop to upload, or paste an image from the clipboard" -msgstr "" +msgstr "拖放以上傳,或從剪貼簿貼上圖片" #: src/components/details/DetailsImage.tsx:162 msgid "Click to select file(s)" @@ -1372,11 +1372,11 @@ msgstr "點擊選擇文件" #: src/components/details/DetailsImage.tsx:222 msgid "Image uploaded" -msgstr "" +msgstr "圖片已上傳" #: src/components/details/DetailsImage.tsx:223 msgid "Image has been uploaded successfully" -msgstr "" +msgstr "圖片已成功上傳" #: src/components/details/DetailsImage.tsx:230 #: src/tables/general/AttachmentTable.tsx:201 @@ -1456,39 +1456,39 @@ msgstr "圖片下載成功" #~ msgid "Part is virtual (not a physical part)" #~ msgstr "Part is virtual (not a physical part)" -#: src/components/editors/NotesEditor.tsx:75 +#: src/components/editors/NotesEditor.tsx:82 msgid "Image upload failed" msgstr "圖片上傳失敗" -#: src/components/editors/NotesEditor.tsx:85 +#: src/components/editors/NotesEditor.tsx:92 msgid "Image uploaded successfully" msgstr "圖片已經上傳成功" -#: src/components/editors/NotesEditor.tsx:119 +#: src/components/editors/NotesEditor.tsx:126 msgid "Notes saved successfully" msgstr "備註保存成功" -#: src/components/editors/NotesEditor.tsx:130 +#: src/components/editors/NotesEditor.tsx:138 msgid "Failed to save notes" msgstr "保存記事失敗" -#: src/components/editors/NotesEditor.tsx:133 +#: src/components/editors/NotesEditor.tsx:141 msgid "Error Saving Notes" -msgstr "" +msgstr "儲存備註時發生錯誤" #: src/components/editors/NotesEditor.tsx:151 #~ msgid "Disable Editing" #~ msgstr "Disable Editing" -#: src/components/editors/NotesEditor.tsx:153 +#: src/components/editors/NotesEditor.tsx:161 msgid "Save Notes" msgstr "保存備註" -#: src/components/editors/NotesEditor.tsx:172 +#: src/components/editors/NotesEditor.tsx:180 msgid "Close Editor" -msgstr "" +msgstr "關閉編輯器" -#: src/components/editors/NotesEditor.tsx:179 +#: src/components/editors/NotesEditor.tsx:187 msgid "Enable Editing" msgstr "啓用編輯" @@ -1510,7 +1510,7 @@ msgstr "代碼" #: src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx:50 msgid "Error rendering preview" -msgstr "" +msgstr "預覽彩現時發生錯誤" #: src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx:120 msgid "Preview not available, click \"Reload Preview\"." @@ -1534,7 +1534,7 @@ msgstr "保存模板時出錯" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:159 msgid "Could not load the template from the server." -msgstr "" +msgstr "無法從伺服器載入範本。" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:176 #: src/components/editors/TemplateEditor/TemplateEditor.tsx:319 @@ -1563,7 +1563,7 @@ msgstr "預覽已成功更新。" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:236 msgid "An unknown error occurred while rendering the preview." -msgstr "" +msgstr "彩現預覽時發生未知錯誤。" #: src/components/editors/TemplateEditor/TemplateEditor.tsx:263 #~ msgid "Save & Reload preview" @@ -1778,7 +1778,7 @@ msgstr "發送電子郵件" #: src/components/forms/AuthenticationForm.tsx:239 msgid "Passwords do not match" -msgstr "" +msgstr "密碼不符" #: src/components/forms/AuthenticationForm.tsx:256 msgid "Registration successful" @@ -1794,7 +1794,7 @@ msgstr "輸入錯誤" #: src/components/forms/AuthenticationForm.tsx:281 msgid "Check your input and try again. " -msgstr "" +msgstr "請檢查您的輸入並重試。" #: src/components/forms/AuthenticationForm.tsx:305 msgid "This will be used for a confirmation" @@ -1820,15 +1820,15 @@ msgstr "或使用 SSO" #: src/components/forms/AuthenticationForm.tsx:348 msgid "Registration not active" -msgstr "" +msgstr "註冊未啟用" #: src/components/forms/AuthenticationForm.tsx:349 msgid "This might be related to missing mail settings or could be a deliberate decision." -msgstr "" +msgstr "這可能與缺少郵件設定有關,或者是一個刻意的決定。" #: src/components/forms/DateTimeField.tsx:64 msgid "Select date and time" -msgstr "" +msgstr "選擇日期與時間" #: src/components/forms/HostOptionsForm.tsx:36 #: src/components/forms/HostOptionsForm.tsx:67 @@ -1878,12 +1878,12 @@ msgstr "保存" #: src/components/forms/InstanceOptions.tsx:59 msgid "Select Server" -msgstr "" +msgstr "選擇伺服器" #: src/components/forms/InstanceOptions.tsx:69 #: src/components/forms/InstanceOptions.tsx:93 msgid "Edit host options" -msgstr "" +msgstr "編輯主機選項" #: src/components/forms/InstanceOptions.tsx:71 #~ msgid "Edit possible host options" @@ -1891,7 +1891,7 @@ msgstr "" #: src/components/forms/InstanceOptions.tsx:77 msgid "Save host selection" -msgstr "" +msgstr "儲存主機選擇" #: src/components/forms/InstanceOptions.tsx:98 #~ msgid "Version: {0}" @@ -1935,8 +1935,8 @@ msgid "Plugins" msgstr "插件" #: src/components/forms/InstanceOptions.tsx:144 -#: src/tables/general/ParameterTemplateTable.tsx:157 -#: src/tables/general/ParameterTemplateTable.tsx:192 +#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:178 #: src/tables/part/PartTestTemplateTable.tsx:117 #: src/tables/settings/TemplateTable.tsx:285 #: src/tables/settings/TemplateTable.tsx:396 @@ -1946,11 +1946,11 @@ msgstr "已啓用" #: src/components/forms/InstanceOptions.tsx:144 msgid "Disabled" -msgstr "" +msgstr "已停用" #: src/components/forms/InstanceOptions.tsx:150 msgid "Worker" -msgstr "" +msgstr "工作執行緒" #: src/components/forms/InstanceOptions.tsx:151 #: src/tables/settings/FailedTasksTable.tsx:48 @@ -1959,19 +1959,19 @@ msgstr "已停止" #: src/components/forms/InstanceOptions.tsx:151 msgid "Running" -msgstr "" +msgstr "執行中" #: src/components/forms/fields/ApiFormField.tsx:206 msgid "Select file to upload" -msgstr "" +msgstr "選擇要上傳的檔案" #: src/components/forms/fields/AutoFillRightSection.tsx:47 msgid "Accept suggested value" -msgstr "" +msgstr "接受建議值" #: src/components/forms/fields/DateField.tsx:73 msgid "Select date" -msgstr "" +msgstr "選擇日期" #: src/components/forms/fields/IconField.tsx:83 msgid "No icon selected" @@ -2001,16 +2001,25 @@ msgstr "選擇包" msgid "{0} icons" msgstr "{0} 個圖標" -#: src/components/forms/fields/RelatedModelField.tsx:494 +#: src/components/forms/fields/RelatedModelField.tsx:524 #: src/components/modals/AboutInvenTreeModal.tsx:91 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:397 msgid "Loading" msgstr "正在加載" -#: src/components/forms/fields/RelatedModelField.tsx:496 +#: src/components/forms/fields/RelatedModelField.tsx:526 msgid "No results found" msgstr "找不到結果" +#: src/components/forms/fields/RelatedModelField.tsx:576 +#: src/tables/general/BarcodeScanTable.tsx:35 +msgid "Item" +msgstr "項目" + +#: src/components/forms/fields/RelatedModelField.tsx:577 +msgid "Create New {model}" +msgstr "建立新 {model}" + #: src/components/forms/fields/TableField.tsx:46 msgid "modelRenderer entry required for tables" msgstr "表格需要 modelRenderer 條目" @@ -2021,7 +2030,7 @@ msgstr "無可用條目" #: src/components/forms/fields/TableField.tsx:198 msgid "Add new row" -msgstr "" +msgstr "新增行" #: src/components/images/DetailsImage.tsx:252 #~ msgid "Select image" @@ -2151,7 +2160,7 @@ msgstr "映射列" #: src/components/importer/ImporterDrawer.tsx:46 msgid "Import Rows" -msgstr "" +msgstr "匯入資料行" #: src/components/importer/ImporterDrawer.tsx:47 msgid "Process Data" @@ -2163,7 +2172,7 @@ msgstr "完成導入" #: src/components/importer/ImporterDrawer.tsx:92 msgid "Failed to fetch import session data" -msgstr "" +msgstr "無法擷取匯入工作階段資料" #: src/components/importer/ImporterDrawer.tsx:97 #~ msgid "Cancel import session" @@ -2181,7 +2190,7 @@ msgstr "數據已成功導入" #: src/components/modals/AboutInvenTreeModal.tsx:200 #: src/components/modals/ServerInfoModal.tsx:134 #: src/components/wizards/ImportPartWizard.tsx:773 -#: src/forms/BomForms.tsx:137 +#: src/forms/BomForms.tsx:143 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:687 msgid "Close" msgstr "關閉" @@ -2222,7 +2231,7 @@ msgstr "條碼操作" #: src/components/items/ActionDropdown.tsx:176 msgid "View Barcode" -msgstr "" +msgstr "檢視條碼" #: src/components/items/ActionDropdown.tsx:178 msgid "View barcode" @@ -2263,7 +2272,7 @@ msgstr "重複項目" #: src/components/items/ColorToggle.tsx:17 msgid "Toggle color scheme" -msgstr "" +msgstr "切換色彩配置" #: src/components/items/DocTooltip.tsx:92 #: src/components/items/GettingStartedCarousel.tsx:20 @@ -2295,12 +2304,12 @@ msgstr "InvenTree Logo" #: src/components/items/LanguageSelect.tsx:44 msgid "Default Language" -msgstr "" +msgstr "預設語言" #: src/components/items/LanguageSelect.tsx:52 #: src/components/items/LanguageToggle.tsx:21 msgid "Select language" -msgstr "" +msgstr "選擇語言" #: src/components/items/OnlyStaff.tsx:10 #: src/components/modals/AboutInvenTreeModal.tsx:50 @@ -2309,7 +2318,7 @@ msgstr "" #: src/components/items/OnlyStaff.tsx:11 msgid "This information is only available for administrative users" -msgstr "" +msgstr "此資訊僅提供給管理員使用者" #: src/components/items/Placeholder.tsx:14 #~ msgid "This feature/button/site is a placeholder for a feature that is not implemented, only partial or intended for testing." @@ -2321,11 +2330,11 @@ msgstr "" #: src/components/items/RoleTable.tsx:81 msgid "Updating" -msgstr "" +msgstr "更新中" #: src/components/items/RoleTable.tsx:82 msgid "Updating group roles" -msgstr "" +msgstr "正在更新群組角色" #: src/components/items/RoleTable.tsx:118 #: src/components/settings/ConfigValueList.tsx:42 @@ -2338,20 +2347,20 @@ msgstr "已更新" #: src/components/items/RoleTable.tsx:119 msgid "Group roles updated" -msgstr "" +msgstr "群組角色已更新" #: src/components/items/RoleTable.tsx:135 msgid "Role" -msgstr "" +msgstr "角色" #: src/components/items/RoleTable.tsx:140 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:906 msgid "View" -msgstr "" +msgstr "檢視" #: src/components/items/RoleTable.tsx:145 msgid "Change" -msgstr "" +msgstr "變更" #: src/components/items/RoleTable.tsx:150 #: src/forms/StockForms.tsx:950 @@ -2361,19 +2370,19 @@ msgstr "添加" #: src/components/items/RoleTable.tsx:203 msgid "Reset group roles" -msgstr "" +msgstr "重設群組角色" #: src/components/items/RoleTable.tsx:212 msgid "Reset" -msgstr "" +msgstr "重設" #: src/components/items/RoleTable.tsx:215 msgid "Save group roles" -msgstr "" +msgstr "儲存群組角色" #: src/components/items/TransferList.tsx:65 msgid "No items" -msgstr "" +msgstr "沒有項目" #: src/components/items/TransferList.tsx:161 #: src/components/render/Stock.tsx:102 @@ -2390,7 +2399,7 @@ msgstr "可用的" #: src/components/items/TransferList.tsx:162 msgid "Selected" -msgstr "" +msgstr "已選擇" #: src/components/modals/AboutInvenTreeModal.tsx:103 #~ msgid "Your InvenTree version status is" @@ -2448,7 +2457,7 @@ msgstr "文檔" #: src/components/modals/AboutInvenTreeModal.tsx:176 msgid "Source Code" -msgstr "" +msgstr "原始碼" #: src/components/modals/AboutInvenTreeModal.tsx:177 msgid "Mobile App" @@ -2575,7 +2584,7 @@ msgstr "後台工作者" #: src/components/modals/ServerInfoModal.tsx:107 msgid "The background worker process is not running" -msgstr "" +msgstr "背景工作執行緒程序未執行" #: src/components/modals/ServerInfoModal.tsx:107 #~ msgid "The Background worker process is not running." @@ -2593,47 +2602,47 @@ msgstr "電子郵件設置" #: src/components/modals/ServerInfoModal.tsx:120 #: src/components/nav/Alerts.tsx:143 msgid "Email settings not configured." -msgstr "" +msgstr "尚未設定電子郵件設定。" #: src/components/nav/Alerts.tsx:57 msgid "Alerts" -msgstr "" +msgstr "警報" #: src/components/nav/Alerts.tsx:97 msgid "No issues detected" -msgstr "" +msgstr "未偵測到任何問題" #: src/components/nav/Alerts.tsx:122 msgid "The server is running in debug mode." -msgstr "" +msgstr "伺服器正在以除錯模式執行。" #: src/components/nav/Alerts.tsx:129 msgid "The background worker process is not running." -msgstr "" +msgstr "背景工作執行緒程序未執行。" #: src/components/nav/Alerts.tsx:134 msgid "Server Restart" -msgstr "" +msgstr "重新啟動伺服器" #: src/components/nav/Alerts.tsx:136 msgid "The server requires a restart to apply changes." -msgstr "" +msgstr "伺服器需要重新啟動以套用變更。" #: src/components/nav/Alerts.tsx:141 msgid "Email settings" -msgstr "" +msgstr "電子郵件設定" #: src/components/nav/Alerts.tsx:148 msgid "Database Migrations" -msgstr "" +msgstr "資料庫遷移" #: src/components/nav/Alerts.tsx:150 msgid "There are pending database migrations." -msgstr "" +msgstr "有待處理的資料庫遷移。" #: src/components/nav/Alerts.tsx:165 msgid "Learn more about {code}" -msgstr "" +msgstr "進一步了解 {code}" #: src/components/nav/Header.tsx:209 #: src/components/nav/NavigationDrawer.tsx:134 @@ -2651,15 +2660,15 @@ msgstr "通知" #: src/components/nav/Header.tsx:231 msgid "Superuser Mode" -msgstr "" +msgstr "超級使用者模式" #: src/components/nav/Header.tsx:231 msgid "Admin Mode" -msgstr "" +msgstr "管理員模式" #: src/components/nav/Header.tsx:237 msgid "The current user has elevated privileges and should not be used for regular usage." -msgstr "" +msgstr "目前使用者具有提升的權限,不應做為一般使用。" #: src/components/nav/Layout.tsx:144 msgid "Nothing found..." @@ -2689,7 +2698,7 @@ msgstr "設置" #: src/pages/Index/Settings/UserSettings.tsx:142 #: src/pages/Index/Settings/UserSettings.tsx:146 msgid "User Settings" -msgstr "" +msgstr "使用者設定" #: src/components/nav/MainMenu.tsx:61 #: src/pages/Index/Settings/UserSettings.tsx:145 @@ -2769,7 +2778,7 @@ msgstr "庫存" #: src/pages/build/BuildDetail.tsx:775 #: src/pages/build/BuildIndex.tsx:101 msgid "Manufacturing" -msgstr "" +msgstr "製造" #: src/components/nav/NavigationDrawer.tsx:91 #: src/defaults/links.tsx:54 @@ -2802,7 +2811,7 @@ msgstr "關於" #: src/components/nav/NavigationTree.tsx:212 msgid "Error loading navigation tree." -msgstr "" +msgstr "載入導覽樹狀結構時發生錯誤。" #: src/components/nav/NotificationDrawer.tsx:183 #: src/pages/Notifications.tsx:74 @@ -2819,19 +2828,19 @@ msgstr "您沒有未讀通知" #: src/components/nav/NotificationDrawer.tsx:238 msgid "Error loading notifications." -msgstr "" +msgstr "載入通知時發生錯誤。" #: src/components/nav/SearchDrawer.tsx:111 msgid "No Overview Available" -msgstr "" +msgstr "無可用總覽" #: src/components/nav/SearchDrawer.tsx:112 msgid "No overview available for this model type" -msgstr "" +msgstr "此模型類型沒有可用的總覽" #: src/components/nav/SearchDrawer.tsx:130 msgid "View all results" -msgstr "" +msgstr "檢視所有結果" #: src/components/nav/SearchDrawer.tsx:145 msgid "results" @@ -2839,7 +2848,7 @@ msgstr "結果" #: src/components/nav/SearchDrawer.tsx:149 msgid "Remove search group" -msgstr "" +msgstr "移除搜尋群組" #: src/components/nav/SearchDrawer.tsx:304 #: src/pages/company/ManufacturerPartDetail.tsx:179 @@ -2870,7 +2879,7 @@ msgstr "輸入搜索文本" #: src/components/nav/SearchDrawer.tsx:504 msgid "Refresh search results" -msgstr "" +msgstr "重新整理搜尋結果" #: src/components/nav/SearchDrawer.tsx:515 #: src/components/nav/SearchDrawer.tsx:522 @@ -2887,7 +2896,7 @@ msgstr "正則表達式搜索" #: src/components/nav/SearchDrawer.tsx:543 msgid "Notes search" -msgstr "" +msgstr "備註搜尋" #: src/components/nav/SearchDrawer.tsx:591 msgid "An error occurred during search query" @@ -2912,30 +2921,34 @@ msgstr "附件" msgid "Notes" msgstr "備註" -#: src/components/panels/PanelGroup.tsx:159 +#: src/components/panels/PanelGroup.tsx:160 msgid "Plugin Provided" -msgstr "" +msgstr "外掛程式提供" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:181 +msgid "You have unsaved changes, are you sure you want to navigate away from this panel?" +msgstr "您有未儲存的變更,確定要離開此面板嗎?" + +#: src/components/panels/PanelGroup.tsx:315 msgid "Collapse panels" -msgstr "" +msgstr "摺疊面板" -#: src/components/panels/PanelGroup.tsx:293 +#: src/components/panels/PanelGroup.tsx:315 msgid "Expand panels" -msgstr "" +msgstr "展開面板" #: src/components/plugins/LocateItemButton.tsx:68 #: src/components/plugins/LocateItemButton.tsx:88 msgid "Locate Item" -msgstr "" +msgstr "尋找項目" #: src/components/plugins/LocateItemButton.tsx:70 msgid "Item location requested" -msgstr "" +msgstr "已要求項目位置" #: src/components/plugins/PluginDrawer.tsx:47 msgid "Plugin Inactive" -msgstr "" +msgstr "外掛程式未啟用" #: src/components/plugins/PluginDrawer.tsx:50 msgid "Plugin is not active" @@ -2943,7 +2956,7 @@ msgstr "插件未激活" #: src/components/plugins/PluginDrawer.tsx:59 msgid "Plugin Information" -msgstr "" +msgstr "外掛程式資訊" #: src/components/plugins/PluginDrawer.tsx:73 #: src/forms/selectionListFields.tsx:102 @@ -3078,15 +3091,15 @@ msgstr "加載插件預覽出錯" #: src/components/plugins/RemoteComponent.tsx:111 msgid "Invalid source or function name" -msgstr "" +msgstr "無效的來源或函數名稱" #: src/components/plugins/RemoteComponent.tsx:143 msgid "Error Loading Content" -msgstr "" +msgstr "載入內容時發生錯誤" #: src/components/plugins/RemoteComponent.tsx:147 msgid "Error occurred while loading plugin content" -msgstr "" +msgstr "載入外掛程式內容時發生錯誤" #: src/components/render/Instance.tsx:238 #~ msgid "Unknown model: {model}" @@ -3094,7 +3107,7 @@ msgstr "" #: src/components/render/Instance.tsx:259 msgid "Unknown model: {model_name}" -msgstr "" +msgstr "未知的模型:{model_name}" #: src/components/render/ModelType.tsx:234 #~ msgid "Purchase Order Line Item" @@ -3180,7 +3193,7 @@ msgstr "類別" #: src/components/render/Stock.tsx:114 #: src/components/render/Stock.tsx:132 #: src/forms/BuildForms.tsx:835 -#: src/forms/PurchaseOrderForms.tsx:681 +#: src/forms/PurchaseOrderForms.tsx:692 #: src/forms/StockForms.tsx:801 #: src/forms/StockForms.tsx:848 #: src/forms/StockForms.tsx:901 @@ -3213,9 +3226,9 @@ msgstr "序列號" #: src/forms/BuildForms.tsx:267 #: src/forms/BuildForms.tsx:673 #: src/forms/BuildForms.tsx:837 -#: src/forms/PurchaseOrderForms.tsx:890 +#: src/forms/PurchaseOrderForms.tsx:901 #: src/forms/ReturnOrderForms.tsx:245 -#: src/forms/SalesOrderForms.tsx:432 +#: src/forms/SalesOrderForms.tsx:437 #: src/forms/StockForms.tsx:850 #: src/pages/part/PartStockHistoryDetail.tsx:61 #: src/pages/part/PartStockHistoryDetail.tsx:241 @@ -3258,15 +3271,15 @@ msgstr "批次" #: src/components/settings/ConfigValueList.tsx:36 msgid "Setting" -msgstr "" +msgstr "設定" #: src/components/settings/ConfigValueList.tsx:39 msgid "Source" -msgstr "" +msgstr "來源" #: src/components/settings/QuickAction.tsx:47 msgid "Act" -msgstr "" +msgstr "動作" #: src/components/settings/QuickAction.tsx:73 #: src/components/settings/QuickAction.tsx:113 @@ -3284,59 +3297,59 @@ msgstr "添加狀態" #: src/components/settings/QuickAction.tsx:85 msgid "Open an Issue" -msgstr "" +msgstr "開啟問題" #: src/components/settings/QuickAction.tsx:86 msgid "Report a bug or request a feature on GitHub" -msgstr "" +msgstr "在 GitHub 上回報錯誤或提出功能要求" #: src/components/settings/QuickAction.tsx:88 msgid "Open Issue" -msgstr "" +msgstr "開啟問題 (Issue)" #: src/components/settings/QuickAction.tsx:97 msgid "Add New Group" -msgstr "" +msgstr "新增群組" #: src/components/settings/QuickAction.tsx:98 msgid "Create a new group to manage your users" -msgstr "" +msgstr "建立一個新群組來管理您的使用者" #: src/components/settings/QuickAction.tsx:100 msgid "New Group" -msgstr "" +msgstr "新增群組" #: src/components/settings/QuickAction.tsx:105 msgid "Add New User" -msgstr "" +msgstr "新增使用者" #: src/components/settings/QuickAction.tsx:106 msgid "Create a new user to manage your groups" -msgstr "" +msgstr "建立一個新使用者來管理您的群組" #: src/components/settings/QuickAction.tsx:108 msgid "New User" -msgstr "" +msgstr "新增使用者" #: src/components/settings/QuickAction.tsx:114 msgid "Create a new project code to organize your items" -msgstr "" +msgstr "建立一個新的專案代碼來組織您的項目" #: src/components/settings/QuickAction.tsx:116 msgid "Add Code" -msgstr "" +msgstr "新增代碼" #: src/components/settings/QuickAction.tsx:121 msgid "Add Custom State" -msgstr "" +msgstr "新增自訂狀態" #: src/components/settings/QuickAction.tsx:122 msgid "Create a new custom state for your workflow" -msgstr "" +msgstr "為您的工作流程建立一個新的自訂狀態" #: src/components/settings/SettingItem.tsx:33 msgid "Do you want to proceed to change this setting?" -msgstr "" +msgstr "您要繼續變更此設定嗎?" #: src/components/settings/SettingItem.tsx:47 #: src/components/settings/SettingItem.tsx:100 @@ -3345,7 +3358,7 @@ msgstr "" #: src/components/settings/SettingItem.tsx:221 msgid "This setting requires confirmation" -msgstr "" +msgstr "此設定需要確認" #: src/components/settings/SettingList.tsx:74 msgid "Edit Setting" @@ -3353,7 +3366,7 @@ msgstr "編輯設置" #: src/components/settings/SettingList.tsx:87 msgid "Setting {key} updated successfully" -msgstr "" +msgstr "設定 {key} 已成功更新" #: src/components/settings/SettingList.tsx:120 msgid "Setting updated" @@ -3370,15 +3383,15 @@ msgstr "編輯設置時出錯" #: src/components/settings/SettingList.tsx:146 msgid "Error loading settings" -msgstr "" +msgstr "載入設定時發生錯誤" #: src/components/settings/SettingList.tsx:157 msgid "No Settings" -msgstr "" +msgstr "無設定" #: src/components/settings/SettingList.tsx:158 msgid "There are no configurable settings available" -msgstr "" +msgstr "沒有可用的可配置設定" #: src/components/settings/SettingList.tsx:197 msgid "No settings specified" @@ -3742,15 +3755,15 @@ msgstr "未指定設置" #: src/components/wizards/ImportPartWizard.tsx:105 msgid "Exact Match" -msgstr "" +msgstr "完全比對" #: src/components/wizards/ImportPartWizard.tsx:112 msgid "Current part" -msgstr "" +msgstr "目前零件" #: src/components/wizards/ImportPartWizard.tsx:118 msgid "Already Imported" -msgstr "" +msgstr "已匯入" #: src/components/wizards/ImportPartWizard.tsx:205 #: src/pages/company/CompanyDetail.tsx:137 @@ -3775,60 +3788,60 @@ msgstr "正在加載..." #: src/components/wizards/ImportPartWizard.tsx:223 msgid "Error fetching suppliers" -msgstr "" +msgstr "擷取供應商時發生錯誤" #: src/components/wizards/ImportPartWizard.tsx:224 msgid "Select supplier" -msgstr "" +msgstr "選擇供應商" #. placeholder {0}: searchResults.length #: src/components/wizards/ImportPartWizard.tsx:246 msgid "Found {0} results" -msgstr "" +msgstr "找到 {0} 個結果" #: src/components/wizards/ImportPartWizard.tsx:259 msgid "Import this part" -msgstr "" +msgstr "匯入此零件" #: src/components/wizards/ImportPartWizard.tsx:313 msgid "Are you sure you want to import this part into the selected category now?" -msgstr "" +msgstr "您確定現在要將此零件匯入選定的類別中嗎?" #: src/components/wizards/ImportPartWizard.tsx:326 msgid "Import Now" -msgstr "" +msgstr "立即匯入" #: src/components/wizards/ImportPartWizard.tsx:372 msgid "Select and edit the parameters you want to add to this part." -msgstr "" +msgstr "選擇並編輯您要新增至此零件的參數。" #: src/components/wizards/ImportPartWizard.tsx:379 msgid "Default category parameters" -msgstr "" +msgstr "預設類別參數" #: src/components/wizards/ImportPartWizard.tsx:391 msgid "Other parameters" -msgstr "" +msgstr "其他參數" #: src/components/wizards/ImportPartWizard.tsx:446 msgid "Add a new parameter" -msgstr "" +msgstr "新增參數" #: src/components/wizards/ImportPartWizard.tsx:468 msgid "Skip" -msgstr "" +msgstr "略過" #: src/components/wizards/ImportPartWizard.tsx:476 msgid "Create Parameters" -msgstr "" +msgstr "建立參數" #: src/components/wizards/ImportPartWizard.tsx:493 msgid "Create initial stock for the imported part." -msgstr "" +msgstr "為匯入的零件建立初始庫存。" #: src/components/wizards/ImportPartWizard.tsx:511 msgid "Next" -msgstr "" +msgstr "下一步" #: src/components/wizards/ImportPartWizard.tsx:540 #: src/pages/part/PartDetail.tsx:1058 @@ -3838,44 +3851,44 @@ msgstr "編輯零件" #: src/components/wizards/ImportPartWizard.tsx:567 msgid "Part imported successfully!" -msgstr "" +msgstr "零件已成功匯入!" #: src/components/wizards/ImportPartWizard.tsx:576 msgid "Failed to import part: " -msgstr "" +msgstr "匯入零件失敗:" #: src/components/wizards/ImportPartWizard.tsx:641 msgid "Are you sure, you want to import the supplier and manufacturer part into this part?" -msgstr "" +msgstr "您確定要將供應商和製造商零件匯入到此零件嗎?" #: src/components/wizards/ImportPartWizard.tsx:655 msgid "Import" -msgstr "" +msgstr "匯入" #: src/components/wizards/ImportPartWizard.tsx:692 msgid "Parameters created successfully!" -msgstr "" +msgstr "參數已成功建立!" #: src/components/wizards/ImportPartWizard.tsx:720 msgid "Failed to create parameters, please fix the errors and try again" -msgstr "" +msgstr "無法建立參數,請修正錯誤後重試" #. placeholder {0}: supplierPart?.supplier #: src/components/wizards/ImportPartWizard.tsx:740 msgid "Part imported successfully from supplier {0}." -msgstr "" +msgstr "已成功從供應商 {0} 匯入零件。" #: src/components/wizards/ImportPartWizard.tsx:753 msgid "Open Part" -msgstr "" +msgstr "開啟零件" #: src/components/wizards/ImportPartWizard.tsx:760 msgid "Open Supplier Part" -msgstr "" +msgstr "開啟供應商零件" #: src/components/wizards/ImportPartWizard.tsx:767 msgid "Open Manufacturer Part" -msgstr "" +msgstr "開啟製造商零件" #: src/components/wizards/ImportPartWizard.tsx:797 #: src/tables/part/PartTable.tsx:499 @@ -3884,35 +3897,35 @@ msgstr "" #: src/components/wizards/ImportPartWizard.tsx:803 msgid "Import Supplier Part" -msgstr "" +msgstr "匯入供應商零件" #: src/components/wizards/ImportPartWizard.tsx:805 msgid "Search Supplier Part" -msgstr "" +msgstr "搜尋供應商零件" #: src/components/wizards/ImportPartWizard.tsx:807 msgid "Confirm import" -msgstr "" +msgstr "確認匯入" #: src/components/wizards/ImportPartWizard.tsx:809 msgid "Done" -msgstr "" +msgstr "完成" #: src/components/wizards/OrderPartsWizard.tsx:75 msgid "Error fetching part requirements" -msgstr "" +msgstr "擷取零件需求時發生錯誤" #: src/components/wizards/OrderPartsWizard.tsx:113 msgid "Requirements" -msgstr "" +msgstr "需求" #: src/components/wizards/OrderPartsWizard.tsx:117 msgid "Build Requirements" -msgstr "" +msgstr "生產需求" #: src/components/wizards/OrderPartsWizard.tsx:123 msgid "Sales Requirements" -msgstr "" +msgstr "銷售需求" #: src/components/wizards/OrderPartsWizard.tsx:129 #: src/forms/StockForms.tsx:903 @@ -3934,19 +3947,19 @@ msgstr "入庫" #: src/components/wizards/OrderPartsWizard.tsx:146 #: src/tables/build/BuildLineTable.tsx:406 msgid "Required Quantity" -msgstr "" +msgstr "所需數量" #: src/components/wizards/OrderPartsWizard.tsx:203 msgid "New Purchase Order" -msgstr "" +msgstr "新增採購訂單" #: src/components/wizards/OrderPartsWizard.tsx:205 msgid "Purchase order created" -msgstr "" +msgstr "採購訂單已建立" #: src/components/wizards/OrderPartsWizard.tsx:217 msgid "New Supplier Part" -msgstr "" +msgstr "新增供應商零件" #: src/components/wizards/OrderPartsWizard.tsx:219 #: src/tables/purchasing/SupplierPartTable.tsx:213 @@ -3956,79 +3969,79 @@ msgstr "供應商零件已更新" #: src/components/wizards/OrderPartsWizard.tsx:247 msgid "Add to Purchase Order" -msgstr "" +msgstr "新增至採購訂單" #: src/components/wizards/OrderPartsWizard.tsx:259 msgid "Part added to purchase order" -msgstr "" +msgstr "零件已新增至採購訂單" #: src/components/wizards/OrderPartsWizard.tsx:303 msgid "Select supplier part" -msgstr "" +msgstr "選擇供應商零件" #: src/components/wizards/OrderPartsWizard.tsx:323 msgid "Copy supplier part number" -msgstr "" +msgstr "複製供應商零件號碼" #: src/components/wizards/OrderPartsWizard.tsx:326 msgid "New supplier part" -msgstr "" +msgstr "新增供應商零件" #: src/components/wizards/OrderPartsWizard.tsx:350 msgid "Select purchase order" -msgstr "" +msgstr "選擇採購訂單" #: src/components/wizards/OrderPartsWizard.tsx:364 msgid "New purchase order" -msgstr "" +msgstr "新增採購訂單" #: src/components/wizards/OrderPartsWizard.tsx:420 msgid "Add to selected purchase order" -msgstr "" +msgstr "新增至選定的採購訂單" #: src/components/wizards/OrderPartsWizard.tsx:432 #: src/components/wizards/OrderPartsWizard.tsx:545 msgid "No parts selected" -msgstr "" +msgstr "未選擇任何零件" #: src/components/wizards/OrderPartsWizard.tsx:433 msgid "No purchaseable parts selected" -msgstr "" +msgstr "未選擇可採購的零件" #: src/components/wizards/OrderPartsWizard.tsx:469 msgid "Parts Added" -msgstr "" +msgstr "已新增零件" #: src/components/wizards/OrderPartsWizard.tsx:470 msgid "All selected parts added to a purchase order" -msgstr "" +msgstr "所有選定的零件已新增至採購訂單" #: src/components/wizards/OrderPartsWizard.tsx:546 msgid "You must select at least one part to order" -msgstr "" +msgstr "您必須至少選擇一個零件進行訂購" #: src/components/wizards/OrderPartsWizard.tsx:557 msgid "Supplier part is required" -msgstr "" +msgstr "供應商零件為必填項目" #: src/components/wizards/OrderPartsWizard.tsx:561 msgid "Quantity is required" -msgstr "" +msgstr "數量為必填項目" #: src/components/wizards/OrderPartsWizard.tsx:574 msgid "Invalid part selection" -msgstr "" +msgstr "無效的零件選擇" #: src/components/wizards/OrderPartsWizard.tsx:576 msgid "Please correct the errors in the selected parts" -msgstr "" +msgstr "請修正選定零件中的錯誤" #: src/components/wizards/OrderPartsWizard.tsx:587 #: src/tables/build/BuildLineTable.tsx:844 #: src/tables/part/PartTable.tsx:525 #: src/tables/sales/SalesOrderLineItemTable.tsx:368 msgid "Order Parts" -msgstr "" +msgstr "訂購零件" #: src/contexts/LanguageContext.tsx:22 #~ msgid "Arabic" @@ -4206,7 +4219,7 @@ msgstr "服務器信息" #: src/defaults/actions.tsx:66 #: src/defaults/links.tsx:169 msgid "About this InvenTree instance" -msgstr "" +msgstr "關於此 InvenTree 實例" #: src/defaults/actions.tsx:72 #: src/defaults/links.tsx:153 @@ -4228,39 +4241,39 @@ msgstr "打開主導航菜單" #: src/defaults/actions.tsx:87 msgid "Go to your user settings" -msgstr "" +msgstr "前往您的使用者設定" #: src/defaults/actions.tsx:96 msgid "Import Data" -msgstr "" +msgstr "匯入資料" #: src/defaults/actions.tsx:97 msgid "Import data from a file" -msgstr "" +msgstr "從檔案匯入資料" #: src/defaults/actions.tsx:107 msgid "Go to Purchase Orders" -msgstr "" +msgstr "前往採購訂單" #: src/defaults/actions.tsx:117 msgid "Go to Sales Orders" -msgstr "" +msgstr "前往銷售訂單" #: src/defaults/actions.tsx:128 msgid "Go to Return Orders" -msgstr "" +msgstr "前往退貨訂單" #: src/defaults/actions.tsx:138 msgid "Scan a barcode or QR code" -msgstr "" +msgstr "掃描條碼或 QR Code" #: src/defaults/actions.tsx:147 msgid "Go to Build Orders" -msgstr "" +msgstr "前往生產訂單" #: src/defaults/actions.tsx:156 msgid "Go to System Settings" -msgstr "" +msgstr "前往系統設定" #: src/defaults/actions.tsx:165 msgid "Go to the Admin Center" @@ -4268,7 +4281,7 @@ msgstr "轉到管理中心" #: src/defaults/actions.tsx:174 msgid "Manage InvenTree plugins" -msgstr "" +msgstr "管理 InvenTree 外掛程式" #: src/defaults/dashboardItems.tsx:29 #~ msgid "Latest Parts" @@ -4312,15 +4325,15 @@ msgstr "" #: src/defaults/defaultHostList.tsx:10 msgid "Local Server" -msgstr "" +msgstr "本機伺服器" #: src/defaults/defaultHostList.tsx:12 msgid "InvenTree Demo" -msgstr "" +msgstr "InvenTree 示範" #: src/defaults/defaultHostList.tsx:14 msgid "Current Server" -msgstr "" +msgstr "目前伺服器" #: src/defaults/links.tsx:17 #~ msgid "GitHub" @@ -4370,11 +4383,11 @@ msgstr "常見問題" #: src/defaults/links.tsx:114 msgid "GitHub Repository" -msgstr "" +msgstr "GitHub 儲存庫" #: src/defaults/links.tsx:117 msgid "InvenTree source code on GitHub" -msgstr "" +msgstr "GitHub 上的 InvenTree 原始碼" #: src/defaults/links.tsx:117 #~ msgid "Licenses for packages used by InvenTree" @@ -4391,11 +4404,11 @@ msgstr "系統信息" #: src/defaults/links.tsx:176 msgid "Licenses for dependencies of the InvenTree software" -msgstr "" +msgstr "InvenTree 軟體相依套件的授權" #: src/defaults/links.tsx:187 msgid "About the InvenTree Project" -msgstr "" +msgstr "關於 InvenTree 專案" #: src/defaults/menuItems.tsx:7 #~ msgid "Open sourcea" @@ -4513,21 +4526,21 @@ msgstr "" #~ msgid "Are you sure you want to delete this attachment?" #~ msgstr "Are you sure you want to delete this attachment?" -#: src/forms/BomForms.tsx:114 +#: src/forms/BomForms.tsx:120 msgid "Substitute Part" -msgstr "" +msgstr "替代零件" -#: src/forms/BomForms.tsx:131 +#: src/forms/BomForms.tsx:137 msgid "Edit BOM Substitutes" -msgstr "" +msgstr "編輯 BOM 替代品" -#: src/forms/BomForms.tsx:138 +#: src/forms/BomForms.tsx:144 msgid "Add Substitute" -msgstr "" +msgstr "新增替代品" -#: src/forms/BomForms.tsx:139 +#: src/forms/BomForms.tsx:145 msgid "Substitute added" -msgstr "" +msgstr "已新增替代品" #: src/forms/BuildForms.tsx:112 #: src/forms/BuildForms.tsx:217 @@ -4550,12 +4563,12 @@ msgstr "生產產出" #: src/forms/BuildForms.tsx:366 msgid "Quantity to Complete" -msgstr "" +msgstr "要完成的數量" #: src/forms/BuildForms.tsx:368 #: src/forms/BuildForms.tsx:445 #: src/forms/BuildForms.tsx:514 -#: src/forms/PurchaseOrderForms.tsx:806 +#: src/forms/PurchaseOrderForms.tsx:817 #: src/forms/ReturnOrderForms.tsx:199 #: src/forms/ReturnOrderForms.tsx:246 #: src/forms/StockForms.tsx:721 @@ -4595,7 +4608,7 @@ msgstr "生產已完成" #: src/forms/BuildForms.tsx:443 msgid "Quantity to Scrap" -msgstr "" +msgstr "要報廢的數量" #: src/forms/BuildForms.tsx:463 #: src/forms/BuildForms.tsx:465 @@ -4604,11 +4617,11 @@ msgstr "報廢生產輸出" #: src/forms/BuildForms.tsx:468 msgid "Selected build outputs will be completed, but marked as scrapped" -msgstr "" +msgstr "選定的生產產出將被完成,但標記為已報廢" #: src/forms/BuildForms.tsx:470 msgid "Allocated stock items will be consumed" -msgstr "" +msgstr "已分配的庫存項目將被消耗" #: src/forms/BuildForms.tsx:470 #~ msgid "Remove line" @@ -4625,11 +4638,11 @@ msgstr "取消生產輸出" #: src/forms/BuildForms.tsx:528 msgid "Selected build outputs will be removed" -msgstr "" +msgstr "選定的生產產出將被移除" #: src/forms/BuildForms.tsx:530 msgid "Allocated stock items will be returned to stock" -msgstr "" +msgstr "已分配的庫存項目將被退回庫存" #: src/forms/BuildForms.tsx:537 msgid "Build outputs have been cancelled" @@ -4649,7 +4662,7 @@ msgstr "內部零件編碼 IPN" #: src/forms/BuildForms.tsx:671 #: src/forms/BuildForms.tsx:836 #: src/forms/BuildForms.tsx:937 -#: src/forms/SalesOrderForms.tsx:430 +#: src/forms/SalesOrderForms.tsx:435 #: src/pages/part/PartDetail.tsx:1006 #: src/tables/build/BuildAllocatedStockTable.tsx:129 #: src/tables/build/BuildLineTable.tsx:188 @@ -4659,19 +4672,19 @@ msgid "Allocated" msgstr "已分配" #: src/forms/BuildForms.tsx:706 -#: src/forms/SalesOrderForms.tsx:419 +#: src/forms/SalesOrderForms.tsx:424 #: src/pages/build/BuildDetail.tsx:109 #: src/pages/build/BuildDetail.tsx:345 msgid "Source Location" msgstr "來源地點" #: src/forms/BuildForms.tsx:707 -#: src/forms/SalesOrderForms.tsx:420 +#: src/forms/SalesOrderForms.tsx:425 msgid "Select the source location for the stock allocation" msgstr "選擇分配庫存的源位置" #: src/forms/BuildForms.tsx:739 -#: src/forms/SalesOrderForms.tsx:461 +#: src/forms/SalesOrderForms.tsx:466 #: src/tables/build/BuildLineTable.tsx:587 #: src/tables/build/BuildLineTable.tsx:760 #: src/tables/build/BuildLineTable.tsx:859 @@ -4682,7 +4695,7 @@ msgid "Allocate Stock" msgstr "分配庫存" #: src/forms/BuildForms.tsx:742 -#: src/forms/SalesOrderForms.tsx:466 +#: src/forms/SalesOrderForms.tsx:471 msgid "Stock items allocated" msgstr "分配的庫存項目" @@ -4698,7 +4711,7 @@ msgstr "分配的庫存項目" #: src/tables/build/BuildLineTable.tsx:770 #: src/tables/build/BuildLineTable.tsx:893 msgid "Consume Stock" -msgstr "" +msgstr "消耗庫存" #: src/forms/BuildForms.tsx:856 #: src/forms/BuildForms.tsx:957 @@ -4709,20 +4722,20 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:516 #: src/tables/part/PartBuildAllocationsTable.tsx:101 msgid "Fully consumed" -msgstr "" +msgstr "完全消耗" #: src/forms/BuildForms.tsx:938 #: src/tables/build/BuildLineTable.tsx:193 #: src/tables/stock/StockItemTable.tsx:221 msgid "Consumed" -msgstr "" +msgstr "已消耗" -#: src/forms/CommonForms.tsx:93 -#: src/forms/PurchaseOrderForms.tsx:173 +#: src/forms/CommonForms.tsx:94 +#: src/forms/PurchaseOrderForms.tsx:179 #: src/forms/ReturnOrderForms.tsx:140 -#: src/forms/SalesOrderForms.tsx:191 +#: src/forms/SalesOrderForms.tsx:196 msgid "Select project code for this line item" -msgstr "" +msgstr "選擇此明細項目的專案代碼" #: src/forms/CompanyForms.tsx:150 #~ msgid "Company updated" @@ -4739,7 +4752,7 @@ msgstr "已訂閲" #: src/forms/PartForms.tsx:102 msgid "Subscribe to notifications for this part" -msgstr "" +msgstr "訂閱此零件的通知" #: src/forms/PartForms.tsx:108 #~ msgid "Part created" @@ -4755,7 +4768,7 @@ msgstr "上級零件類別" #: src/forms/PartForms.tsx:231 msgid "Subscribe to notifications for this category" -msgstr "" +msgstr "訂閱此類別的通知" #: src/forms/PurchaseOrderForms.tsx:421 #~ msgid "Assign Batch Code{0}" @@ -4770,27 +4783,27 @@ msgstr "" #~ msgid "Remove item from list" #~ msgstr "Remove item from list" -#: src/forms/PurchaseOrderForms.tsx:454 +#: src/forms/PurchaseOrderForms.tsx:465 msgid "Choose Location" msgstr "選擇位置" -#: src/forms/PurchaseOrderForms.tsx:462 +#: src/forms/PurchaseOrderForms.tsx:473 msgid "Item Destination selected" msgstr "已選擇項目目的地" -#: src/forms/PurchaseOrderForms.tsx:472 +#: src/forms/PurchaseOrderForms.tsx:483 msgid "Part category default location selected" msgstr "已選擇零件類別默認位置" -#: src/forms/PurchaseOrderForms.tsx:482 +#: src/forms/PurchaseOrderForms.tsx:493 msgid "Received stock location selected" msgstr "已選擇接收庫存位置" -#: src/forms/PurchaseOrderForms.tsx:490 +#: src/forms/PurchaseOrderForms.tsx:501 msgid "Default location selected" msgstr "已選擇默認位置" -#: src/forms/PurchaseOrderForms.tsx:537 +#: src/forms/PurchaseOrderForms.tsx:548 #: src/pages/part/PartDetail.tsx:640 #: src/pages/part/PartDetail.tsx:1042 #: src/tables/bom/BomTable.tsx:144 @@ -4798,46 +4811,46 @@ msgstr "已選擇默認位置" msgid "Virtual Part" msgstr "虛擬零件" -#: src/forms/PurchaseOrderForms.tsx:538 +#: src/forms/PurchaseOrderForms.tsx:549 msgid "This part is virtual, no physical stock will be received." -msgstr "" +msgstr "此零件是虛擬的,將不會收到任何實體庫存。" #: src/forms/PurchaseOrderForms.tsx:566 #~ msgid "Serial numbers" #~ msgstr "Serial numbers" -#: src/forms/PurchaseOrderForms.tsx:573 -msgid "Set Location" -msgstr "設置位置" - -#: src/forms/PurchaseOrderForms.tsx:582 -msgid "Assign Batch Code" -msgstr "" - #: src/forms/PurchaseOrderForms.tsx:582 #~ msgid "Store at line item destination" #~ msgstr "Store at line item destination" -#: src/forms/PurchaseOrderForms.tsx:592 +#: src/forms/PurchaseOrderForms.tsx:584 +msgid "Set Location" +msgstr "設置位置" + +#: src/forms/PurchaseOrderForms.tsx:593 +msgid "Assign Batch Code" +msgstr "分配批次代碼" + +#: src/forms/PurchaseOrderForms.tsx:603 msgid "Assign Serial Numbers" -msgstr "" +msgstr "分配序號" -#: src/forms/PurchaseOrderForms.tsx:604 +#: src/forms/PurchaseOrderForms.tsx:615 msgid "Set Expiry Date" -msgstr "" +msgstr "設定到期日" -#: src/forms/PurchaseOrderForms.tsx:613 +#: src/forms/PurchaseOrderForms.tsx:624 #: src/forms/StockForms.tsx:702 msgid "Adjust Packaging" msgstr "調整封包" -#: src/forms/PurchaseOrderForms.tsx:622 +#: src/forms/PurchaseOrderForms.tsx:633 #: src/forms/StockForms.tsx:693 #: src/hooks/UseStockAdjustActions.tsx:152 msgid "Change Status" msgstr "更改狀態" -#: src/forms/PurchaseOrderForms.tsx:629 +#: src/forms/PurchaseOrderForms.tsx:640 msgid "Add Note" msgstr "添加備註" @@ -4845,19 +4858,19 @@ msgstr "添加備註" #~ msgid "Receive line items" #~ msgstr "Receive line items" -#: src/forms/PurchaseOrderForms.tsx:696 +#: src/forms/PurchaseOrderForms.tsx:707 msgid "Store at default location" msgstr "存儲在默認位置" -#: src/forms/PurchaseOrderForms.tsx:711 +#: src/forms/PurchaseOrderForms.tsx:722 msgid "Store at line item destination " -msgstr "" +msgstr "儲存在明細項目的目的地" -#: src/forms/PurchaseOrderForms.tsx:723 +#: src/forms/PurchaseOrderForms.tsx:734 msgid "Store with already received stock" msgstr "存儲已收到的庫存" -#: src/forms/PurchaseOrderForms.tsx:747 +#: src/forms/PurchaseOrderForms.tsx:758 #: src/pages/build/BuildDetail.tsx:359 #: src/pages/stock/StockDetail.tsx:280 #: src/pages/stock/StockDetail.tsx:954 @@ -4870,30 +4883,30 @@ msgstr "存儲已收到的庫存" msgid "Batch Code" msgstr "批號" -#: src/forms/PurchaseOrderForms.tsx:748 +#: src/forms/PurchaseOrderForms.tsx:759 msgid "Enter batch code for received items" -msgstr "" +msgstr "輸入收貨項目的批次代碼" -#: src/forms/PurchaseOrderForms.tsx:761 +#: src/forms/PurchaseOrderForms.tsx:772 #: src/forms/StockForms.tsx:224 msgid "Serial Numbers" msgstr "序列號" -#: src/forms/PurchaseOrderForms.tsx:762 +#: src/forms/PurchaseOrderForms.tsx:773 msgid "Enter serial numbers for received items" -msgstr "" +msgstr "輸入收貨項目的序號" -#: src/forms/PurchaseOrderForms.tsx:779 +#: src/forms/PurchaseOrderForms.tsx:790 #: src/pages/stock/StockDetail.tsx:382 #: src/tables/stock/StockItemTable.tsx:148 msgid "Expiry Date" msgstr "有效期至" -#: src/forms/PurchaseOrderForms.tsx:780 +#: src/forms/PurchaseOrderForms.tsx:791 msgid "Enter an expiry date for received items" -msgstr "" +msgstr "輸入收貨項目的到期日" -#: src/forms/PurchaseOrderForms.tsx:792 +#: src/forms/PurchaseOrderForms.tsx:803 #: src/forms/StockForms.tsx:737 #: src/pages/company/SupplierPartDetail.tsx:173 #: src/pages/company/SupplierPartDetail.tsx:237 @@ -4902,19 +4915,19 @@ msgstr "" msgid "Packaging" msgstr "包裝" -#: src/forms/PurchaseOrderForms.tsx:816 +#: src/forms/PurchaseOrderForms.tsx:827 #: src/pages/company/SupplierPartDetail.tsx:121 #: src/tables/ColumnRenderers.tsx:517 msgid "Note" msgstr "備註" -#: src/forms/PurchaseOrderForms.tsx:888 +#: src/forms/PurchaseOrderForms.tsx:899 #: src/pages/company/SupplierPartDetail.tsx:139 #: src/tables/purchasing/SupplierPriceBreakTable.tsx:49 msgid "SKU" msgstr "庫存單位 (SKU)" -#: src/forms/PurchaseOrderForms.tsx:889 +#: src/forms/PurchaseOrderForms.tsx:900 #: src/tables/part/PartPurchaseOrdersTable.tsx:127 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:209 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:281 @@ -4922,13 +4935,13 @@ msgstr "庫存單位 (SKU)" msgid "Received" msgstr "已接收" -#: src/forms/PurchaseOrderForms.tsx:906 +#: src/forms/PurchaseOrderForms.tsx:917 msgid "Receive Line Items" msgstr "接收行項目" -#: src/forms/PurchaseOrderForms.tsx:912 +#: src/forms/PurchaseOrderForms.tsx:923 msgid "Items received" -msgstr "" +msgstr "已收到項目" #: src/forms/ReturnOrderForms.tsx:259 msgid "Receive Items" @@ -4939,54 +4952,54 @@ msgid "Item received into stock" msgstr "已收到庫存物品" #. placeholder {0}: salePrice ? `; suggested: (${salePrice})` : '.' -#: src/forms/SalesOrderForms.tsx:183 +#: src/forms/SalesOrderForms.tsx:188 msgid "Price based on part and quantity differs{0}" -msgstr "" +msgstr "根據零件和數量的價格不同{0}" -#: src/forms/SalesOrderForms.tsx:214 -#: src/forms/SalesOrderForms.tsx:216 +#: src/forms/SalesOrderForms.tsx:219 +#: src/forms/SalesOrderForms.tsx:221 #: src/tables/sales/SalesOrderShipmentTable.tsx:210 msgid "Check Shipment" -msgstr "" +msgstr "檢查發貨" -#: src/forms/SalesOrderForms.tsx:217 +#: src/forms/SalesOrderForms.tsx:222 msgid "Marking the shipment as checked indicates that you have verified that all items included in this shipment are correct" -msgstr "" +msgstr "將發貨標記為已檢查表示您已驗證此發貨中包含的所有項目均正確無誤" -#: src/forms/SalesOrderForms.tsx:227 +#: src/forms/SalesOrderForms.tsx:232 msgid "Shipment marked as checked" -msgstr "" +msgstr "發貨已標記為已檢查" -#: src/forms/SalesOrderForms.tsx:242 -#: src/forms/SalesOrderForms.tsx:244 +#: src/forms/SalesOrderForms.tsx:247 +#: src/forms/SalesOrderForms.tsx:249 #: src/tables/sales/SalesOrderShipmentTable.tsx:223 msgid "Uncheck Shipment" -msgstr "" +msgstr "取消勾選發貨" -#: src/forms/SalesOrderForms.tsx:245 +#: src/forms/SalesOrderForms.tsx:250 msgid "Marking the shipment as unchecked indicates that the shipment requires further verification" -msgstr "" +msgstr "將發貨標記為未檢查表示發貨需要進一步驗證" -#: src/forms/SalesOrderForms.tsx:255 +#: src/forms/SalesOrderForms.tsx:260 msgid "Shipment marked as unchecked" -msgstr "" +msgstr "發貨已標記為未檢查" -#: src/forms/SalesOrderForms.tsx:273 +#: src/forms/SalesOrderForms.tsx:278 msgid "Completing shipment" -msgstr "" +msgstr "完成發貨" -#: src/forms/SalesOrderForms.tsx:274 +#: src/forms/SalesOrderForms.tsx:279 msgid "Shipment completed successfully" -msgstr "" +msgstr "發貨已順利完成" -#: src/forms/SalesOrderForms.tsx:281 +#: src/forms/SalesOrderForms.tsx:286 #: src/tables/sales/SalesOrderShipmentTable.tsx:233 msgid "Complete Shipment" msgstr "完成配送" -#: src/forms/SalesOrderForms.tsx:527 +#: src/forms/SalesOrderForms.tsx:532 msgid "Leave blank to use the order address" -msgstr "" +msgstr "留空以使用訂單地址" #: src/forms/StockForms.tsx:110 #~ msgid "Create Stock Item" @@ -5025,7 +5038,7 @@ msgstr "選擇要安裝的零件" #: src/forms/StockForms.tsx:495 msgid "Confirm Stock Transfer" -msgstr "" +msgstr "確認庫存轉移" #: src/forms/StockForms.tsx:681 msgid "Move to default location" @@ -5051,11 +5064,11 @@ msgstr "添加庫存" #: src/forms/StockForms.tsx:1296 msgid "Stock added" -msgstr "" +msgstr "庫存已新增" #: src/forms/StockForms.tsx:1299 msgid "Increase the quantity of the selected stock items by a given amount." -msgstr "" +msgstr "增加選定庫存項目的數量。" #: src/forms/StockForms.tsx:1310 #: src/hooks/UseStockAdjustActions.tsx:122 @@ -5064,11 +5077,11 @@ msgstr "移除庫存" #: src/forms/StockForms.tsx:1311 msgid "Stock removed" -msgstr "" +msgstr "庫存已移除" #: src/forms/StockForms.tsx:1314 msgid "Decrease the quantity of the selected stock items by a given amount." -msgstr "" +msgstr "減少選定庫存項目的數量。" #: src/forms/StockForms.tsx:1325 #: src/hooks/UseStockAdjustActions.tsx:132 @@ -5077,24 +5090,24 @@ msgstr "轉移庫存" #: src/forms/StockForms.tsx:1326 msgid "Stock transferred" -msgstr "" +msgstr "庫存已轉移" #: src/forms/StockForms.tsx:1329 msgid "Transfer selected items to the specified location." -msgstr "" +msgstr "將選定項目轉移到指定位置。" #: src/forms/StockForms.tsx:1340 #: src/hooks/UseStockAdjustActions.tsx:182 msgid "Return Stock" -msgstr "" +msgstr "退回庫存" #: src/forms/StockForms.tsx:1341 msgid "Stock returned" -msgstr "" +msgstr "庫存已退回" #: src/forms/StockForms.tsx:1344 msgid "Return selected items into stock, to the specified location." -msgstr "" +msgstr "將選定項目退回庫存,至指定位置。" #: src/forms/StockForms.tsx:1355 #: src/hooks/UseStockAdjustActions.tsx:102 @@ -5103,11 +5116,11 @@ msgstr "庫存數量" #: src/forms/StockForms.tsx:1356 msgid "Stock counted" -msgstr "" +msgstr "庫存已盤點" #: src/forms/StockForms.tsx:1359 msgid "Count the selected stock items, and adjust the quantity accordingly." -msgstr "" +msgstr "盤點選定的庫存項目,並相應地調整數量。" #: src/forms/StockForms.tsx:1370 msgid "Change Stock Status" @@ -5115,20 +5128,20 @@ msgstr "更改庫存狀態" #: src/forms/StockForms.tsx:1371 msgid "Stock status changed" -msgstr "" +msgstr "庫存狀態已變更" #: src/forms/StockForms.tsx:1374 msgid "Change the status of the selected stock items." -msgstr "" +msgstr "變更選定庫存項目的狀態。" #: src/forms/StockForms.tsx:1397 #: src/hooks/UseStockAdjustActions.tsx:162 msgid "Change Batch Code" -msgstr "" +msgstr "變更批次代碼" #: src/forms/StockForms.tsx:1400 msgid "Change batch code for the selected stock items" -msgstr "" +msgstr "變更選定庫存項目的批次代碼" #: src/forms/StockForms.tsx:1417 #: src/hooks/UseStockAdjustActions.tsx:142 @@ -5137,31 +5150,31 @@ msgstr "合併庫存" #: src/forms/StockForms.tsx:1418 msgid "Stock merged" -msgstr "" +msgstr "庫存已合併" #: src/forms/StockForms.tsx:1420 msgid "Merge Stock Items" -msgstr "" +msgstr "合併庫存項目" #: src/forms/StockForms.tsx:1422 msgid "Merge operation cannot be reversed" -msgstr "" +msgstr "合併操作無法還原" #: src/forms/StockForms.tsx:1423 msgid "Tracking information may be lost when merging items" -msgstr "" +msgstr "合併項目時可能會遺失追蹤資訊" #: src/forms/StockForms.tsx:1424 msgid "Supplier information may be lost when merging items" -msgstr "" +msgstr "合併項目時可能會遺失供應商資訊" #: src/forms/StockForms.tsx:1442 msgid "Assign Stock to Customer" -msgstr "" +msgstr "將庫存分配給客戶" #: src/forms/StockForms.tsx:1443 msgid "Stock assigned to customer" -msgstr "" +msgstr "庫存已分配給客戶" #: src/forms/StockForms.tsx:1453 msgid "Delete Stock Items" @@ -5169,11 +5182,11 @@ msgstr "刪除庫存項" #: src/forms/StockForms.tsx:1454 msgid "Stock deleted" -msgstr "" +msgstr "庫存已刪除" #: src/forms/StockForms.tsx:1457 msgid "This operation will permanently delete the selected stock items." -msgstr "" +msgstr "此操作將永久刪除選定的庫存項目。" #: src/forms/StockForms.tsx:1466 msgid "Parent stock location" @@ -5181,27 +5194,27 @@ msgstr "上級庫存地點" #: src/forms/StockForms.tsx:1597 msgid "Find Serial Number" -msgstr "" +msgstr "尋找序號" #: src/forms/StockForms.tsx:1608 msgid "No matching items" -msgstr "" +msgstr "沒有符合的項目" #: src/forms/StockForms.tsx:1614 msgid "Multiple matching items" -msgstr "" +msgstr "多個符合的項目" #: src/forms/StockForms.tsx:1623 msgid "Invalid response from server" -msgstr "" +msgstr "伺服器回應無效" #: src/forms/selectionListFields.tsx:95 msgid "Entries" -msgstr "" +msgstr "項目" #: src/forms/selectionListFields.tsx:96 msgid "List of entries to choose from" -msgstr "" +msgstr "可供選擇的項目清單" #: src/forms/selectionListFields.tsx:100 #: src/pages/part/PartStockHistoryDetail.tsx:64 @@ -5215,7 +5228,7 @@ msgstr "值" #: src/forms/selectionListFields.tsx:101 msgid "Label" -msgstr "" +msgstr "標籤" #: src/functions/api.tsx:33 msgid "Bad request" @@ -5235,11 +5248,11 @@ msgstr "未找到" #: src/functions/api.tsx:45 msgid "Method not allowed" -msgstr "" +msgstr "不允許的方法" #: src/functions/api.tsx:48 msgid "Internal server error" -msgstr "" +msgstr "內部伺服器錯誤" #: src/functions/auth.tsx:34 #~ msgid "Error fetching token from server." @@ -5268,7 +5281,7 @@ msgstr "已登出" #: src/functions/auth.tsx:125 msgid "There was a conflicting session for this browser, which has been logged out." -msgstr "" +msgstr "此瀏覽器存在衝突的工作階段,已登出。" #: src/functions/auth.tsx:142 #~ msgid "Found an existing login - using it to log you in." @@ -5276,7 +5289,7 @@ msgstr "" #: src/functions/auth.tsx:143 msgid "No response from server." -msgstr "" +msgstr "伺服器沒有回應。" #: src/functions/auth.tsx:143 #~ msgid "Found an existing login - welcome back!" @@ -5284,11 +5297,11 @@ msgstr "" #: src/functions/auth.tsx:186 msgid "MFA Login successful" -msgstr "" +msgstr "MFA 登入成功" #: src/functions/auth.tsx:187 msgid "MFA details were automatically provided in the browser" -msgstr "" +msgstr "MFA 詳情已在瀏覽器中自動提供" #: src/functions/auth.tsx:221 msgid "Successfully logged out" @@ -5296,19 +5309,19 @@ msgstr "已成功登出" #: src/functions/auth.tsx:288 msgid "Language changed" -msgstr "" +msgstr "語言已變更" #: src/functions/auth.tsx:289 msgid "Your active language has been changed to the one set in your profile" -msgstr "" +msgstr "您的使用語言已變更為您個人資料中設定的語言" #: src/functions/auth.tsx:310 msgid "Theme changed" -msgstr "" +msgstr "佈景主題已變更" #: src/functions/auth.tsx:311 msgid "Your active theme has been changed to the one set in your profile" -msgstr "" +msgstr "您的使用佈景主題已變更為您個人資料中設定的佈景主題" #: src/functions/auth.tsx:346 msgid "Check your inbox for a reset link. This only works if you have an account. Check in spam too." @@ -5321,11 +5334,11 @@ msgstr "重置失敗" #: src/functions/auth.tsx:380 msgid "Already logged in" -msgstr "" +msgstr "已經登入" #: src/functions/auth.tsx:381 msgid "There is a conflicting session on the server for this browser. Please logout of that first." -msgstr "" +msgstr "此瀏覽器在伺服器上存在衝突的工作階段。請先登出該工作階段。" #: src/functions/auth.tsx:437 msgid "Logged In" @@ -5337,15 +5350,15 @@ msgstr "已成功登入" #: src/functions/auth.tsx:572 msgid "Failed to set up MFA" -msgstr "" +msgstr "設定 MFA 失敗" #: src/functions/auth.tsx:591 msgid "MFA Setup successful" -msgstr "" +msgstr "MFA 設定成功" #: src/functions/auth.tsx:592 msgid "MFA via TOTP has been set up successfully; you will need to login again." -msgstr "" +msgstr "已成功設定透過 TOTP 進行的 MFA;您將需要重新登入。" #: src/functions/auth.tsx:607 msgid "Password set" @@ -5358,15 +5371,15 @@ msgstr "密碼設置成功。您現在可以使用新密碼登錄" #: src/functions/auth.tsx:682 msgid "Password could not be changed" -msgstr "" +msgstr "密碼無法變更" #: src/functions/auth.tsx:700 msgid "The two password fields didn’t match" -msgstr "" +msgstr "兩個密碼欄位不相符" #: src/functions/auth.tsx:716 msgid "Password Changed" -msgstr "" +msgstr "密碼已變更" #: src/functions/forms.tsx:50 #~ msgid "Form method not provided" @@ -5390,15 +5403,15 @@ msgstr "" #: src/hooks/UseDataExport.tsx:34 msgid "Exporting Data" -msgstr "" +msgstr "正在匯出資料" #: src/hooks/UseDataExport.tsx:111 msgid "Export Data" -msgstr "" +msgstr "匯出資料" #: src/hooks/UseDataExport.tsx:114 msgid "Export" -msgstr "" +msgstr "匯出" #: src/hooks/UseForm.tsx:102 msgid "Item Created" @@ -5410,11 +5423,11 @@ msgstr "項目已更新" #: src/hooks/UseForm.tsx:143 msgid "Items Updated" -msgstr "" +msgstr "項目已更新" #: src/hooks/UseForm.tsx:145 msgid "Update multiple items" -msgstr "" +msgstr "更新多個項目" #: src/hooks/UseForm.tsx:175 msgid "Item Deleted" @@ -5430,51 +5443,51 @@ msgstr "確實要刪除此項目嗎?" #: src/hooks/UseStockAdjustActions.tsx:104 msgid "Count selected stock items" -msgstr "" +msgstr "盤點選定的庫存項目" #: src/hooks/UseStockAdjustActions.tsx:114 msgid "Add to selected stock items" -msgstr "" +msgstr "新增至選定的庫存項目" #: src/hooks/UseStockAdjustActions.tsx:124 msgid "Remove from selected stock items" -msgstr "" +msgstr "從選定的庫存項目中移除" #: src/hooks/UseStockAdjustActions.tsx:134 msgid "Transfer selected stock items" -msgstr "" +msgstr "轉移選定的庫存項目" #: src/hooks/UseStockAdjustActions.tsx:144 msgid "Merge selected stock items" -msgstr "" +msgstr "合併選定的庫存項目" #: src/hooks/UseStockAdjustActions.tsx:154 msgid "Change status of selected stock items" -msgstr "" +msgstr "變更選定庫存項目的狀態" #: src/hooks/UseStockAdjustActions.tsx:164 msgid "Change batch code of selected stock items" -msgstr "" +msgstr "變更選定庫存項目的批次代碼" #: src/hooks/UseStockAdjustActions.tsx:172 msgid "Assign Stock" -msgstr "" +msgstr "分配庫存" #: src/hooks/UseStockAdjustActions.tsx:174 msgid "Assign selected stock items to a customer" -msgstr "" +msgstr "將選定的庫存項目分配給客戶" #: src/hooks/UseStockAdjustActions.tsx:184 msgid "Return selected items into stock" -msgstr "" +msgstr "將選定的項目退回庫存" #: src/hooks/UseStockAdjustActions.tsx:192 msgid "Delete Stock" -msgstr "" +msgstr "刪除庫存" #: src/hooks/UseStockAdjustActions.tsx:194 msgid "Delete selected stock items" -msgstr "" +msgstr "刪除選定的庫存項目" #: src/hooks/UseStockAdjustActions.tsx:219 #: src/pages/part/PartDetail.tsx:1150 @@ -5484,39 +5497,39 @@ msgstr "庫存操作" #: src/pages/Auth/ChangePassword.tsx:32 #: src/pages/Auth/Reset.tsx:14 msgid "Reset Password" -msgstr "" +msgstr "重設密碼" #: src/pages/Auth/ChangePassword.tsx:46 msgid "Current Password" -msgstr "" +msgstr "目前密碼" #: src/pages/Auth/ChangePassword.tsx:47 msgid "Enter your current password" -msgstr "" +msgstr "輸入您目前的密碼" #: src/pages/Auth/ChangePassword.tsx:53 msgid "New Password" -msgstr "" +msgstr "新密碼" #: src/pages/Auth/ChangePassword.tsx:54 msgid "Enter your new password" -msgstr "" +msgstr "輸入您的新密碼" #: src/pages/Auth/ChangePassword.tsx:60 msgid "Confirm New Password" -msgstr "" +msgstr "確認新密碼" #: src/pages/Auth/ChangePassword.tsx:61 msgid "Confirm your new password" -msgstr "" +msgstr "確認您的新密碼" #: src/pages/Auth/ChangePassword.tsx:80 msgid "Confirm" -msgstr "" +msgstr "確認" #: src/pages/Auth/Layout.tsx:59 msgid "Log off" -msgstr "" +msgstr "登出" #: src/pages/Auth/LoggedIn.tsx:19 msgid "Checking if you are already logged in" @@ -5540,7 +5553,7 @@ msgstr "登錄" #: src/pages/Auth/Login.tsx:113 msgid "Logging you in" -msgstr "" +msgstr "正在為您登入" #: src/pages/Auth/Login.tsx:120 msgid "Don't have an account?" @@ -5562,36 +5575,36 @@ msgstr "沒有帳户?" #: src/pages/Auth/MFA.tsx:29 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:86 msgid "Multi-Factor Authentication" -msgstr "" +msgstr "多重驗證" #: src/pages/Auth/MFA.tsx:33 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:219 msgid "TOTP Code" -msgstr "" +msgstr "TOTP 代碼" #: src/pages/Auth/MFA.tsx:35 msgid "Enter one of your codes: {mfa_types}" -msgstr "" +msgstr "輸入您的一組代碼:{mfa_types}" #: src/pages/Auth/MFA.tsx:42 msgid "Remember this device" -msgstr "" +msgstr "記住此裝置" #: src/pages/Auth/MFA.tsx:44 msgid "If enabled, you will not be asked for MFA on this device for 30 days." -msgstr "" +msgstr "若啟用,您在 30 天內將不會在此裝置上被要求進行 MFA。" #: src/pages/Auth/MFA.tsx:53 msgid "Log in" -msgstr "" +msgstr "登入" #: src/pages/Auth/MFASetup.tsx:23 msgid "MFA Setup Required" -msgstr "" +msgstr "需要設定 MFA" #: src/pages/Auth/MFASetup.tsx:34 msgid "Add TOTP" -msgstr "" +msgstr "新增 TOTP" #: src/pages/Auth/Register.tsx:23 msgid "Go back to login" @@ -5605,11 +5618,11 @@ msgstr "返回登錄界面" #: src/pages/Auth/ResetPassword.tsx:22 #: src/pages/Auth/VerifyEmail.tsx:19 msgid "Key invalid" -msgstr "" +msgstr "密鑰無效" #: src/pages/Auth/ResetPassword.tsx:23 msgid "You need to provide a valid key to set a new password. Check your inbox for a reset link." -msgstr "" +msgstr "您需要提供有效的密鑰來設定新密碼。請檢查您的收件匣以獲取重設連結。" #: src/pages/Auth/ResetPassword.tsx:30 #~ msgid "Token invalid" @@ -5625,11 +5638,11 @@ msgstr "設置新密碼" #: src/pages/Auth/ResetPassword.tsx:35 msgid "The desired new password" -msgstr "" +msgstr "期望的新密碼" #: src/pages/Auth/ResetPassword.tsx:44 msgid "Send Password" -msgstr "" +msgstr "傳送密碼" #: src/pages/Auth/Set-Password.tsx:49 #~ msgid "No token provided" @@ -5641,15 +5654,15 @@ msgstr "" #: src/pages/Auth/VerifyEmail.tsx:20 msgid "You need to provide a valid key." -msgstr "" +msgstr "您需要提供有效的密鑰。" #: src/pages/Auth/VerifyEmail.tsx:28 msgid "Verify Email" -msgstr "" +msgstr "驗證電子郵件" #: src/pages/Auth/VerifyEmail.tsx:30 msgid "Verify" -msgstr "" +msgstr "驗證" #. placeholder {0}: error.statusText #: src/pages/ErrorPage.tsx:16 @@ -5818,19 +5831,19 @@ msgstr "發生意外錯誤。" #: src/pages/Index/Scan.tsx:63 msgid "Item already scanned" -msgstr "" +msgstr "項目已掃描" #: src/pages/Index/Scan.tsx:80 msgid "API Error" -msgstr "" +msgstr "API 錯誤" #: src/pages/Index/Scan.tsx:81 msgid "Failed to fetch instance data" -msgstr "" +msgstr "無法獲取實例資料" #: src/pages/Index/Scan.tsx:128 msgid "Scan Error" -msgstr "" +msgstr "掃描錯誤" #: src/pages/Index/Scan.tsx:160 msgid "Selected elements are not known" @@ -5842,7 +5855,7 @@ msgstr "選擇多個對象類型" #: src/pages/Index/Scan.tsx:175 msgid "Actions ... " -msgstr "" +msgstr "操作..." #: src/pages/Index/Scan.tsx:175 #~ msgid "Actions ..." @@ -5851,11 +5864,11 @@ msgstr "" #: src/pages/Index/Scan.tsx:192 #: src/pages/Index/Scan.tsx:196 msgid "Barcode Scanning" -msgstr "" +msgstr "條碼掃描" #: src/pages/Index/Scan.tsx:205 msgid "Barcode Input" -msgstr "" +msgstr "條碼輸入" #: src/pages/Index/Scan.tsx:212 msgid "Action" @@ -5863,11 +5876,11 @@ msgstr "操作" #: src/pages/Index/Scan.tsx:215 msgid "No Items Selected" -msgstr "" +msgstr "未選擇項目" #: src/pages/Index/Scan.tsx:216 msgid "Scan and select items to perform actions" -msgstr "" +msgstr "掃描並選擇項目以執行操作" #: src/pages/Index/Scan.tsx:217 #~ msgid "Manual input" @@ -5884,7 +5897,7 @@ msgstr "已選擇 {0} 項" #: src/pages/Index/Scan.tsx:233 msgid "Scanned Items" -msgstr "" +msgstr "已掃描的項目" #: src/pages/Index/Scan.tsx:276 #~ msgid "Actions for {0}" @@ -5986,7 +5999,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:33 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:113 msgid "Edit Account Information" -msgstr "" +msgstr "編輯帳號資訊" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:34 #~ msgid "User details updated" @@ -5994,7 +6007,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:37 msgid "Account details updated" -msgstr "" +msgstr "帳號詳情已更新" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:46 #~ msgid "User Actions" @@ -6007,7 +6020,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:55 #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:136 msgid "Edit Profile Information" -msgstr "" +msgstr "編輯個人資料資訊" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:55 #~ msgid "Last name" @@ -6023,7 +6036,7 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:59 msgid "Profile details updated" -msgstr "" +msgstr "個人資料詳情已更新" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:61 #~ msgid "Last name: {0}" @@ -6060,108 +6073,108 @@ msgstr "顯示名稱" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:86 #: src/pages/core/UserDetail.tsx:127 msgid "Position" -msgstr "" +msgstr "職位" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:90 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:967 msgid "Type" -msgstr "" +msgstr "類型" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:91 #: src/pages/core/UserDetail.tsx:143 msgid "Organisation" -msgstr "" +msgstr "組織" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:92 msgid "Primary Group" -msgstr "" +msgstr "主要群組" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:104 msgid "Account Details" -msgstr "" +msgstr "帳號詳情" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:107 msgid "Account Actions" -msgstr "" +msgstr "帳號操作" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:111 msgid "Edit Account" -msgstr "" +msgstr "編輯帳號" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:117 #: src/tables/settings/UserTable.tsx:323 msgid "Change Password" -msgstr "" +msgstr "變更密碼" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:119 msgid "Change User Password" -msgstr "" +msgstr "變更使用者密碼" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:131 msgid "Profile Details" -msgstr "" +msgstr "個人資料詳情" #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:134 msgid "Edit Profile" -msgstr "" +msgstr "編輯個人資料" #. placeholder {0}: item.label #: src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx:153 msgid "{0}" -msgstr "" +msgstr "{0}" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:105 msgid "Reauthentication Succeeded" -msgstr "" +msgstr "重新驗證成功" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:106 msgid "You have been reauthenticated successfully." -msgstr "" +msgstr "您已成功重新驗證。" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:114 msgid "Error during reauthentication" -msgstr "" +msgstr "重新驗證期間發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:117 msgid "Reauthentication Failed" -msgstr "" +msgstr "重新驗證失敗" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:118 msgid "Failed to reauthenticate" -msgstr "" +msgstr "無法重新驗證" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:133 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:173 msgid "Reauthenticate" -msgstr "" +msgstr "重新驗證" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:135 msgid "Reauthentiction is required to continue." -msgstr "" +msgstr "需要重新驗證才能繼續。" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:197 msgid "Enter your password" -msgstr "" +msgstr "輸入您的密碼" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:221 msgid "Enter one of your TOTP codes" -msgstr "" +msgstr "輸入您的 TOTP 代碼之一" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:273 msgid "WebAuthn Credential Removed" -msgstr "" +msgstr "已移除 WebAuthn 憑證" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:274 msgid "WebAuthn credential removed successfully." -msgstr "" +msgstr "WebAuthn 憑證已成功移除。" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:283 msgid "Error removing WebAuthn credential" -msgstr "" +msgstr "移除 WebAuthn 憑證時發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:304 msgid "Remove WebAuthn Credential" -msgstr "" +msgstr "移除 WebAuthn 憑證" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:312 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:403 @@ -6169,175 +6182,175 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:674 #: src/tables/sales/SalesOrderAllocationTable.tsx:219 msgid "Confirm Removal" -msgstr "" +msgstr "確認移除" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:314 msgid "Confirm removal of webauth credential" -msgstr "" +msgstr "確認移除 WebAuthn 憑證" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:366 msgid "TOTP Removed" -msgstr "" +msgstr "TOTP 已移除" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:367 msgid "TOTP token removed successfully." -msgstr "" +msgstr "TOTP 權杖已成功移除。" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:377 msgid "Error removing TOTP token" -msgstr "" +msgstr "移除 TOTP 權杖時發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:396 msgid "Remove TOTP Token" -msgstr "" +msgstr "移除 TOTP 權杖" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:405 msgid "Confirm removal of TOTP code" -msgstr "" +msgstr "確認移除 TOTP 代碼" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:465 msgid "TOTP Already Registered" -msgstr "" +msgstr "TOTP 已註冊" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:466 msgid "A TOTP token is already registered for this account." -msgstr "" +msgstr "此帳號已經註冊了一個 TOTP 權杖。" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:481 msgid "Error Fetching TOTP Registration" -msgstr "" +msgstr "獲取 TOTP 註冊資料時發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:482 msgid "An unexpected error occurred while fetching TOTP registration data." -msgstr "" +msgstr "獲取 TOTP 註冊資料時發生意外的錯誤。" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:524 msgid "TOTP Registered" -msgstr "" +msgstr "TOTP 已註冊" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:525 msgid "TOTP token registered successfully." -msgstr "" +msgstr "TOTP 權杖已成功註冊。" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:534 msgid "Error registering TOTP token" -msgstr "" +msgstr "註冊 TOTP 權杖時發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:553 msgid "Register TOTP Token" -msgstr "" +msgstr "註冊 TOTP 權杖" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:598 msgid "Error fetching recovery codes" -msgstr "" +msgstr "獲取備用代碼時發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:634 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:650 #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:866 msgid "Recovery Codes" -msgstr "" +msgstr "備用代碼" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:652 msgid "The following one time recovery codes are available for use" -msgstr "" +msgstr "以下一次性備用代碼可供使用" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:669 msgid "Copy recovery codes to clipboard" -msgstr "" +msgstr "將備用代碼複製到剪貼簿" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:679 msgid "No Unused Codes" -msgstr "" +msgstr "沒有未使用的代碼" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:681 msgid "There are no available recovery codes" -msgstr "" +msgstr "沒有可用的備用代碼" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:782 msgid "WebAuthn Registered" -msgstr "" +msgstr "WebAuthn 已註冊" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:783 msgid "WebAuthn credential registered successfully" -msgstr "" +msgstr "WebAuthn 憑證已成功註冊" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:792 msgid "Error registering WebAuthn credential" -msgstr "" +msgstr "註冊 WebAuthn 憑證時發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:795 msgid "WebAuthn Registration Failed" -msgstr "" +msgstr "WebAuthn 註冊失敗" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:796 msgid "Failed to register WebAuthn credential" -msgstr "" +msgstr "無法註冊 WebAuthn 憑證" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:819 msgid "Error fetching WebAuthn registration" -msgstr "" +msgstr "獲取 WebAuthn 註冊資料時發生錯誤" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:859 msgid "TOTP" -msgstr "" +msgstr "TOTP" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:860 msgid "Time-based One-Time Password" -msgstr "" +msgstr "基於時間的一次性密碼 (TOTP)" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:867 msgid "One-Time pre-generated recovery codes" -msgstr "" +msgstr "一次性預先生成的備用代碼" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:873 msgid "WebAuthn" -msgstr "" +msgstr "WebAuthn" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:874 msgid "Web Authentication (WebAuthn) is a web standard for secure authentication" -msgstr "" +msgstr "Web 驗證 (WebAuthn) 是一種用於安全驗證的 Web 標準" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:970 msgid "Last used at" -msgstr "" +msgstr "最後使用於" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:973 msgid "Created at" -msgstr "" +msgstr "建立於" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:984 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:204 #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:362 msgid "Not Configured" -msgstr "" +msgstr "尚未設定" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:988 msgid "No multi-factor tokens configured for this account" -msgstr "" +msgstr "此帳號未設定多重驗證權杖" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:993 msgid "Register Authentication Method" -msgstr "" +msgstr "註冊驗證方法" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:1009 msgid "No MFA Methods Available" -msgstr "" +msgstr "沒有可用的 MFA 方法" #: src/pages/Index/Settings/AccountSettings/MFASettings.tsx:1013 msgid "There are no MFA methods available for configuration" -msgstr "" +msgstr "沒有可供設定的 MFA 方法" #: src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx:27 msgid "Secret" -msgstr "" +msgstr "密鑰" #: src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx:40 msgid "One-Time Password" -msgstr "" +msgstr "一次性密碼" #: src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx:41 msgid "Enter the TOTP code to ensure it registered correctly" -msgstr "" +msgstr "輸入 TOTP 代碼以確保其註冊正確" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:55 #~ msgid "Single Sign On Accounts" @@ -6345,11 +6358,11 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:60 msgid "Email Addresses" -msgstr "" +msgstr "電子郵件地址" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:68 msgid "Single Sign On" -msgstr "" +msgstr "單一登入 (SSO)" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:69 #~ msgid "Multifactor" @@ -6365,7 +6378,7 @@ msgstr "未啓用" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:79 msgid "Single Sign On is not enabled for this server " -msgstr "" +msgstr "此伺服器未啟用單一登入" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:83 #~ msgid "Multifactor authentication is not configured for your account" @@ -6373,11 +6386,11 @@ msgstr "" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:94 msgid "Access Tokens" -msgstr "" +msgstr "存取權杖" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:108 msgid "Session Information" -msgstr "" +msgstr "工作階段資訊" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:146 #: src/tables/general/BarcodeScanTable.tsx:60 @@ -6389,15 +6402,15 @@ msgstr "時間戳" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:147 msgid "Method" -msgstr "" +msgstr "方法" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:190 msgid "Error while updating email" -msgstr "" +msgstr "更新電子郵件時發生錯誤" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:207 msgid "Currently no email addresses are registered." -msgstr "" +msgstr "目前沒有註冊任何電子郵件地址。" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:215 msgid "The following email addresses are associated with your account:" @@ -6450,7 +6463,7 @@ msgstr "郵箱地址" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:290 msgid "Error while adding email" -msgstr "" +msgstr "新增電子郵件時發生錯誤" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:293 #~ msgid "You can sign in to your account using any of the following third party accounts" @@ -6462,15 +6475,15 @@ msgstr "添加電子郵件" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:365 msgid "There are no providers connected to this account." -msgstr "" +msgstr "此帳號沒有連結任何提供者。" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:374 msgid "You can sign in to your account using any of the following providers" -msgstr "" +msgstr "您可以使用以下任何提供者登入您的帳號" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:387 msgid "Remove Provider Link" -msgstr "" +msgstr "移除提供者連結" #: src/pages/Index/Settings/AccountSettings/SecurityContent.tsx:556 #~ msgid "Unused Codes" @@ -6628,7 +6641,7 @@ msgstr "基準貨幣" #: src/pages/Index/Settings/AdminCenter/EmailManagementPanel.tsx:13 msgid "Email Messages" -msgstr "" +msgstr "電子郵件訊息" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:22 #~ msgid "Active Alerts" @@ -6640,27 +6653,27 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:36 msgid "System Status" -msgstr "" +msgstr "系統狀態" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:47 msgid "Admin Center Information" -msgstr "" +msgstr "管理中心資訊" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:53 msgid "The home panel (and the whole Admin Center) is a new feature starting with the new UI and was previously (before 1.0) not available." -msgstr "" +msgstr "主面板 (以及整個管理中心) 是從新 UI 開始的一項新功能,在此之前 (1.0 版之前) 不可用。" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:60 msgid "The admin center provides a centralized location for all administration functionality and is meant to replace all interaction with the (django) backend admin interface." -msgstr "" +msgstr "管理中心為所有管理功能提供一個集中的位置,旨在取代與 (django) 後端管理介面的所有互動。" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:67 msgid "Please open feature requests (after checking the tracker) for any existing backend admin functionality you are missing in this UI. The backend admin interface should be used carefully and seldom." -msgstr "" +msgstr "如果您在此 UI 中遺失任何現有的後端管理功能,請在檢查追蹤器後開啟功能請求。應謹慎且較少地使用後端管理介面。" #: src/pages/Index/Settings/AdminCenter/HomePanel.tsx:85 msgid "Quick Actions" -msgstr "" +msgstr "快速動作" #: src/pages/Index/Settings/AdminCenter/Index.tsx:107 #~ msgid "User Management" @@ -6668,11 +6681,11 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/Index.tsx:115 msgid "Home" -msgstr "" +msgstr "首頁" #: src/pages/Index/Settings/AdminCenter/Index.tsx:122 msgid "Users / Access" -msgstr "" +msgstr "使用者 / 存取" #: src/pages/Index/Settings/AdminCenter/Index.tsx:127 #~ msgid "Templates" @@ -6684,7 +6697,7 @@ msgstr "數據導入" #: src/pages/Index/Settings/AdminCenter/Index.tsx:142 msgid "Data Export" -msgstr "" +msgstr "資料匯出" #: src/pages/Index/Settings/AdminCenter/Index.tsx:148 msgid "Barcode Scans" @@ -6741,11 +6754,11 @@ msgstr "設備" #: src/pages/Index/Settings/AdminCenter/Index.tsx:247 msgid "Operations" -msgstr "" +msgstr "操作" #: src/pages/Index/Settings/AdminCenter/Index.tsx:259 msgid "Data Management" -msgstr "" +msgstr "資料管理" #: src/pages/Index/Settings/AdminCenter/Index.tsx:270 #: src/pages/Index/Settings/SystemSettings.tsx:178 @@ -6755,11 +6768,11 @@ msgstr "報告" #: src/pages/Index/Settings/AdminCenter/Index.tsx:275 msgid "PLM" -msgstr "" +msgstr "PLM" #: src/pages/Index/Settings/AdminCenter/Index.tsx:285 msgid "Extend / Integrate" -msgstr "" +msgstr "延伸 / 整合" #: src/pages/Index/Settings/AdminCenter/Index.tsx:299 msgid "Advanced Options" @@ -6779,7 +6792,7 @@ msgstr "高級選項" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:60 msgid "Machine Drivers" -msgstr "" +msgstr "機器驅動程式" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:62 #~ msgid "There are no machine registry errors." @@ -6787,27 +6800,27 @@ msgstr "" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:68 msgid "Machine Types" -msgstr "" +msgstr "機器類型" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:76 msgid "Machine Errors" -msgstr "" +msgstr "機器錯誤" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:89 msgid "Registry Registry Errors" -msgstr "" +msgstr "登錄檔登錄錯誤" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:92 msgid "There are machine registry errors" -msgstr "" +msgstr "發生機器登錄錯誤" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:98 msgid "Machine Registry Errors" -msgstr "" +msgstr "機器登錄錯誤" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:101 msgid "There are no machine registry errors" -msgstr "" +msgstr "沒有機器登錄錯誤" #: src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx:122 #: src/tables/machine/MachineListTable.tsx:502 @@ -6849,7 +6862,7 @@ msgstr "橫屏模式" #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:25 msgid "Merge" -msgstr "" +msgstr "合併" #: src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx:31 msgid "Attach to Model" @@ -6865,7 +6878,7 @@ msgstr "附加到模型" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:32 msgid "Background worker running" -msgstr "" +msgstr "背景工作執行緒執行中" #: src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx:35 #~ msgid "Background Worker Not Running" @@ -6940,7 +6953,7 @@ msgstr "所有單位" #: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:31 msgid "Tokens" -msgstr "" +msgstr "權杖" #: src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx:32 #~ msgid "Select settings relevant for user lifecycle. More available in" @@ -6952,11 +6965,11 @@ msgstr "" #: src/pages/Index/Settings/PluginSettingsGroup.tsx:99 msgid "The settings below are specific to each available plugin" -msgstr "" +msgstr "以下設定特定於每個可用的外掛程式" #: src/pages/Index/Settings/SystemSettings.tsx:80 msgid "Authentication" -msgstr "" +msgstr "驗證" #: src/pages/Index/Settings/SystemSettings.tsx:106 msgid "Barcodes" @@ -6973,7 +6986,7 @@ msgstr "條碼" #: src/pages/Index/Settings/SystemSettings.tsx:130 #: src/pages/Index/Settings/UserSettings.tsx:113 msgid "The settings below are specific to each available notification method" -msgstr "" +msgstr "以下設定特定於每個可用的通知方法" #: src/pages/Index/Settings/SystemSettings.tsx:135 #~ msgid "Exchange Rates" @@ -6989,7 +7002,7 @@ msgstr "標籤" #: src/pages/Index/Settings/SystemSettings.tsx:262 msgid "Part Stocktake" -msgstr "" +msgstr "零件盤點" #: src/pages/Index/Settings/SystemSettings.tsx:273 #: src/pages/part/PartStockHistoryDetail.tsx:296 @@ -7047,15 +7060,15 @@ msgstr "標記為未讀" #: src/pages/build/BuildDetail.tsx:70 msgid "No Required Items" -msgstr "" +msgstr "沒有需要的項目" #: src/pages/build/BuildDetail.tsx:72 msgid "This build order does not have any required items." -msgstr "" +msgstr "此生產訂單沒有任何所需的項目。" #: src/pages/build/BuildDetail.tsx:73 msgid "The assembled part may not have a Bill of Materials (BOM) defined, or the BOM is empty." -msgstr "" +msgstr "組裝零件可能未定義材料清單 (BOM),或 BOM 為空。" #: src/pages/build/BuildDetail.tsx:80 #~ msgid "Build Status" @@ -7108,7 +7121,7 @@ msgstr "版本" #: src/pages/sales/SalesOrderDetail.tsx:132 #: src/pages/stock/StockDetail.tsx:176 msgid "Custom Status" -msgstr "" +msgstr "自訂狀態" #: src/pages/build/BuildDetail.tsx:256 #: src/pages/build/BuildDetail.tsx:750 @@ -7199,7 +7212,7 @@ msgstr "已創建" #: src/pages/sales/SalesOrderDetail.tsx:258 #: src/tables/ColumnRenderers.tsx:691 msgid "Start Date" -msgstr "" +msgstr "開始日期" #: src/pages/build/BuildDetail.tsx:385 #: src/pages/purchasing/PurchaseOrderDetail.tsx:295 @@ -7224,7 +7237,7 @@ msgstr "生產詳情" #: src/pages/build/BuildDetail.tsx:435 msgid "Required Parts" -msgstr "" +msgstr "所需零件" #: src/pages/build/BuildDetail.tsx:447 #: src/pages/sales/SalesOrderDetail.tsx:417 @@ -7243,7 +7256,7 @@ msgstr "未出產" #: src/pages/build/BuildDetail.tsx:509 msgid "External Orders" -msgstr "" +msgstr "外部訂單" #: src/pages/build/BuildDetail.tsx:523 msgid "Child Build Orders" @@ -7401,7 +7414,7 @@ msgstr "生產訂單" #: src/pages/build/BuildIndex.tsx:35 #: src/tables/build/BuildOrderTable.tsx:189 msgid "Show external build orders" -msgstr "" +msgstr "顯示外部生產訂單" #: src/pages/build/BuildIndex.tsx:39 #~ msgid "New Build Order" @@ -7419,14 +7432,14 @@ msgstr "" #: src/pages/sales/SalesIndex.tsx:140 #: src/pages/stock/LocationDetail.tsx:193 msgid "Table View" -msgstr "" +msgstr "表格檢視" #: src/pages/build/BuildIndex.tsx:80 #: src/pages/purchasing/PurchasingIndex.tsx:80 #: src/pages/sales/SalesIndex.tsx:67 #: src/pages/sales/SalesIndex.tsx:113 msgid "Calendar View" -msgstr "" +msgstr "行事曆檢視" #: src/pages/build/BuildIndex.tsx:86 #: src/pages/part/CategoryDetail.tsx:306 @@ -7440,7 +7453,7 @@ msgstr "" #: src/pages/sales/SalesIndex.tsx:152 #: src/pages/stock/LocationDetail.tsx:199 msgid "Parametric View" -msgstr "" +msgstr "參數檢視" #: src/pages/company/CompanyDetail.tsx:108 msgid "Phone Number" @@ -7452,7 +7465,7 @@ msgstr "電子郵件地址" #: src/pages/company/CompanyDetail.tsx:122 msgid "Tax ID" -msgstr "" +msgstr "統一編號 / 稅籍編號" #: src/pages/company/CompanyDetail.tsx:132 msgid "Default Currency" @@ -7492,7 +7505,7 @@ msgstr "客户" #: src/pages/company/CompanyDetail.tsx:182 msgid "Company Details" -msgstr "" +msgstr "公司詳情" #: src/pages/company/CompanyDetail.tsx:188 msgid "Supplied Parts" @@ -7646,35 +7659,35 @@ msgstr "無庫存" #: src/pages/core/GroupDetail.tsx:81 #: src/pages/core/UserDetail.tsx:224 msgid "System Overview" -msgstr "" +msgstr "系統總覽" #: src/pages/core/GroupDetail.tsx:45 msgid "Group Name" -msgstr "" +msgstr "群組名稱" #: src/pages/core/GroupDetail.tsx:52 #: src/pages/core/GroupDetail.tsx:67 #: src/tables/settings/GroupTable.tsx:85 msgid "Group Details" -msgstr "" +msgstr "群組詳情" #: src/pages/core/GroupDetail.tsx:55 #: src/tables/settings/GroupTable.tsx:112 msgid "Group Roles" -msgstr "" +msgstr "群組角色" #: src/pages/core/UserDetail.tsx:175 #: src/tables/ColumnRenderers.tsx:622 msgid "User Information" -msgstr "" +msgstr "使用者資訊" #: src/pages/core/UserDetail.tsx:176 msgid "User Permissions" -msgstr "" +msgstr "使用者權限" #: src/pages/core/UserDetail.tsx:178 msgid "User Profile" -msgstr "" +msgstr "使用者個人資料" #: src/pages/core/UserDetail.tsx:188 #: src/tables/settings/UserTable.tsx:164 @@ -7683,7 +7696,7 @@ msgstr "用户詳情" #: src/pages/core/UserDetail.tsx:206 msgid "Normal user" -msgstr "" +msgstr "一般使用者" #: src/pages/core/UserDetail.tsx:206 #~ msgid "Basic user" @@ -7732,7 +7745,7 @@ msgstr "編輯零件類別" #: src/pages/part/CategoryDetail.tsx:192 msgid "Move items to parent category" -msgstr "" +msgstr "將項目移至父類別" #: src/pages/part/CategoryDetail.tsx:196 #: src/pages/stock/LocationDetail.tsx:262 @@ -7783,11 +7796,11 @@ msgstr "分配銷售訂單" #: src/pages/part/PartDetail.tsx:177 msgid "Validating BOM" -msgstr "" +msgstr "正在驗證 BOM" #: src/pages/part/PartDetail.tsx:178 msgid "BOM validated" -msgstr "" +msgstr "BOM 已驗證" #: src/pages/part/PartDetail.tsx:187 #~ msgid "Bill of materials scheduled for validation" @@ -7805,32 +7818,32 @@ msgstr "您想要驗證此裝配的材料清單嗎?" #: src/pages/part/PartDetail.tsx:223 msgid "BOM Validated" -msgstr "" +msgstr "BOM 已驗證" #: src/pages/part/PartDetail.tsx:224 msgid "The Bill of Materials for this part has been validated" -msgstr "" +msgstr "此零件的材料清單 (BOM) 已完成驗證" #: src/pages/part/PartDetail.tsx:228 #: src/pages/part/PartDetail.tsx:233 msgid "BOM Not Validated" -msgstr "" +msgstr "BOM 未驗證" #: src/pages/part/PartDetail.tsx:229 msgid "The Bill of Materials for this part has previously been checked, but requires revalidation" -msgstr "" +msgstr "此零件的材料清單 (BOM) 先前已檢查過,但需要重新驗證" #: src/pages/part/PartDetail.tsx:234 msgid "The Bill of Materials for this part has not yet been validated" -msgstr "" +msgstr "此零件的材料清單 (BOM) 尚未進行驗證" #: src/pages/part/PartDetail.tsx:265 msgid "Validated On" -msgstr "" +msgstr "驗證時間" #: src/pages/part/PartDetail.tsx:270 msgid "Validated By" -msgstr "" +msgstr "驗證者" #: src/pages/part/PartDetail.tsx:286 #~ msgid "Variant Stock" @@ -7967,11 +7980,11 @@ msgstr "創建人" #: src/pages/part/PartDetail.tsx:674 msgid "Default Expiry" -msgstr "" +msgstr "預設過期時間" #: src/pages/part/PartDetail.tsx:679 msgid "days" -msgstr "" +msgstr "天" #: src/pages/part/PartDetail.tsx:689 #: src/pages/part/pricing/BomPricingPanel.tsx:78 @@ -7986,7 +7999,7 @@ msgstr "價格範圍" #: src/pages/part/PartDetail.tsx:699 msgid "Latest Serial Number" -msgstr "" +msgstr "最新序號" #: src/pages/part/PartDetail.tsx:732 msgid "Select Part Revision" @@ -8048,7 +8061,7 @@ msgstr "必填" #: src/pages/part/PartDetail.tsx:1030 msgid "Deficit" -msgstr "" +msgstr "短缺" #: src/pages/part/PartDetail.tsx:1070 #: src/tables/part/PartTable.tsx:398 @@ -8077,7 +8090,7 @@ msgstr "訂單庫存" #: src/pages/part/PartDetail.tsx:1169 msgid "Search by serial number" -msgstr "" +msgstr "依序號搜尋" #: src/pages/part/PartDetail.tsx:1177 #: src/tables/part/PartTable.tsx:509 @@ -8169,11 +8182,11 @@ msgstr "刪除盤點條目" #: src/pages/part/PartStockHistoryDetail.tsx:109 msgid "Stocktake report scheduled for generation" -msgstr "" +msgstr "盤點報告已排程產生" #: src/pages/part/PartStockHistoryDetail.tsx:123 msgid "Stock Quantity" -msgstr "" +msgstr "庫存數量" #: src/pages/part/PartStockHistoryDetail.tsx:129 #: src/pages/part/PartStockHistoryDetail.tsx:242 @@ -8184,7 +8197,7 @@ msgstr "庫存價值" #: src/pages/part/PartStockHistoryDetail.tsx:201 msgid "Generate Stocktake Entry" -msgstr "" +msgstr "產生盤點項目" #: src/pages/part/PartStockHistoryDetail.tsx:271 #: src/pages/part/pricing/PricingOverviewPanel.tsx:334 @@ -8198,7 +8211,7 @@ msgstr "最大值" #: src/pages/part/PartStockHistoryDetail.tsx:304 msgid "Stocktake Entries" -msgstr "" +msgstr "盤點項目" #: src/pages/part/PartStocktakeDetail.tsx:104 #: src/tables/settings/StocktakeReportTable.tsx:72 @@ -8464,19 +8477,19 @@ msgstr "總成本" #: src/pages/sales/ReturnOrderDetail.tsx:216 #: src/pages/sales/SalesOrderDetail.tsx:209 msgid "Contact Email" -msgstr "" +msgstr "聯絡電子郵件" #: src/pages/purchasing/PurchaseOrderDetail.tsx:246 #: src/pages/sales/ReturnOrderDetail.tsx:224 #: src/pages/sales/SalesOrderDetail.tsx:217 msgid "Contact Phone" -msgstr "" +msgstr "聯絡電話" #: src/pages/purchasing/PurchaseOrderDetail.tsx:279 #: src/pages/sales/ReturnOrderDetail.tsx:258 #: src/pages/sales/SalesOrderDetail.tsx:250 msgid "Issue Date" -msgstr "" +msgstr "發布日期" #: src/pages/purchasing/PurchaseOrderDetail.tsx:304 #: src/pages/sales/ReturnOrderDetail.tsx:282 @@ -8485,7 +8498,7 @@ msgstr "" #: src/tables/build/BuildOrderTable.tsx:141 #: src/tables/part/PartPurchaseOrdersTable.tsx:106 msgid "Completion Date" -msgstr "" +msgstr "完成日期" #: src/pages/purchasing/PurchaseOrderDetail.tsx:343 #: src/pages/sales/ReturnOrderDetail.tsx:321 @@ -8540,13 +8553,13 @@ msgstr "客户參考" #: src/pages/sales/ReturnOrderDetail.tsx:196 msgid "Return Address" -msgstr "" +msgstr "退貨地址" #: src/pages/sales/ReturnOrderDetail.tsx:202 #: src/pages/sales/SalesOrderDetail.tsx:195 #: src/pages/sales/SalesOrderShipmentDetail.tsx:178 msgid "Not specified" -msgstr "" +msgstr "未指定" #: src/pages/sales/ReturnOrderDetail.tsx:349 #~ msgid "Order canceled" @@ -8585,7 +8598,7 @@ msgstr "完成配送" #: src/pages/sales/SalesOrderDetail.tsx:189 #: src/pages/sales/SalesOrderShipmentDetail.tsx:167 msgid "Shipping Address" -msgstr "" +msgstr "發貨地址" #: src/pages/sales/SalesOrderDetail.tsx:326 msgid "Edit Sales Order" @@ -8616,15 +8629,15 @@ msgstr "掛起銷售訂單" #: src/pages/sales/SalesOrderDetail.tsx:482 msgid "Ship Sales Order" -msgstr "" +msgstr "運送銷售訂單" #: src/pages/sales/SalesOrderDetail.tsx:484 msgid "Ship this order?" -msgstr "" +msgstr "是否運送此訂單?" #: src/pages/sales/SalesOrderDetail.tsx:485 msgid "Order shipped" -msgstr "" +msgstr "訂單已發貨" #: src/pages/sales/SalesOrderDetail.tsx:493 msgid "Complete Sales Order" @@ -8641,23 +8654,23 @@ msgstr "配送參考" #: src/pages/sales/SalesOrderShipmentDetail.tsx:145 msgid "Tracking Number" -msgstr "" +msgstr "追蹤號碼" #: src/pages/sales/SalesOrderShipmentDetail.tsx:153 msgid "Invoice Number" -msgstr "" +msgstr "發票號碼" #: src/pages/sales/SalesOrderShipmentDetail.tsx:188 msgid "Allocated Items" -msgstr "" +msgstr "已分配項目" #: src/pages/sales/SalesOrderShipmentDetail.tsx:193 msgid "Checked By" -msgstr "" +msgstr "檢查者" #: src/pages/sales/SalesOrderShipmentDetail.tsx:199 msgid "Not checked" -msgstr "" +msgstr "未檢查" #: src/pages/sales/SalesOrderShipmentDetail.tsx:205 #: src/tables/ColumnRenderers.tsx:723 @@ -8677,7 +8690,7 @@ msgstr "送達日期" #: src/pages/sales/SalesOrderShipmentDetail.tsx:252 msgid "Shipment Details" -msgstr "" +msgstr "發貨詳情" #: src/pages/sales/SalesOrderShipmentDetail.tsx:296 #: src/pages/sales/SalesOrderShipmentDetail.tsx:400 @@ -8689,7 +8702,7 @@ msgstr "編輯配送" #: src/pages/sales/SalesOrderShipmentDetail.tsx:419 #: src/tables/sales/SalesOrderShipmentTable.tsx:90 msgid "Cancel Shipment" -msgstr "" +msgstr "取消發貨" #: src/pages/sales/SalesOrderShipmentDetail.tsx:333 #: src/tables/part/PartPurchaseOrdersTable.tsx:122 @@ -8700,11 +8713,11 @@ msgstr "待定" #: src/tables/sales/SalesOrderShipmentTable.tsx:163 #: src/tables/sales/SalesOrderShipmentTable.tsx:294 msgid "Checked" -msgstr "" +msgstr "已檢查" #: src/pages/sales/SalesOrderShipmentDetail.tsx:345 msgid "Not Checked" -msgstr "" +msgstr "未檢查" #: src/pages/sales/SalesOrderShipmentDetail.tsx:351 #: src/tables/sales/SalesOrderShipmentTable.tsx:170 @@ -8721,27 +8734,27 @@ msgstr "已送達" #: src/pages/sales/SalesOrderShipmentDetail.tsx:372 msgid "Send Shipment" -msgstr "" +msgstr "發送貨物" #: src/pages/sales/SalesOrderShipmentDetail.tsx:395 msgid "Shipment Actions" -msgstr "" +msgstr "發貨操作" #: src/pages/sales/SalesOrderShipmentDetail.tsx:404 msgid "Check" -msgstr "" +msgstr "檢查" #: src/pages/sales/SalesOrderShipmentDetail.tsx:405 msgid "Mark shipment as checked" -msgstr "" +msgstr "將發貨標記為已檢查" #: src/pages/sales/SalesOrderShipmentDetail.tsx:411 msgid "Uncheck" -msgstr "" +msgstr "取消檢查" #: src/pages/sales/SalesOrderShipmentDetail.tsx:412 msgid "Mark shipment as unchecked" -msgstr "" +msgstr "將發貨標記為未檢查" #: src/pages/stock/LocationDetail.tsx:119 msgid "Parent Location" @@ -8781,7 +8794,7 @@ msgstr "編輯庫存地點" #: src/pages/stock/LocationDetail.tsx:258 msgid "Move items to parent location" -msgstr "" +msgstr "將項目移至父位置" #: src/pages/stock/LocationDetail.tsx:270 #: src/pages/stock/LocationDetail.tsx:416 @@ -8812,45 +8825,45 @@ msgstr "對此位置中的子位置執行的操作" #: src/pages/stock/LocationDetail.tsx:317 msgid "Scan Stock Item" -msgstr "" +msgstr "掃描庫存項目" #: src/pages/stock/LocationDetail.tsx:335 #: src/pages/stock/StockDetail.tsx:814 msgid "Scanned stock item into location" -msgstr "" +msgstr "掃描庫存項目至位置" #: src/pages/stock/LocationDetail.tsx:341 #: src/pages/stock/StockDetail.tsx:820 msgid "Error scanning stock item" -msgstr "" +msgstr "掃描庫存項目時發生錯誤" #: src/pages/stock/LocationDetail.tsx:348 msgid "Scan Stock Location" -msgstr "" +msgstr "掃描庫存位置" #: src/pages/stock/LocationDetail.tsx:360 msgid "Scanned stock location into location" -msgstr "" +msgstr "掃描庫存位置至位置" #: src/pages/stock/LocationDetail.tsx:366 msgid "Error scanning stock location" -msgstr "" +msgstr "掃描庫存位置時發生錯誤" #: src/pages/stock/LocationDetail.tsx:384 msgid "Scan in stock items" -msgstr "" +msgstr "掃描進庫存項目" #: src/pages/stock/LocationDetail.tsx:386 msgid "Scan item into this location" -msgstr "" +msgstr "掃描項目進入此位置" #: src/pages/stock/LocationDetail.tsx:390 msgid "Scan in container" -msgstr "" +msgstr "掃描進入容器" #: src/pages/stock/LocationDetail.tsx:392 msgid "Scan container into this location" -msgstr "" +msgstr "掃描容器進入此位置" #: src/pages/stock/StockDetail.tsx:147 msgid "Base Part" @@ -8874,7 +8887,7 @@ msgstr "基礎零件" #: src/pages/stock/StockDetail.tsx:206 msgid "Previous serial number" -msgstr "" +msgstr "上一個序號" #: src/pages/stock/StockDetail.tsx:217 #~ msgid "Delete stock item" @@ -8882,7 +8895,7 @@ msgstr "" #: src/pages/stock/StockDetail.tsx:228 msgid "Find serial number" -msgstr "" +msgstr "尋找序號" #: src/pages/stock/StockDetail.tsx:234 msgid "Next serial number" @@ -8953,11 +8966,11 @@ msgstr "編輯庫存項" #: src/pages/stock/StockDetail.tsx:704 msgid "Items Created" -msgstr "" +msgstr "項目已建立" #: src/pages/stock/StockDetail.tsx:705 msgid "Created {n} stock items" -msgstr "" +msgstr "已建立 {n} 個庫存項目" #: src/pages/stock/StockDetail.tsx:722 msgid "Delete Stock Item" @@ -8985,15 +8998,15 @@ msgstr "庫存項已創建" #: src/pages/stock/StockDetail.tsx:796 msgid "Scan Into Location" -msgstr "" +msgstr "掃描進入位置" #: src/pages/stock/StockDetail.tsx:854 msgid "Scan into location" -msgstr "" +msgstr "掃描進入位置" #: src/pages/stock/StockDetail.tsx:856 msgid "Scan this item into a location" -msgstr "" +msgstr "掃描此項目進入一個位置" #: src/pages/stock/StockDetail.tsx:868 msgid "Stock Operations" @@ -9035,21 +9048,21 @@ msgstr "庫存項操作" #: src/pages/stock/StockDetail.tsx:969 #: src/tables/stock/StockItemTable.tsx:258 msgid "Stale" -msgstr "" +msgstr "陳舊" #: src/pages/stock/StockDetail.tsx:975 #: src/tables/stock/StockItemTable.tsx:252 msgid "Expired" -msgstr "" +msgstr "過期" #: src/pages/stock/StockDetail.tsx:981 msgid "Unavailable" -msgstr "" +msgstr "無法使用" #: src/states/IconState.tsx:47 #: src/states/IconState.tsx:77 msgid "Error loading icon package from server" -msgstr "" +msgstr "從伺服器載入圖示套件時發生錯誤" #: src/tables/ColumnRenderers.tsx:41 #~ msgid "Part is locked" @@ -9061,7 +9074,7 @@ msgstr "零件未激活" #: src/tables/ColumnRenderers.tsx:78 msgid "You are subscribed to notifications for this part" -msgstr "" +msgstr "您已訂閱此零件的通知" #: src/tables/ColumnRenderers.tsx:93 #~ msgid "No location set" @@ -9089,7 +9102,7 @@ msgstr "此庫存項已被生產訂單消耗" #: src/tables/ColumnRenderers.tsx:197 msgid "This stock item is unavailable" -msgstr "" +msgstr "此庫存項目無法使用" #: src/tables/ColumnRenderers.tsx:203 msgid "This stock item has expired" @@ -9101,7 +9114,7 @@ msgstr "此庫存項是過期項" #: src/tables/ColumnRenderers.tsx:219 msgid "This stock item is over-allocated" -msgstr "" +msgstr "此庫存項目已過度分配" #: src/tables/ColumnRenderers.tsx:227 msgid "This stock item is fully allocated" @@ -9135,7 +9148,7 @@ msgstr "已分配的項目" #: src/tables/ColumnRenderers.tsx:774 msgid "Line Item" -msgstr "" +msgstr "明細項目" #: src/tables/DownloadAction.tsx:13 #~ msgid "Excel" @@ -9179,7 +9192,7 @@ msgstr "顯示有批號的項目" #: src/tables/Filter.tsx:126 msgid "Filter items by batch code" -msgstr "" +msgstr "依批次代碼過濾項目" #: src/tables/Filter.tsx:135 msgid "Show items which are in stock" @@ -9196,27 +9209,27 @@ msgstr "顯示帶有序列號的項目" #: src/tables/Filter.tsx:150 #: src/tables/build/BuildAllocatedStockTable.tsx:134 msgid "Serial" -msgstr "" +msgstr "序號" #: src/tables/Filter.tsx:151 msgid "Filter items by serial number" -msgstr "" +msgstr "依序號過濾項目" #: src/tables/Filter.tsx:159 msgid "Serial Below" -msgstr "" +msgstr "序號低於" #: src/tables/Filter.tsx:160 msgid "Show items with serial numbers less than or equal to a given value" -msgstr "" +msgstr "顯示序號小於或等於給定值的項目" #: src/tables/Filter.tsx:168 msgid "Serial Above" -msgstr "" +msgstr "序號高於" #: src/tables/Filter.tsx:169 msgid "Show items with serial numbers greater than or equal to a given value" -msgstr "" +msgstr "顯示序號大於或等於給定值的項目" #: src/tables/Filter.tsx:178 msgid "Assigned to me" @@ -9233,109 +9246,109 @@ msgstr "未完成" #: src/tables/Filter.tsx:187 msgid "Show outstanding items" -msgstr "" +msgstr "顯示未完成的項目" #: src/tables/Filter.tsx:195 msgid "Show overdue items" -msgstr "" +msgstr "顯示已逾期的項目" #: src/tables/Filter.tsx:202 msgid "Minimum Date" -msgstr "" +msgstr "最小日期" #: src/tables/Filter.tsx:203 msgid "Show items after this date" -msgstr "" +msgstr "顯示此日期之後的項目" #: src/tables/Filter.tsx:211 msgid "Maximum Date" -msgstr "" +msgstr "最大日期" #: src/tables/Filter.tsx:212 msgid "Show items before this date" -msgstr "" +msgstr "顯示此日期之前的項目" #: src/tables/Filter.tsx:220 msgid "Created Before" -msgstr "" +msgstr "建立於...之前" #: src/tables/Filter.tsx:221 msgid "Show items created before this date" -msgstr "" +msgstr "顯示在此日期之前建立的項目" #: src/tables/Filter.tsx:229 msgid "Created After" -msgstr "" +msgstr "建立於...之後" #: src/tables/Filter.tsx:230 msgid "Show items created after this date" -msgstr "" +msgstr "顯示在此日期之後建立的項目" #: src/tables/Filter.tsx:238 msgid "Start Date Before" -msgstr "" +msgstr "開始日期在...之前" #: src/tables/Filter.tsx:239 msgid "Show items with a start date before this date" -msgstr "" +msgstr "顯示開始日期在此日期之前的項目" #: src/tables/Filter.tsx:247 msgid "Start Date After" -msgstr "" +msgstr "開始日期在...之後" #: src/tables/Filter.tsx:248 msgid "Show items with a start date after this date" -msgstr "" +msgstr "顯示開始日期在此日期之後的項目" #: src/tables/Filter.tsx:256 msgid "Target Date Before" -msgstr "" +msgstr "目標日期在...之前" #: src/tables/Filter.tsx:257 msgid "Show items with a target date before this date" -msgstr "" +msgstr "顯示目標日期在此日期之前的項目" #: src/tables/Filter.tsx:265 msgid "Target Date After" -msgstr "" +msgstr "目標日期在...之後" #: src/tables/Filter.tsx:266 msgid "Show items with a target date after this date" -msgstr "" +msgstr "顯示目標日期在此日期之後的項目" #: src/tables/Filter.tsx:274 msgid "Completed Before" -msgstr "" +msgstr "完成於...之前" #: src/tables/Filter.tsx:275 msgid "Show items completed before this date" -msgstr "" +msgstr "顯示在此日期之前完成的項目" #: src/tables/Filter.tsx:283 msgid "Completed After" -msgstr "" +msgstr "完成於...之後" #: src/tables/Filter.tsx:284 msgid "Show items completed after this date" -msgstr "" +msgstr "顯示在此日期之後完成的項目" #: src/tables/Filter.tsx:292 #: src/tables/stock/StockItemTable.tsx:284 msgid "Updated After" -msgstr "" +msgstr "更新於...之後" #: src/tables/Filter.tsx:293 msgid "Show orders updated after this date" -msgstr "" +msgstr "顯示在此日期之後更新的訂單" #: src/tables/Filter.tsx:301 #: src/tables/stock/StockItemTable.tsx:278 msgid "Updated Before" -msgstr "" +msgstr "更新於...之前" #: src/tables/Filter.tsx:302 msgid "Show orders updated before this date" -msgstr "" +msgstr "顯示在此日期之前更新的訂單" #: src/tables/Filter.tsx:314 msgid "Has Project Code" @@ -9343,7 +9356,7 @@ msgstr "有項目編碼" #: src/tables/Filter.tsx:315 msgid "Show orders with an assigned project code" -msgstr "" +msgstr "顯示已分配專案代碼的訂單" #: src/tables/Filter.tsx:324 msgid "Include Variants" @@ -9351,7 +9364,7 @@ msgstr "包含變體" #: src/tables/Filter.tsx:325 msgid "Include results for part variants" -msgstr "" +msgstr "包含零件變體的結果" #: src/tables/Filter.tsx:335 #: src/tables/part/PartPurchaseOrdersTable.tsx:133 @@ -9374,27 +9387,27 @@ msgstr "按用户篩選" #: src/tables/Filter.tsx:408 msgid "Filter by manufacturer" -msgstr "" +msgstr "依製造商過濾" #: src/tables/Filter.tsx:421 msgid "Filter by supplier" -msgstr "" +msgstr "依供應商過濾" #: src/tables/Filter.tsx:434 msgid "Filter by user who created the order" -msgstr "" +msgstr "依建立訂單的使用者過濾" #: src/tables/Filter.tsx:442 msgid "Filter by user who issued the order" -msgstr "" +msgstr "依發布訂單的使用者過濾" #: src/tables/Filter.tsx:450 msgid "Filter by part category" -msgstr "" +msgstr "依零件類別過濾" #: src/tables/Filter.tsx:461 msgid "Filter by stock location" -msgstr "" +msgstr "依庫存位置過濾" #: src/tables/FilterSelectDrawer.tsx:97 msgid "Remove filter" @@ -9408,11 +9421,11 @@ msgstr "選擇過濾器值" #: src/tables/FilterSelectDrawer.tsx:157 msgid "Enter filter value" -msgstr "" +msgstr "輸入過濾值" #: src/tables/FilterSelectDrawer.tsx:179 msgid "Select date value" -msgstr "" +msgstr "選擇日期值" #: src/tables/FilterSelectDrawer.tsx:301 msgid "Select filter" @@ -9442,7 +9455,7 @@ msgstr "沒有找到記錄" #: src/tables/InvenTreeTable.tsx:162 msgid "Error loading table options" -msgstr "" +msgstr "載入表格選項時發生錯誤" #: src/tables/InvenTreeTable.tsx:250 #~ msgid "Failed to load table options" @@ -9479,7 +9492,7 @@ msgstr "服務器返回了錯誤的數據類型" #: src/tables/InvenTreeTable.tsx:604 msgid "Error loading table data" -msgstr "" +msgstr "載入表格資料時發生錯誤" #: src/tables/InvenTreeTable.tsx:655 #: src/tables/InvenTreeTable.tsx:656 @@ -9496,11 +9509,11 @@ msgstr "" #: src/tables/InvenTreeTable.tsx:733 msgid "View details" -msgstr "" +msgstr "檢視詳情" #: src/tables/InvenTreeTable.tsx:736 msgid "View {model}" -msgstr "" +msgstr "檢視 {model}" #: src/tables/InvenTreeTableHeader.tsx:107 msgid "Delete Selected Items" @@ -9513,19 +9526,19 @@ msgstr "確定要刪除所選的項目嗎?" #: src/tables/InvenTreeTableHeader.tsx:113 #: src/tables/plugin/PluginListTable.tsx:320 msgid "This action cannot be undone" -msgstr "" +msgstr "此操作無法還原" #: src/tables/InvenTreeTableHeader.tsx:124 msgid "Items deleted" -msgstr "" +msgstr "項目已刪除" #: src/tables/InvenTreeTableHeader.tsx:129 msgid "Failed to delete items" -msgstr "" +msgstr "刪除項目失敗" #: src/tables/InvenTreeTableHeader.tsx:180 msgid "Custom table filters are active" -msgstr "" +msgstr "自訂表格過濾器正在作用中" #: src/tables/InvenTreeTableHeader.tsx:206 #: src/tables/general/BarcodeScanTable.tsx:93 @@ -9538,7 +9551,7 @@ msgstr "刷新數據" #: src/tables/InvenTreeTableHeader.tsx:275 msgid "Active Filters" -msgstr "" +msgstr "作用中的過濾器" #: src/tables/TableHoverCard.tsx:35 #~ msgid "item-{idx}" @@ -9558,18 +9571,18 @@ msgstr "零件信息" #: src/tables/bom/BomTable.tsx:117 msgid "This BOM item has not been validated" -msgstr "" +msgstr "此 BOM 項目尚未驗證" #: src/tables/bom/BomTable.tsx:234 msgid "Substitutes" -msgstr "" +msgstr "替代品" #: src/tables/bom/BomTable.tsx:296 #: src/tables/sales/SalesOrderLineItemTable.tsx:137 #: src/tables/sales/SalesOrderLineItemTable.tsx:195 #: src/tables/sales/SalesOrderLineItemTable.tsx:212 msgid "Virtual part" -msgstr "" +msgstr "虛擬零件" #: src/tables/bom/BomTable.tsx:301 #~ msgid "Create BOM Item" @@ -9653,7 +9666,7 @@ msgstr "激活的零件" #: src/tables/bom/BomTable.tsx:424 msgid "Show active items" -msgstr "" +msgstr "顯示作用中的項目" #: src/tables/bom/BomTable.tsx:429 #: src/tables/build/BuildLineTable.tsx:214 @@ -9662,7 +9675,7 @@ msgstr "顯示已裝配的項目" #: src/tables/bom/BomTable.tsx:434 msgid "Show virtual items" -msgstr "" +msgstr "顯示虛擬項目" #: src/tables/bom/BomTable.tsx:439 msgid "Show items with available stock" @@ -9780,21 +9793,21 @@ msgstr "編輯替代零件" #: src/tables/bom/BomTable.tsx:625 msgid "Add BOM Items" -msgstr "" +msgstr "新增 BOM 項目" #: src/tables/bom/BomTable.tsx:633 msgid "Add a single BOM item" -msgstr "" +msgstr "新增單一 BOM 項目" #: src/tables/bom/BomTable.tsx:637 #: src/tables/general/ParameterTable.tsx:202 #: src/tables/part/PartTable.tsx:549 msgid "Import from File" -msgstr "" +msgstr "從檔案匯入" #: src/tables/bom/BomTable.tsx:639 msgid "Import BOM items from a file" -msgstr "" +msgstr "從檔案匯入 BOM 項目" #: src/tables/bom/BomTable.tsx:662 msgid "Bill of materials cannot be edited, as the part is locked" @@ -9856,7 +9869,7 @@ msgstr "訂單狀態" #: src/tables/build/BuildAllocatedStockTable.tsx:166 #: src/tables/build/BuildLineTable.tsx:657 msgid "Edit Stock Allocation" -msgstr "" +msgstr "編輯庫存分配" #: src/tables/build/BuildAllocatedStockTable.tsx:174 #~ msgid "Delete Build Item" @@ -9866,7 +9879,7 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:670 #: src/tables/sales/SalesOrderAllocationTable.tsx:217 msgid "Remove Allocated Stock" -msgstr "" +msgstr "移除已分配的庫存" #: src/tables/build/BuildAllocatedStockTable.tsx:180 #: src/tables/build/BuildLineTable.tsx:663 @@ -9877,27 +9890,27 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:675 #: src/tables/sales/SalesOrderAllocationTable.tsx:220 msgid "Are you sure you want to remove this allocated stock from the order?" -msgstr "" +msgstr "您確定要從訂單中移除此已分配的庫存嗎?" #: src/tables/build/BuildAllocatedStockTable.tsx:199 #: src/tables/build/BuildLineTable.tsx:690 msgid "Consuming allocated stock" -msgstr "" +msgstr "正在消耗已分配庫存" #: src/tables/build/BuildAllocatedStockTable.tsx:200 #: src/tables/build/BuildLineTable.tsx:691 msgid "Stock consumed successfully" -msgstr "" +msgstr "庫存已成功消耗" #: src/tables/build/BuildAllocatedStockTable.tsx:260 msgid "Consume" -msgstr "" +msgstr "消耗" #: src/tables/build/BuildAllocatedStockTable.tsx:277 #: src/tables/build/BuildLineTable.tsx:117 #: src/tables/sales/SalesOrderAllocationTable.tsx:247 msgid "Remove allocated stock" -msgstr "" +msgstr "移除已分配庫存" #: src/tables/build/BuildLineTable.tsx:59 #~ msgid "Show lines with available stock" @@ -9905,11 +9918,11 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:126 msgid "View Stock Item" -msgstr "" +msgstr "檢視庫存項目" #: src/tables/build/BuildLineTable.tsx:189 msgid "Show fully allocated lines" -msgstr "" +msgstr "顯示完全分配的明細" #: src/tables/build/BuildLineTable.tsx:189 #~ msgid "Show allocated lines" @@ -9917,11 +9930,11 @@ msgstr "" #: src/tables/build/BuildLineTable.tsx:194 msgid "Show fully consumed lines" -msgstr "" +msgstr "顯示完全消耗的明細" #: src/tables/build/BuildLineTable.tsx:199 msgid "Show items with sufficient available stock" -msgstr "" +msgstr "顯示有足夠可用庫存的項目" #: src/tables/build/BuildLineTable.tsx:204 msgid "Show consumable lines" @@ -9947,7 +9960,7 @@ msgstr "顯示已跟蹤項目" #: src/tables/build/BuildLineTable.tsx:229 msgid "Show items with stock on order" -msgstr "" +msgstr "顯示已訂購庫存的項目" #: src/tables/build/BuildLineTable.tsx:264 #: src/tables/sales/SalesOrderLineItemTable.tsx:168 @@ -9968,24 +9981,24 @@ msgstr "單位數量" #: src/tables/build/BuildLineTable.tsx:417 msgid "Setup Quantity" -msgstr "" +msgstr "設定數量" #: src/tables/build/BuildLineTable.tsx:426 msgid "Attrition" -msgstr "" +msgstr "耗損率" #: src/tables/build/BuildLineTable.tsx:434 msgid "Rounding Multiple" -msgstr "" +msgstr "捨入倍數" #: src/tables/build/BuildLineTable.tsx:443 msgid "BOM Information" -msgstr "" +msgstr "BOM 資訊" #: src/tables/build/BuildLineTable.tsx:517 #: src/tables/part/PartBuildAllocationsTable.tsx:102 msgid "Fully allocated" -msgstr "" +msgstr "完全分配" #: src/tables/build/BuildLineTable.tsx:565 #: src/tables/sales/SalesOrderLineItemTable.tsx:309 @@ -9995,12 +10008,12 @@ msgstr "創建生產訂單" #: src/tables/build/BuildLineTable.tsx:577 #: src/tables/build/BuildOutputTable.tsx:223 msgid "Allocating stock to build order" -msgstr "" +msgstr "分配庫存至生產訂單" #: src/tables/build/BuildLineTable.tsx:578 #: src/tables/build/BuildOutputTable.tsx:224 msgid "Stock allocation complete" -msgstr "" +msgstr "庫存分配完成" #: src/tables/build/BuildLineTable.tsx:585 #~ msgid "Auto allocation in progress" @@ -10019,7 +10032,7 @@ msgstr "自動分配庫存量" #: src/tables/build/BuildLineTable.tsx:603 msgid "Automatically allocate untracked BOM items to this build according to the selected options" -msgstr "" +msgstr "根據選定的選項,將未追蹤的 BOM 項目自動分配給此生產" #: src/tables/build/BuildLineTable.tsx:623 #: src/tables/build/BuildLineTable.tsx:637 @@ -10049,7 +10062,7 @@ msgstr "生產庫存" #: src/tables/build/BuildLineTable.tsx:813 #: src/tables/sales/SalesOrderLineItemTable.tsx:485 msgid "View Part" -msgstr "" +msgstr "檢視零件" #: src/tables/build/BuildOrderTable.tsx:116 #~ msgid "Cascade" @@ -10083,28 +10096,28 @@ msgstr "" #: src/tables/sales/ReturnOrderTable.tsx:94 #: src/tables/sales/SalesOrderTable.tsx:92 msgid "Has Target Date" -msgstr "" +msgstr "有目標日期" #: src/tables/build/BuildOrderTable.tsx:172 #: src/tables/purchasing/PurchaseOrderTable.tsx:95 #: src/tables/sales/ReturnOrderTable.tsx:95 #: src/tables/sales/SalesOrderTable.tsx:93 msgid "Show orders with a target date" -msgstr "" +msgstr "顯示具有目標日期的訂單" #: src/tables/build/BuildOrderTable.tsx:177 #: src/tables/purchasing/PurchaseOrderTable.tsx:100 #: src/tables/sales/ReturnOrderTable.tsx:100 #: src/tables/sales/SalesOrderTable.tsx:98 msgid "Has Start Date" -msgstr "" +msgstr "有開始日期" #: src/tables/build/BuildOrderTable.tsx:178 #: src/tables/purchasing/PurchaseOrderTable.tsx:101 #: src/tables/sales/ReturnOrderTable.tsx:101 #: src/tables/sales/SalesOrderTable.tsx:99 msgid "Show orders with a start date" -msgstr "" +msgstr "顯示具有開始日期的訂單" #: src/tables/build/BuildOrderTable.tsx:179 #~ msgid "Filter by user who issued this order" @@ -10112,7 +10125,7 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:102 msgid "Build Output Stock Allocation" -msgstr "" +msgstr "生產產出庫存分配" #: src/tables/build/BuildOutputTable.tsx:161 #~ msgid "Delete build output" @@ -10124,7 +10137,7 @@ msgstr "" #: src/tables/build/BuildOutputTable.tsx:248 msgid "Automatically allocate tracked BOM items to this build according to the selected options" -msgstr "" +msgstr "根據選定的選項,將追蹤的 BOM 項目自動分配給此生產" #: src/tables/build/BuildOutputTable.tsx:304 #~ msgid "Edit build output" @@ -10137,7 +10150,7 @@ msgstr "添加生成輸出" #: src/tables/build/BuildOutputTable.tsx:330 msgid "Build output created" -msgstr "" +msgstr "生產產出已建立" #: src/tables/build/BuildOutputTable.tsx:384 #: src/tables/build/BuildOutputTable.tsx:593 @@ -10146,11 +10159,11 @@ msgstr "編輯生成輸出" #: src/tables/build/BuildOutputTable.tsx:400 msgid "This action will deallocate all stock from the selected build output" -msgstr "" +msgstr "此操作將會從選定的生產產出取消分配所有庫存" #: src/tables/build/BuildOutputTable.tsx:425 msgid "Serialize Build Output" -msgstr "" +msgstr "序列化生產產出" #: src/tables/build/BuildOutputTable.tsx:443 #: src/tables/part/PartTestResultTable.tsx:319 @@ -10192,7 +10205,7 @@ msgstr "從生產輸出中取消分配庫存" #: src/tables/build/BuildOutputTable.tsx:572 msgid "Serialize build output" -msgstr "" +msgstr "序列化生產產出" #: src/tables/build/BuildOutputTable.tsx:583 msgid "Complete build output" @@ -10216,11 +10229,11 @@ msgstr "需要測試" #: src/tables/build/BuildOutputTable.tsx:751 msgid "External Build" -msgstr "" +msgstr "外部生產" #: src/tables/build/BuildOutputTable.tsx:753 msgid "This build order is fulfilled by an external purchase order" -msgstr "" +msgstr "此生產訂單由外部採購訂單履行" #: src/tables/company/AddressTable.tsx:122 #: src/tables/company/AddressTable.tsx:187 @@ -10286,7 +10299,7 @@ msgstr "添加聯繫人" #: src/tables/general/AttachmentTable.tsx:108 msgid "Uploading file {filename}" -msgstr "" +msgstr "正在上傳檔案 {filename}" #: src/tables/general/AttachmentTable.tsx:139 #~ msgid "File uploaded" @@ -10299,15 +10312,15 @@ msgstr "" #: src/tables/general/AttachmentTable.tsx:160 #: src/tables/general/AttachmentTable.tsx:174 msgid "Uploading File" -msgstr "" +msgstr "正在上傳檔案" #: src/tables/general/AttachmentTable.tsx:185 msgid "File Uploaded" -msgstr "" +msgstr "檔案已上傳" #: src/tables/general/AttachmentTable.tsx:186 msgid "File {name} uploaded successfully" -msgstr "" +msgstr "檔案 {name} 上傳成功" #: src/tables/general/AttachmentTable.tsx:202 msgid "File could not be uploaded" @@ -10361,17 +10374,13 @@ msgstr "找不到附件。" msgid "Drag attachment file here to upload" msgstr "拖拽附件文件到此處上傳" -#: src/tables/general/BarcodeScanTable.tsx:35 -msgid "Item" -msgstr "項目" - #: src/tables/general/BarcodeScanTable.tsx:50 msgid "Model" msgstr "型號" #: src/tables/general/BarcodeScanTable.tsx:75 msgid "View Item" -msgstr "" +msgstr "檢視項目" #: src/tables/general/ExtraLineItemTable.tsx:97 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:298 @@ -10409,19 +10418,19 @@ msgstr "內部單位" #: src/tables/general/ParameterTable.tsx:123 #: src/tables/settings/TemplateTable.tsx:262 msgid "Updated By" -msgstr "" +msgstr "更新者" #: src/tables/general/ParameterTable.tsx:118 msgid "Show parameters for enabled templates" -msgstr "" +msgstr "顯示啟用範本的參數" #: src/tables/general/ParameterTable.tsx:124 msgid "Filter by user who last updated the parameter" -msgstr "" +msgstr "依最後更新參數的使用者過濾" #: src/tables/general/ParameterTable.tsx:149 msgid "Import Parameters" -msgstr "" +msgstr "匯入參數" #: src/tables/general/ParameterTable.tsx:160 #: src/tables/general/ParametricDataTable.tsx:271 @@ -10442,75 +10451,75 @@ msgstr "刪除參數" #: src/tables/general/ParameterTable.tsx:187 msgid "Add Parameters" -msgstr "" +msgstr "新增參數" #: src/tables/general/ParameterTable.tsx:193 msgid "Create Parameter" -msgstr "" +msgstr "建立參數" #: src/tables/general/ParameterTable.tsx:195 msgid "Create a new parameter" -msgstr "" +msgstr "建立新參數" #: src/tables/general/ParameterTable.tsx:204 msgid "Import parameters from a file" -msgstr "" +msgstr "從檔案匯入參數" -#: src/tables/general/ParameterTemplateTable.tsx:52 -#: src/tables/general/ParameterTemplateTable.tsx:201 +#: src/tables/general/ParameterTemplateTable.tsx:38 +#: src/tables/general/ParameterTemplateTable.tsx:187 msgid "Add Parameter Template" msgstr "添加參數模板" -#: src/tables/general/ParameterTemplateTable.tsx:68 +#: src/tables/general/ParameterTemplateTable.tsx:54 msgid "Duplicate Parameter Template" -msgstr "" +msgstr "複製參數範本" -#: src/tables/general/ParameterTemplateTable.tsx:82 +#: src/tables/general/ParameterTemplateTable.tsx:68 msgid "Delete Parameter Template" msgstr "刪除零件參數模板" -#: src/tables/general/ParameterTemplateTable.tsx:89 +#: src/tables/general/ParameterTemplateTable.tsx:75 msgid "Edit Parameter Template" msgstr "編輯參數模板" -#: src/tables/general/ParameterTemplateTable.tsx:142 +#: src/tables/general/ParameterTemplateTable.tsx:128 msgid "Checkbox" msgstr "勾選框" -#: src/tables/general/ParameterTemplateTable.tsx:143 +#: src/tables/general/ParameterTemplateTable.tsx:129 msgid "Show checkbox templates" msgstr "顯示覆選框模板" -#: src/tables/general/ParameterTemplateTable.tsx:147 +#: src/tables/general/ParameterTemplateTable.tsx:133 msgid "Has choices" msgstr "有選項" -#: src/tables/general/ParameterTemplateTable.tsx:148 +#: src/tables/general/ParameterTemplateTable.tsx:134 msgid "Show templates with choices" msgstr "顯示有選項的模板" -#: src/tables/general/ParameterTemplateTable.tsx:152 +#: src/tables/general/ParameterTemplateTable.tsx:138 #: src/tables/part/PartTable.tsx:246 msgid "Has Units" msgstr "有單位" -#: src/tables/general/ParameterTemplateTable.tsx:153 +#: src/tables/general/ParameterTemplateTable.tsx:139 msgid "Show templates with units" msgstr "顯示有單位的模板" -#: src/tables/general/ParameterTemplateTable.tsx:158 +#: src/tables/general/ParameterTemplateTable.tsx:144 msgid "Show enabled templates" -msgstr "" +msgstr "顯示已啟用的範本" -#: src/tables/general/ParameterTemplateTable.tsx:162 +#: src/tables/general/ParameterTemplateTable.tsx:148 #: src/tables/settings/ImportSessionTable.tsx:112 #: src/tables/settings/TemplateTable.tsx:402 msgid "Model Type" msgstr "型號類型" -#: src/tables/general/ParameterTemplateTable.tsx:163 +#: src/tables/general/ParameterTemplateTable.tsx:149 msgid "Filter by model type" -msgstr "" +msgstr "依模型類型過濾" #: src/tables/general/ParametricDataTable.tsx:79 msgid "Click to edit" @@ -10518,20 +10527,20 @@ msgstr "點擊以編輯" #: src/tables/general/ParametricDataTableFilters.tsx:36 msgid "True" -msgstr "" +msgstr "True" #: src/tables/general/ParametricDataTableFilters.tsx:37 msgid "False" -msgstr "" +msgstr "False" #: src/tables/general/ParametricDataTableFilters.tsx:47 #: src/tables/general/ParametricDataTableFilters.tsx:80 msgid "Select a choice" -msgstr "" +msgstr "選擇一個選項" #: src/tables/general/ParametricDataTableFilters.tsx:100 msgid "Enter a value" -msgstr "" +msgstr "輸入一個值" #: src/tables/machine/MachineListTable.tsx:133 msgid "Machine restarted" @@ -10560,11 +10569,11 @@ msgstr "設備已成功刪除。" #: src/tables/machine/MachineListTable.tsx:255 #: src/tables/machine/MachineListTable.tsx:697 msgid "Are you sure you want to remove this machine?" -msgstr "" +msgstr "您確定要移除這部機器嗎?" #: src/tables/machine/MachineListTable.tsx:285 msgid "Machine" -msgstr "" +msgstr "機器" #: src/tables/machine/MachineListTable.tsx:290 #: src/tables/machine/MachineListTable.tsx:568 @@ -10597,7 +10606,7 @@ msgstr "需要手動重啓" #: src/tables/machine/MachineListTable.tsx:343 msgid "General" -msgstr "" +msgstr "一般" #: src/tables/machine/MachineListTable.tsx:353 #: src/tables/machine/MachineListTable.tsx:804 @@ -10619,7 +10628,7 @@ msgstr "未報告錯誤" #: src/tables/machine/MachineListTable.tsx:431 msgid "Properties" -msgstr "" +msgstr "屬性" #: src/tables/machine/MachineListTable.tsx:494 #~ msgid "Create machine" @@ -10635,20 +10644,20 @@ msgstr "驅動設置" #: src/tables/machine/MachineListTable.tsx:648 msgid "Add Machine" -msgstr "" +msgstr "新增機器" #: src/tables/machine/MachineListTable.tsx:691 #: src/tables/machine/MachineListTable.tsx:736 msgid "Delete Machine" -msgstr "" +msgstr "刪除機器" #: src/tables/machine/MachineListTable.tsx:704 msgid "Edit Machine" -msgstr "" +msgstr "編輯機器" #: src/tables/machine/MachineListTable.tsx:718 msgid "Restart Machine" -msgstr "" +msgstr "重新啟動機器" #: src/tables/machine/MachineListTable.tsx:749 msgid "Add machine" @@ -10656,7 +10665,7 @@ msgstr "添加設備" #: src/tables/machine/MachineListTable.tsx:765 msgid "Machine Detail" -msgstr "" +msgstr "機器詳細資訊" #: src/tables/machine/MachineListTable.tsx:813 msgid "Driver" @@ -10664,7 +10673,7 @@ msgstr "驅動" #: src/tables/machine/MachineTypeTable.tsx:72 msgid "Driver Type" -msgstr "" +msgstr "驅動程式類型" #: src/tables/machine/MachineTypeTable.tsx:76 msgid "Builtin driver" @@ -10676,7 +10685,7 @@ msgstr "內置驅動" #: src/tables/machine/MachineTypeTable.tsx:126 msgid "Not Found" -msgstr "" +msgstr "找不到" #: src/tables/machine/MachineTypeTable.tsx:129 msgid "Machine type not found." @@ -10684,7 +10693,7 @@ msgstr "找不到設備類型。" #: src/tables/machine/MachineTypeTable.tsx:139 msgid "Machine Type Information" -msgstr "" +msgstr "機器類型資訊" #: src/tables/machine/MachineTypeTable.tsx:148 #~ msgid "Available drivers" @@ -10707,7 +10716,7 @@ msgstr "供應商文件" #: src/tables/machine/MachineTypeTable.tsx:192 msgid "Available Drivers" -msgstr "" +msgstr "可用的驅動程式" #: src/tables/machine/MachineTypeTable.tsx:232 msgid "Machine driver not found." @@ -10735,11 +10744,11 @@ msgstr "內置類型" #: src/tables/machine/MachineTypeTable.tsx:369 msgid "Machine Type Detail" -msgstr "" +msgstr "機器類型詳細資訊" #: src/tables/machine/MachineTypeTable.tsx:379 msgid "Machine Driver Detail" -msgstr "" +msgstr "機器驅動程式詳細資訊" #: src/tables/notifications/NotificationTable.tsx:26 msgid "Age" @@ -10783,24 +10792,24 @@ msgstr "顯示已裝配的零件" #: src/tables/part/PartBuildAllocationsTable.tsx:64 msgid "Assembly IPN" -msgstr "" +msgstr "組件 IPN" #: src/tables/part/PartBuildAllocationsTable.tsx:73 msgid "Part IPN" -msgstr "" +msgstr "零件 IPN" #: src/tables/part/PartBuildAllocationsTable.tsx:91 msgid "Required Stock" -msgstr "" +msgstr "所需庫存" #: src/tables/part/PartBuildAllocationsTable.tsx:124 #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:382 msgid "View Build Order" -msgstr "" +msgstr "檢視生產訂單" #: src/tables/part/PartCategoryTable.tsx:52 msgid "You are subscribed to notifications for this category" -msgstr "" +msgstr "您已訂閱此類別的通知" #: src/tables/part/PartCategoryTable.tsx:86 #: src/tables/part/PartTable.tsx:222 @@ -10825,16 +10834,16 @@ msgstr "新建零件類別" #: src/tables/part/PartCategoryTable.tsx:133 msgid "Set Parent Category" -msgstr "" +msgstr "設定父類別" #: src/tables/part/PartCategoryTable.tsx:151 #: src/tables/stock/StockLocationTable.tsx:150 msgid "Set Parent" -msgstr "" +msgstr "設定父項" #: src/tables/part/PartCategoryTable.tsx:153 msgid "Set parent category for the selected items" -msgstr "" +msgstr "設定選定項目的父類別" #: src/tables/part/PartCategoryTable.tsx:164 msgid "Add Part Category" @@ -10890,7 +10899,7 @@ msgstr "顯示已收到的條目" #: src/tables/part/PartSalesAllocationsTable.tsx:88 #: src/tables/sales/SalesOrderShipmentTable.tsx:258 msgid "View Sales Order" -msgstr "" +msgstr "檢視銷售訂單" #: src/tables/part/PartTable.tsx:100 msgid "Minimum stock" @@ -10910,11 +10919,11 @@ msgstr "按裝配屬性篩選" #: src/tables/part/PartTable.tsx:216 msgid "BOM Valid" -msgstr "" +msgstr "BOM 有效" #: src/tables/part/PartTable.tsx:217 msgid "Filter by parts with a valid BOM" -msgstr "" +msgstr "依具有有效 BOM 的零件過濾" #: src/tables/part/PartTable.tsx:223 msgid "Include parts in subcategories" @@ -10990,11 +10999,11 @@ msgstr "按模板部分篩選零件" #: src/tables/part/PartTable.tsx:294 msgid "Is Variant" -msgstr "" +msgstr "是變體" #: src/tables/part/PartTable.tsx:295 msgid "Filter by parts which are variants" -msgstr "" +msgstr "依屬於變體的零件過濾" #: src/tables/part/PartTable.tsx:300 msgid "Is Revision" @@ -11034,44 +11043,44 @@ msgstr "按用户訂閲的零件篩選" #: src/tables/part/PartTable.tsx:378 msgid "Import Parts" -msgstr "" +msgstr "匯入零件" #: src/tables/part/PartTable.tsx:467 #: src/tables/part/PartTable.tsx:515 msgid "Set Category" -msgstr "" +msgstr "設定類別" #: src/tables/part/PartTable.tsx:517 msgid "Set category for selected parts" -msgstr "" +msgstr "設定選定零件的類別" #: src/tables/part/PartTable.tsx:527 msgid "Order selected parts" -msgstr "" +msgstr "訂購選定的零件" #: src/tables/part/PartTable.tsx:537 msgid "Add Parts" -msgstr "" +msgstr "新增零件" #: src/tables/part/PartTable.tsx:543 msgid "Create Part" -msgstr "" +msgstr "建立零件" #: src/tables/part/PartTable.tsx:545 msgid "Create a new part" -msgstr "" +msgstr "建立新零件" #: src/tables/part/PartTable.tsx:551 msgid "Import parts from a file" -msgstr "" +msgstr "從檔案匯入零件" #: src/tables/part/PartTable.tsx:556 msgid "Import from Supplier" -msgstr "" +msgstr "從供應商匯入" #: src/tables/part/PartTable.tsx:558 msgid "Import parts from a supplier plugin" -msgstr "" +msgstr "從供應商外掛程式匯入零件" #: src/tables/part/PartTestResultTable.tsx:103 #: src/tables/part/PartTestResultTable.tsx:181 @@ -11090,11 +11099,11 @@ msgstr "測試結果已添加" #: src/tables/part/PartTestResultTable.tsx:142 msgid "Add Test Results" -msgstr "" +msgstr "新增測試結果" #: src/tables/part/PartTestResultTable.tsx:152 msgid "Test results added" -msgstr "" +msgstr "已新增測試結果" #: src/tables/part/PartTestResultTable.tsx:180 #: src/tables/stock/StockItemTestResultTable.tsx:197 @@ -11188,11 +11197,11 @@ msgstr "模板參數無法編輯,因為組件已鎖定" #: src/tables/part/PartThumbTable.tsx:123 msgid "Image updated" -msgstr "" +msgstr "圖片已更新" #: src/tables/part/PartThumbTable.tsx:124 msgid "The image has been updated successfully" -msgstr "" +msgstr "圖片已成功更新" #: src/tables/part/PartThumbTable.tsx:233 msgid "Select" @@ -11233,20 +11242,20 @@ msgstr "刪除關聯零件" #: src/tables/part/RelatedPartTable.tsx:127 msgid "Edit Related Part" -msgstr "" +msgstr "編輯相關零件" #: src/tables/part/SelectionListTable.tsx:64 #: src/tables/part/SelectionListTable.tsx:115 msgid "Add Selection List" -msgstr "" +msgstr "新增選擇清單" #: src/tables/part/SelectionListTable.tsx:76 msgid "Edit Selection List" -msgstr "" +msgstr "編輯選擇清單" #: src/tables/part/SelectionListTable.tsx:84 msgid "Delete Selection List" -msgstr "" +msgstr "刪除選擇清單" #: src/tables/plugin/PluginErrorTable.tsx:31 msgid "Stage" @@ -11280,7 +11289,7 @@ msgstr "插件" #: src/tables/plugin/PluginListTable.tsx:106 #: src/tables/plugin/PluginListTable.tsx:430 msgid "Mandatory" -msgstr "" +msgstr "必填" #: src/tables/plugin/PluginListTable.tsx:113 #~ msgid "Plugin with id {id} not found" @@ -11367,11 +11376,11 @@ msgstr "激活插件" #: src/tables/plugin/PluginListTable.tsx:271 msgid "The plugin was activated" -msgstr "" +msgstr "外掛程式已啟用" #: src/tables/plugin/PluginListTable.tsx:272 msgid "The plugin was deactivated" -msgstr "" +msgstr "外掛程式已停用" #: src/tables/plugin/PluginListTable.tsx:280 #~ msgid "Install plugin" @@ -11496,17 +11505,17 @@ msgstr "製造商零件編號 (MPN)" #: src/tables/purchasing/ManufacturerPartParametricTable.tsx:43 #: src/tables/purchasing/ManufacturerPartTable.tsx:155 msgid "Show manufacturer parts for active internal parts." -msgstr "" +msgstr "顯示作用中內部零件的製造商零件。" #: src/tables/purchasing/ManufacturerPartParametricTable.tsx:48 #: src/tables/purchasing/ManufacturerPartTable.tsx:160 msgid "Active Manufacturer" -msgstr "" +msgstr "作用中的製造商" #: src/tables/purchasing/ManufacturerPartParametricTable.tsx:49 #: src/tables/purchasing/ManufacturerPartTable.tsx:162 msgid "Show manufacturer parts for active manufacturers." -msgstr "" +msgstr "顯示作用中製造商的製造商零件。" #: src/tables/purchasing/ManufacturerPartTable.tsx:63 #~ msgid "Create Manufacturer Part" @@ -11543,7 +11552,7 @@ msgstr "製造商編號" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:282 msgid "Show line items which have been received" -msgstr "" +msgstr "顯示已收到的明細項目" #: src/tables/purchasing/PurchaseOrderLineItemTable.tsx:344 #: src/tables/sales/ReturnOrderLineItemTable.tsx:160 @@ -11581,7 +11590,7 @@ msgstr "添加供應商零件" #: src/tables/purchasing/SupplierPartTable.tsx:234 msgid "Import supplier part" -msgstr "" +msgstr "匯入供應商零件" #: src/tables/purchasing/SupplierPartTable.tsx:250 msgid "Show active supplier parts" @@ -11589,7 +11598,7 @@ msgstr "顯示活動供應商零件" #: src/tables/purchasing/SupplierPartTable.tsx:255 msgid "Show primary supplier parts" -msgstr "" +msgstr "顯示主要供應商零件" #: src/tables/purchasing/SupplierPartTable.tsx:260 msgid "Show active internal parts" @@ -11605,7 +11614,7 @@ msgstr "顯示活躍供應商" #: src/tables/purchasing/SupplierPartTable.tsx:270 msgid "Show supplier parts with stock" -msgstr "" +msgstr "顯示有庫存的供應商零件" #: src/tables/sales/ReturnOrderLineItemTable.tsx:157 msgid "Received Date" @@ -11629,15 +11638,15 @@ msgstr "接收物品" #: src/tables/sales/SalesOrderAllocationTable.tsx:90 msgid "Show outstanding allocations" -msgstr "" +msgstr "顯示未完成的分配" #: src/tables/sales/SalesOrderAllocationTable.tsx:94 msgid "Assigned to Shipment" -msgstr "" +msgstr "已分配至發貨" #: src/tables/sales/SalesOrderAllocationTable.tsx:95 msgid "Show allocations assigned to a shipment" -msgstr "" +msgstr "顯示分配至某個發貨項目的分配" #: src/tables/sales/SalesOrderAllocationTable.tsx:155 msgid "Available Quantity" @@ -11650,16 +11659,16 @@ msgstr "已分配數量" #: src/tables/sales/SalesOrderAllocationTable.tsx:176 #: src/tables/sales/SalesOrderAllocationTable.tsx:190 msgid "No shipment" -msgstr "" +msgstr "沒有發貨" #: src/tables/sales/SalesOrderAllocationTable.tsx:188 msgid "Not shipped" -msgstr "" +msgstr "未發貨" #: src/tables/sales/SalesOrderAllocationTable.tsx:210 #: src/tables/sales/SalesOrderAllocationTable.tsx:234 msgid "Edit Allocation" -msgstr "" +msgstr "編輯分配" #: src/tables/sales/SalesOrderAllocationTable.tsx:218 #: src/tables/sales/SalesOrderAllocationTable.tsx:241 @@ -11669,15 +11678,15 @@ msgstr "" #: src/tables/sales/SalesOrderAllocationTable.tsx:260 #: src/tables/sales/SalesOrderAllocationTable.tsx:261 msgid "View Shipment" -msgstr "" +msgstr "檢視發貨" #: src/tables/sales/SalesOrderAllocationTable.tsx:316 msgid "Assign to Shipment" -msgstr "" +msgstr "分配至發貨" #: src/tables/sales/SalesOrderAllocationTable.tsx:332 msgid "Assign to shipment" -msgstr "" +msgstr "分配至發貨" #: src/tables/sales/SalesOrderLineItemTable.tsx:280 #~ msgid "Allocate stock" @@ -11693,19 +11702,19 @@ msgstr "分配序列號" #: src/tables/sales/SalesOrderLineItemTable.tsx:297 msgid "Stock allocated successfully" -msgstr "" +msgstr "庫存已成功分配" #: src/tables/sales/SalesOrderLineItemTable.tsx:341 msgid "Show lines which are fully allocated" -msgstr "" +msgstr "顯示完全分配的明細" #: src/tables/sales/SalesOrderLineItemTable.tsx:346 msgid "Show lines which are completed" -msgstr "" +msgstr "顯示已完成的明細" #: src/tables/sales/SalesOrderLineItemTable.tsx:419 msgid "Allocate serials" -msgstr "" +msgstr "分配序號" #: src/tables/sales/SalesOrderLineItemTable.tsx:437 msgid "Build stock" @@ -11725,7 +11734,7 @@ msgstr "創建配送" #: src/tables/sales/SalesOrderShipmentTable.tsx:80 msgid "Shipment created" -msgstr "" +msgstr "發貨已建立" #: src/tables/sales/SalesOrderShipmentTable.tsx:159 msgid "Items" @@ -11733,11 +11742,11 @@ msgstr "項目" #: src/tables/sales/SalesOrderShipmentTable.tsx:243 msgid "Edit shipment" -msgstr "" +msgstr "編輯發貨" #: src/tables/sales/SalesOrderShipmentTable.tsx:251 msgid "Cancel shipment" -msgstr "" +msgstr "取消發貨" #: src/tables/sales/SalesOrderShipmentTable.tsx:281 msgid "Add shipment" @@ -11745,7 +11754,7 @@ msgstr "添加配送" #: src/tables/sales/SalesOrderShipmentTable.tsx:295 msgid "Show shipments which have been checked" -msgstr "" +msgstr "顯示已檢查的發貨紀錄" #: src/tables/sales/SalesOrderShipmentTable.tsx:300 msgid "Show shipments which have been shipped" @@ -11758,37 +11767,37 @@ msgstr "顯示已送達的貨物" #: src/tables/settings/ApiTokenTable.tsx:31 #: src/tables/settings/ApiTokenTable.tsx:45 msgid "Generate Token" -msgstr "" +msgstr "產生權杖" #: src/tables/settings/ApiTokenTable.tsx:33 msgid "Token generated" -msgstr "" +msgstr "已產生權杖" #: src/tables/settings/ApiTokenTable.tsx:68 #: src/tables/settings/ApiTokenTable.tsx:118 msgid "Revoked" -msgstr "" +msgstr "已撤銷" #: src/tables/settings/ApiTokenTable.tsx:72 #: src/tables/settings/ApiTokenTable.tsx:180 msgid "Token" -msgstr "" +msgstr "權杖" #: src/tables/settings/ApiTokenTable.tsx:79 msgid "In Use" -msgstr "" +msgstr "使用中" #: src/tables/settings/ApiTokenTable.tsx:88 msgid "Last Seen" -msgstr "" +msgstr "最後看見" #: src/tables/settings/ApiTokenTable.tsx:93 msgid "Expiry" -msgstr "" +msgstr "到期" #: src/tables/settings/ApiTokenTable.tsx:119 msgid "Show revoked tokens" -msgstr "" +msgstr "顯示已撤銷的權杖" #: src/tables/settings/ApiTokenTable.tsx:138 msgid "Revoke" @@ -11796,11 +11805,11 @@ msgstr "撤銷" #: src/tables/settings/ApiTokenTable.tsx:162 msgid "Error revoking token" -msgstr "" +msgstr "撤銷權杖時發生錯誤" #: src/tables/settings/ApiTokenTable.tsx:185 msgid "Tokens are only shown once - make sure to note it down." -msgstr "" +msgstr "權杖僅顯示一次 - 請務必記下它。" #: src/tables/settings/BarcodeScanHistoryTable.tsx:60 msgid "Barcode Information" @@ -11846,15 +11855,15 @@ msgstr "條碼日誌未啓用" #: src/tables/settings/CustomStateTable.tsx:63 msgid "Status Group" -msgstr "" +msgstr "狀態群組" #: src/tables/settings/CustomStateTable.tsx:84 msgid "Logical State" -msgstr "" +msgstr "邏輯狀態" #: src/tables/settings/CustomStateTable.tsx:96 msgid "Identifier" -msgstr "" +msgstr "識別碼" #: src/tables/settings/CustomStateTable.tsx:115 #~ msgid "Add state" @@ -11886,64 +11895,64 @@ msgstr "添加自定義單位" #: src/tables/settings/EmailTable.tsx:25 msgid "Announced" -msgstr "" +msgstr "已公告" #: src/tables/settings/EmailTable.tsx:27 msgid "Sent" -msgstr "" +msgstr "已發送" #: src/tables/settings/EmailTable.tsx:29 msgid "Failed" -msgstr "" +msgstr "失敗" #: src/tables/settings/EmailTable.tsx:33 msgid "Read" -msgstr "" +msgstr "已讀" #: src/tables/settings/EmailTable.tsx:35 msgid "Confirmed" -msgstr "" +msgstr "已確認" #: src/tables/settings/EmailTable.tsx:43 #: src/tables/settings/EmailTable.tsx:58 msgid "Send Test Email" -msgstr "" +msgstr "發送測試電子郵件" #: src/tables/settings/EmailTable.tsx:45 msgid "Email sent successfully" -msgstr "" +msgstr "電子郵件發送成功" #: src/tables/settings/EmailTable.tsx:71 msgid "Delete Email" -msgstr "" +msgstr "刪除電子郵件" #: src/tables/settings/EmailTable.tsx:72 msgid "Email deleted successfully" -msgstr "" +msgstr "電子郵件已成功刪除" #: src/tables/settings/EmailTable.tsx:80 msgid "Subject" -msgstr "" +msgstr "主旨" #: src/tables/settings/EmailTable.tsx:85 msgid "To" -msgstr "" +msgstr "收件人" #: src/tables/settings/EmailTable.tsx:90 msgid "Sender" -msgstr "" +msgstr "寄件人" #: src/tables/settings/EmailTable.tsx:122 msgid "Direction" -msgstr "" +msgstr "方向" #: src/tables/settings/EmailTable.tsx:125 msgid "Incoming" -msgstr "" +msgstr "收件" #: src/tables/settings/EmailTable.tsx:125 msgid "Outgoing" -msgstr "" +msgstr "寄件" #: src/tables/settings/ErrorTable.tsx:51 #~ msgid "Delete error report" @@ -11980,15 +11989,15 @@ msgstr "錯誤詳情" #: src/tables/settings/ExportSessionTable.tsx:28 msgid "Output Type" -msgstr "" +msgstr "輸出類型" #: src/tables/settings/ExportSessionTable.tsx:38 msgid "Exported On" -msgstr "" +msgstr "匯出時間" #: src/tables/settings/ExportSessionTable.tsx:59 msgid "Delete Output" -msgstr "" +msgstr "刪除輸出" #: src/tables/settings/FailedTasksTable.tsx:32 #: src/tables/settings/PendingTasksTable.tsx:28 @@ -12012,11 +12021,11 @@ msgstr "嘗試次數" #: src/tables/settings/FailedTasksTable.tsx:92 msgid "No Information" -msgstr "" +msgstr "無資訊" #: src/tables/settings/FailedTasksTable.tsx:93 msgid "No error details are available for this task" -msgstr "" +msgstr "此任務沒有可用的錯誤詳細資料" #: src/tables/settings/GroupTable.tsx:71 msgid "Group with id {id} not found" @@ -12029,7 +12038,7 @@ msgstr "獲取羣組詳細信息時出錯" #: src/tables/settings/GroupTable.tsx:96 #: src/tables/settings/GroupTable.tsx:257 msgid "Name of the user group" -msgstr "" +msgstr "使用者群組名稱" #: src/tables/settings/GroupTable.tsx:117 #~ msgid "Permission set" @@ -12038,7 +12047,7 @@ msgstr "" #: src/tables/settings/GroupTable.tsx:170 #: src/tables/settings/UserTable.tsx:316 msgid "Open Profile" -msgstr "" +msgstr "開啟個人資料" #: src/tables/settings/GroupTable.tsx:185 msgid "Delete group" @@ -12062,11 +12071,11 @@ msgstr "添加羣組" #: src/tables/settings/GroupTable.tsx:221 msgid "Edit Group" -msgstr "" +msgstr "編輯群組" #: src/tables/settings/GroupTable.tsx:253 msgid "Add Group" -msgstr "" +msgstr "新增群組" #: src/tables/settings/ImportSessionTable.tsx:37 msgid "Delete Import Session" @@ -12100,15 +12109,15 @@ msgstr "參數" #: src/tables/settings/PendingTasksTable.tsx:61 msgid "Remove all pending tasks" -msgstr "" +msgstr "移除所有待處理任務" #: src/tables/settings/PendingTasksTable.tsx:69 msgid "All pending tasks deleted" -msgstr "" +msgstr "所有待處理任務已刪除" #: src/tables/settings/PendingTasksTable.tsx:76 msgid "Error while deleting all pending tasks" -msgstr "" +msgstr "刪除所有待處理任務時發生錯誤" #: src/tables/settings/ProjectCodeTable.tsx:58 msgid "Edit Project Code" @@ -12172,7 +12181,7 @@ msgstr "獲取插件詳細信息時出錯" #: src/tables/settings/TemplateTable.tsx:272 msgid "Filename" -msgstr "" +msgstr "檔案名稱" #: src/tables/settings/TemplateTable.tsx:295 msgid "Modify" @@ -12209,15 +12218,15 @@ msgstr "按啓用狀態篩選" #: src/tables/settings/UserTable.tsx:123 msgid "Groups updated" -msgstr "" +msgstr "群組已更新" #: src/tables/settings/UserTable.tsx:124 msgid "User groups updated successfully" -msgstr "" +msgstr "使用者群組已成功更新" #: src/tables/settings/UserTable.tsx:131 msgid "Error updating user groups" -msgstr "" +msgstr "更新使用者群組時發生錯誤" #: src/tables/settings/UserTable.tsx:150 msgid "User with id {id} not found" @@ -12241,7 +12250,7 @@ msgstr "指定是否將此用户視為激活用户。取消選擇此選項將不 #: src/tables/settings/UserTable.tsx:183 msgid "Is Administrator" -msgstr "" +msgstr "是管理員" #: src/tables/settings/UserTable.tsx:183 #~ msgid "Is Staff" @@ -12265,7 +12274,7 @@ msgstr "您不能編輯當前登錄用户的權限。" #: src/tables/settings/UserTable.tsx:218 msgid "User Groups" -msgstr "" +msgstr "使用者群組" #: src/tables/settings/UserTable.tsx:305 #~ msgid "Edit user" @@ -12273,11 +12282,11 @@ msgstr "" #: src/tables/settings/UserTable.tsx:333 msgid "Lock user" -msgstr "" +msgstr "鎖定使用者" #: src/tables/settings/UserTable.tsx:343 msgid "Unlock user" -msgstr "" +msgstr "解鎖使用者" #: src/tables/settings/UserTable.tsx:359 msgid "Delete user" @@ -12293,11 +12302,11 @@ msgstr "您確定要刪除該用户嗎?" #: src/tables/settings/UserTable.tsx:373 msgid "Set Password" -msgstr "" +msgstr "設定密碼" #: src/tables/settings/UserTable.tsx:378 msgid "Password updated" -msgstr "" +msgstr "密碼已更新" #: src/tables/settings/UserTable.tsx:389 msgid "Add user" @@ -12313,7 +12322,7 @@ msgstr "顯示活躍用户" #: src/tables/settings/UserTable.tsx:407 msgid "Show administrators" -msgstr "" +msgstr "顯示管理員" #: src/tables/settings/UserTable.tsx:412 msgid "Show superusers" @@ -12321,11 +12330,11 @@ msgstr "顯示超級用户" #: src/tables/settings/UserTable.tsx:431 msgid "Edit User" -msgstr "" +msgstr "編輯使用者" #: src/tables/settings/UserTable.tsx:464 msgid "Add User" -msgstr "" +msgstr "新增使用者" #: src/tables/settings/UserTable.tsx:472 msgid "Added user" @@ -12333,15 +12342,15 @@ msgstr "已添加用户" #: src/tables/settings/UserTable.tsx:482 msgid "User updated" -msgstr "" +msgstr "使用者已更新" #: src/tables/settings/UserTable.tsx:483 msgid "User updated successfully" -msgstr "" +msgstr "使用者更新成功" #: src/tables/settings/UserTable.tsx:489 msgid "Error updating user" -msgstr "" +msgstr "更新使用者時發生錯誤" #: src/tables/stock/InstalledItemsTable.tsx:37 #: src/tables/stock/InstalledItemsTable.tsx:81 @@ -12424,7 +12433,7 @@ msgstr "顯示正在生產的項目" #: src/tables/stock/StockItemTable.tsx:222 msgid "Show items which have been consumed by a build order" -msgstr "" +msgstr "顯示已被生產訂單消耗的項目" #: src/tables/stock/StockItemTable.tsx:227 msgid "Show stock items which are installed in other items" @@ -12452,51 +12461,51 @@ msgstr "顯示有購買價格的項目" #: src/tables/stock/StockItemTable.tsx:253 msgid "Show items which have expired" -msgstr "" +msgstr "顯示已過期的項目" #: src/tables/stock/StockItemTable.tsx:259 msgid "Show items which are stale" -msgstr "" +msgstr "顯示陳舊的項目" #: src/tables/stock/StockItemTable.tsx:264 msgid "Expired Before" -msgstr "" +msgstr "過期於...之前" #: src/tables/stock/StockItemTable.tsx:265 msgid "Show items which expired before this date" -msgstr "" +msgstr "顯示在此日期之前過期的項目" #: src/tables/stock/StockItemTable.tsx:271 msgid "Expired After" -msgstr "" +msgstr "過期於...之後" #: src/tables/stock/StockItemTable.tsx:272 msgid "Show items which expired after this date" -msgstr "" +msgstr "顯示在此日期之後過期的項目" #: src/tables/stock/StockItemTable.tsx:279 msgid "Show items updated before this date" -msgstr "" +msgstr "顯示在此日期之前更新的項目" #: src/tables/stock/StockItemTable.tsx:285 msgid "Show items updated after this date" -msgstr "" +msgstr "顯示在此日期之後更新的項目" #: src/tables/stock/StockItemTable.tsx:290 msgid "Stocktake Before" -msgstr "" +msgstr "盤點於...之前" #: src/tables/stock/StockItemTable.tsx:291 msgid "Show items counted before this date" -msgstr "" +msgstr "顯示在此日期之前盤點的項目" #: src/tables/stock/StockItemTable.tsx:296 msgid "Stocktake After" -msgstr "" +msgstr "盤點於...之後" #: src/tables/stock/StockItemTable.tsx:297 msgid "Show items counted after this date" -msgstr "" +msgstr "顯示在此日期之後盤點的項目" #: src/tables/stock/StockItemTable.tsx:301 #~ msgid "Show stock for assmebled parts" @@ -12524,11 +12533,11 @@ msgstr "顯示外部庫存地點的項目" #: src/tables/stock/StockItemTable.tsx:420 msgid "Stock item created" -msgstr "" +msgstr "庫存項目已建立" #: src/tables/stock/StockItemTable.tsx:442 msgid "Order items" -msgstr "" +msgstr "訂單項目" #: src/tables/stock/StockItemTable.tsx:528 #~ msgid "Delete stock items" @@ -12654,7 +12663,7 @@ msgstr "只顯示通過的測試" #: src/tables/stock/StockItemTestResultTable.tsx:421 msgid "Show results for enabled tests" -msgstr "" +msgstr "顯示已啟用測試的結果" #: src/tables/stock/StockLocationTable.tsx:38 #~ msgid "structural" @@ -12691,15 +12700,15 @@ msgstr "添加庫存地點" #: src/tables/stock/StockLocationTable.tsx:132 msgid "Set Parent Location" -msgstr "" +msgstr "設定父位置" #: src/tables/stock/StockLocationTable.tsx:152 msgid "Set parent location for the selected items" -msgstr "" +msgstr "設定選定項目的父位置" #: src/tables/stock/StockTrackingTable.tsx:93 msgid "Old Status" -msgstr "" +msgstr "舊狀態" #: src/tables/stock/StockTrackingTable.tsx:109 msgid "Added" @@ -12711,7 +12720,7 @@ msgstr "已刪除" #: src/tables/stock/StockTrackingTable.tsx:250 msgid "Stock item no longer exists" -msgstr "" +msgstr "庫存項目已不存在" #: src/tables/stock/StockTrackingTable.tsx:276 msgid "No user information" @@ -12732,7 +12741,7 @@ msgstr "檢測到手機視圖" #: src/views/MobileAppView.tsx:28 msgid "InvenTree UI is optimized for Tablets and Desktops, you can use the official app for a mobile experience." -msgstr "" +msgstr "InvenTree UI 已針對平板和桌面設備進行了最佳化,您可以使用官方應用程式獲得行動版體驗。" #: src/views/MobileAppView.tsx:34 msgid "Read the docs" From de3266cdf6dd3ba93a978e276e7a5a9fcd665fef Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Fri, 24 Apr 2026 00:34:21 +0200 Subject: [PATCH 27/71] refactor(frontend): make plugin support for panels more generic (#11787) * feat(frontend): add more generic plugin support on PanelGroup * refactor exsisting use cases * add plugin panel support to StockLocation closes https://github.com/inventree/InvenTree/issues/11782 * stop re-using model field * re-order types * add panel support for core * change keys see https://github.com/inventree/InvenTree/pull/11787#discussion_r3127410867 --- src/frontend/lib/enums/ModelType.tsx | 13 ++++++++++ .../src/components/panels/PanelGroup.tsx | 24 +++++++++++++++---- src/frontend/src/hooks/UsePluginPanels.tsx | 4 ++-- .../Index/Settings/AdminCenter/Index.tsx | 5 ++-- .../pages/Index/Settings/SystemSettings.tsx | 5 ++-- .../src/pages/Index/Settings/UserSettings.tsx | 5 ++-- src/frontend/src/pages/build/BuildIndex.tsx | 6 ++--- src/frontend/src/pages/core/CoreIndex.tsx | 8 ++++++- .../src/pages/purchasing/PurchasingIndex.tsx | 6 ++--- src/frontend/src/pages/sales/SalesIndex.tsx | 6 ++--- .../src/pages/stock/LocationDetail.tsx | 1 + 11 files changed, 60 insertions(+), 23 deletions(-) diff --git a/src/frontend/lib/enums/ModelType.tsx b/src/frontend/lib/enums/ModelType.tsx index ea85b542fc..191d04545e 100644 --- a/src/frontend/lib/enums/ModelType.tsx +++ b/src/frontend/lib/enums/ModelType.tsx @@ -38,3 +38,16 @@ export enum ModelType { selectionentry = 'selectionentry', error = 'error' } + +export enum PluginPanelKey { + // settings / admin + admincenter = 'admincenter', + systemsettings = 'systemsettings', + usersettings = 'usersettings', + // generic + core = 'core', + // landing pages + purchasing = 'purchasing', + sales = 'sales', + manufacturing = 'manufacturing' +} diff --git a/src/frontend/src/components/panels/PanelGroup.tsx b/src/frontend/src/components/panels/PanelGroup.tsx index 80b13c80fb..c60d92cb10 100644 --- a/src/frontend/src/components/panels/PanelGroup.tsx +++ b/src/frontend/src/components/panels/PanelGroup.tsx @@ -33,7 +33,7 @@ import { } from 'react-router-dom'; import { Boundary } from '@lib/components/Boundary'; -import type { ModelType } from '@lib/enums/ModelType'; +import type { ModelType, PluginPanelKey } from '@lib/enums/ModelType'; import { identifierString } from '@lib/functions/Conversion'; import { cancelEvent } from '@lib/functions/Events'; import { eventModified, getBaseUrl } from '@lib/functions/Navigation'; @@ -61,6 +61,8 @@ import * as classes from './PanelGroup.css'; * @param selectedPanel - The currently selected panel * @param onPanelChange - Callback when the active panel changes * @param collapsible - If true, the panel group can be collapsed (defaults to true) + * @param pluginPanelWithoutId - If true, the panel group will load plugin panels even with no id provided + * @param pluginPanelKey - The plugin panel key to use when loading plugin panels for this group from the backend */ export type PanelProps = { pageKey: string; @@ -68,11 +70,13 @@ export type PanelProps = { groups?: PanelGroupType[]; instance?: any; reloadInstance?: () => void; - model?: ModelType | string; + model?: ModelType; id?: number | null; selectedPanel?: string; onPanelChange?: (panel: string) => void; collapsible?: boolean; + pluginPanelWithoutId?: boolean; + pluginPanelKey?: PluginPanelKey; }; function BasePanelGroup({ @@ -85,7 +89,9 @@ function BasePanelGroup({ instance, model, id, - collapsible = true + collapsible = true, + pluginPanelWithoutId = false, + pluginPanelKey }: Readonly): ReactNode { const localState = useLocalState(); const location = useLocation(); @@ -96,9 +102,17 @@ function BasePanelGroup({ const [expanded, setExpanded] = useState(true); // Hook to load plugins for this panel + const _pluginId = useMemo(() => { + if (id === undefined && pluginPanelWithoutId) return null; + return id; + }, [id, pluginPanelWithoutId]); + const _pluginKey = useMemo(() => { + if (model === undefined && pluginPanelWithoutId) return pluginPanelKey; + return model; + }, [model, pluginPanelWithoutId, pluginPanelKey]); const pluginPanelSet = usePluginPanels({ - id: id, - model: model, + id: _pluginId, + model: _pluginKey, instance: instance, reloadFunc: reloadInstance }); diff --git a/src/frontend/src/hooks/UsePluginPanels.tsx b/src/frontend/src/hooks/UsePluginPanels.tsx index c8559703e3..d94deea967 100644 --- a/src/frontend/src/hooks/UsePluginPanels.tsx +++ b/src/frontend/src/hooks/UsePluginPanels.tsx @@ -2,7 +2,7 @@ import { type UseQueryResult, useQuery } from '@tanstack/react-query'; import { useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; -import type { ModelType } from '@lib/enums/ModelType'; +import type { ModelType, PluginPanelKey } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; import type { InvenTreePluginContext } from '@lib/types/Plugins'; import { api } from '../App'; @@ -39,7 +39,7 @@ export function usePluginPanels({ }: { instance?: any; reloadFunc?: () => void; - model?: ModelType | string; + model?: ModelType | PluginPanelKey; id?: string | number | null; }): PluginPanelSet { const globalSettings = useGlobalSettingsState(); diff --git a/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx b/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx index 4c700b4ed1..5fca95bd72 100644 --- a/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx +++ b/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx @@ -22,6 +22,7 @@ import { } from '@tabler/icons-react'; import { lazy, useMemo } from 'react'; +import { PluginPanelKey } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import PermissionDenied from '../../../../components/errors/PermissionDenied'; import PageTitle from '../../../../components/nav/PageTitle'; @@ -303,8 +304,8 @@ export default function AdminCenter() { panels={adminCenterPanels} groups={grouping} collapsible={true} - model='admincenter' - id={null} + pluginPanelWithoutId + pluginPanelKey={PluginPanelKey.admincenter} /> ) : ( diff --git a/src/frontend/src/pages/Index/Settings/SystemSettings.tsx b/src/frontend/src/pages/Index/Settings/SystemSettings.tsx index 3ded92663d..35855567cb 100644 --- a/src/frontend/src/pages/Index/Settings/SystemSettings.tsx +++ b/src/frontend/src/pages/Index/Settings/SystemSettings.tsx @@ -20,6 +20,7 @@ import { } from '@tabler/icons-react'; import { lazy, useMemo } from 'react'; +import { PluginPanelKey } from '@lib/enums/ModelType'; import { useShallow } from 'zustand/react/shallow'; import PermissionDenied from '../../../components/errors/PermissionDenied'; import PageTitle from '../../../components/nav/PageTitle'; @@ -376,8 +377,8 @@ export default function SystemSettings() { ) : ( diff --git a/src/frontend/src/pages/Index/Settings/UserSettings.tsx b/src/frontend/src/pages/Index/Settings/UserSettings.tsx index 55a62ede4b..a30397e373 100644 --- a/src/frontend/src/pages/Index/Settings/UserSettings.tsx +++ b/src/frontend/src/pages/Index/Settings/UserSettings.tsx @@ -11,6 +11,7 @@ import { } from '@tabler/icons-react'; import { lazy, useMemo } from 'react'; +import { PluginPanelKey } from '@lib/enums/ModelType'; import { useShallow } from 'zustand/react/shallow'; import PageTitle from '../../../components/nav/PageTitle'; import { SettingsHeader } from '../../../components/nav/SettingsHeader'; @@ -154,8 +155,8 @@ export default function UserSettings() { diff --git a/src/frontend/src/pages/build/BuildIndex.tsx b/src/frontend/src/pages/build/BuildIndex.tsx index 2b8f4e681c..b1034b699c 100644 --- a/src/frontend/src/pages/build/BuildIndex.tsx +++ b/src/frontend/src/pages/build/BuildIndex.tsx @@ -8,7 +8,7 @@ import { } from '@tabler/icons-react'; import { useMemo } from 'react'; -import { ModelType } from '@lib/enums/ModelType'; +import { ModelType, PluginPanelKey } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import type { TableFilter } from '@lib/types/Filters'; import { useLocalStorage } from '@mantine/hooks'; @@ -102,8 +102,8 @@ export default function BuildIndex() { ); diff --git a/src/frontend/src/pages/core/CoreIndex.tsx b/src/frontend/src/pages/core/CoreIndex.tsx index fbc47e28aa..c588849461 100644 --- a/src/frontend/src/pages/core/CoreIndex.tsx +++ b/src/frontend/src/pages/core/CoreIndex.tsx @@ -3,6 +3,7 @@ import { Stack } from '@mantine/core'; import { IconUser, IconUsersGroup } from '@tabler/icons-react'; import { useMemo } from 'react'; +import { PluginPanelKey } from '@lib/enums/ModelType'; import PermissionDenied from '../../components/errors/PermissionDenied'; import { PageDetail } from '../../components/nav/PageDetail'; import { PanelGroup } from '../../components/panels/PanelGroup'; @@ -44,7 +45,12 @@ export default function CoreIndex() { return ( - + ); } diff --git a/src/frontend/src/pages/purchasing/PurchasingIndex.tsx b/src/frontend/src/pages/purchasing/PurchasingIndex.tsx index a4a2f70d47..74e8280931 100644 --- a/src/frontend/src/pages/purchasing/PurchasingIndex.tsx +++ b/src/frontend/src/pages/purchasing/PurchasingIndex.tsx @@ -12,7 +12,7 @@ import { } from '@tabler/icons-react'; import { useMemo } from 'react'; -import { ModelType } from '@lib/enums/ModelType'; +import { ModelType, PluginPanelKey } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { useLocalStorage } from '@mantine/hooks'; import OrderCalendar from '../../components/calendar/OrderCalendar'; @@ -215,8 +215,8 @@ export default function PurchasingIndex() { ); diff --git a/src/frontend/src/pages/sales/SalesIndex.tsx b/src/frontend/src/pages/sales/SalesIndex.tsx index d225081ec4..80285f4483 100644 --- a/src/frontend/src/pages/sales/SalesIndex.tsx +++ b/src/frontend/src/pages/sales/SalesIndex.tsx @@ -11,7 +11,7 @@ import { } from '@tabler/icons-react'; import { useMemo } from 'react'; -import { ModelType } from '@lib/enums/ModelType'; +import { ModelType, PluginPanelKey } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { useLocalStorage } from '@mantine/hooks'; import OrderCalendar from '../../components/calendar/OrderCalendar'; @@ -170,8 +170,8 @@ export default function SalesIndex() { ); diff --git a/src/frontend/src/pages/stock/LocationDetail.tsx b/src/frontend/src/pages/stock/LocationDetail.tsx index b8eb574561..d0d68287fe 100644 --- a/src/frontend/src/pages/stock/LocationDetail.tsx +++ b/src/frontend/src/pages/stock/LocationDetail.tsx @@ -481,6 +481,7 @@ export default function Stock() { reloadInstance={refreshInstance} id={location?.pk} instance={location} + pluginPanelWithoutId /> {stockAdjustActions.modals.map((modal) => modal.modal)} From 389e49c218666de293afdee295fdeb4d5bbaa1c5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 24 Apr 2026 09:14:55 +1000 Subject: [PATCH 28/71] Fix typecast for db settings (#11790) - Follow-up to https://github.com/inventree/InvenTree/pull/11674 --- .../InvenTree/InvenTree/setting/db_backend.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/setting/db_backend.py b/src/backend/InvenTree/InvenTree/setting/db_backend.py index f053d4d7bd..d97d12cc91 100644 --- a/src/backend/InvenTree/InvenTree/setting/db_backend.py +++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py @@ -12,12 +12,16 @@ logger = structlog.get_logger('inventree') def get_db_backend(): """Return the database backend configuration.""" db_config = { - 'ENGINE': get_setting('INVENTREE_DB_ENGINE', 'database.engine', None), - 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', None), - 'USER': get_setting('INVENTREE_DB_USER', 'database.user', None), - 'PASSWORD': get_setting('INVENTREE_DB_PASSWORD', 'database.password', None), - 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', None), - 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', 5432, typecast=int), + 'ENGINE': get_setting( + 'INVENTREE_DB_ENGINE', 'database.engine', '', typecast=str + ), + 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', '', typecast=str), + 'USER': get_setting('INVENTREE_DB_USER', 'database.user', '', typecast=str), + 'PASSWORD': get_setting( + 'INVENTREE_DB_PASSWORD', 'database.password', '', typecast=str + ), + 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', '', typecast=str), + 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', '', typecast=str), 'OPTIONS': get_setting( 'INVENTREE_DB_OPTIONS', 'database.options', {}, typecast=dict ) From e43d619d69d7cc9d2d685187b4effc41b4d411f3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 24 Apr 2026 09:41:24 +1000 Subject: [PATCH 29/71] [UI] Create manufacturer part (#11792) - Create new manufacturer part from supplier part form - Closes https://github.com/inventree/InvenTree/issues/10924 --- src/frontend/src/forms/CompanyForms.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/forms/CompanyForms.tsx b/src/frontend/src/forms/CompanyForms.tsx index d50b5b927b..9cefd6147f 100644 --- a/src/frontend/src/forms/CompanyForms.tsx +++ b/src/frontend/src/forms/CompanyForms.tsx @@ -12,7 +12,7 @@ import { IconPackage, IconPhone } from '@tabler/icons-react'; -import { useMemo } from 'react'; +import { useMemo, useState } from 'react'; /** * Field set for SupplierPart instance @@ -26,6 +26,8 @@ export function useSupplierPartFields({ manufacturerPartId?: number; partId?: number; }) { + const [part, setPart] = useState({}); + return useMemo(() => { const fields: ApiFormFieldSet = { part: { @@ -35,6 +37,9 @@ export function useSupplierPartFields({ part: partId, purchaseable: true, active: true + }, + onValueChange: (value: any, record: any) => { + setPart(record); } }, manufacturer_part: { @@ -50,6 +55,16 @@ export function useSupplierPartFields({ ...adjust.filters, part: adjust.data.part }; + }, + addCreateFields: { + part: { + value: part?.pk, + disabled: !!part?.pk + }, + manufacturer: {}, + MPN: {}, + description: {}, + link: {} } }, supplier: { @@ -82,7 +97,7 @@ export function useSupplierPartFields({ }; return fields; - }, [manufacturerId, manufacturerPartId, partId]); + }, [manufacturerId, manufacturerPartId, partId, part]); } export function useManufacturerPartFields() { From 03508cd15b7df16e3f8be74c3b68a4632e28fcd3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 24 Apr 2026 10:52:17 +1000 Subject: [PATCH 30/71] Boundary updates (#11794) * Boundary updates * Add error code --- docs/docs/assets/images/faq/boundary.png | Bin 0 -> 29842 bytes docs/docs/faq.md | 11 +++++++++++ docs/docs/settings/error_codes.md | 5 +++++ src/frontend/lib/components/Boundary.tsx | 9 ++++++--- 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 docs/docs/assets/images/faq/boundary.png diff --git a/docs/docs/assets/images/faq/boundary.png b/docs/docs/assets/images/faq/boundary.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0f8a7f378f769992f3ace4bc9606b55d8e9bfd GIT binary patch literal 29842 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 - title={`${t`Error rendering component`}: ${title}`} + title={`INVE-E17: ${t`Error rendering component`}: ${title}`} > - {t`An error occurred while rendering this component. Refer to the console for more information.`} + + {t`An error occurred while rendering this component. Refer to the console for more information.`} + {t`Try reloading the page, or contact your administrator if the problem persists.`} + ); } From fef0fdf99bb7193760dab8214d3c610bbe030616 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 24 Apr 2026 10:52:27 +1000 Subject: [PATCH 31/71] Simplify BOM table rendering (#11795) --- src/frontend/src/tables/bom/BomTable.tsx | 43 ++++++++++++------------ 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/frontend/src/tables/bom/BomTable.tsx b/src/frontend/src/tables/bom/BomTable.tsx index 61d064c1c3..7581cf2068 100644 --- a/src/frontend/src/tables/bom/BomTable.tsx +++ b/src/frontend/src/tables/bom/BomTable.tsx @@ -13,12 +13,11 @@ import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; -import { ActionIcon, Alert, Group, Stack, Text, Tooltip } from '@mantine/core'; +import { Alert, Group, Stack, Text } from '@mantine/core'; import { showNotification } from '@mantine/notifications'; import { IconArrowRight, IconCircleCheck, - IconExclamationCircle, IconFileUpload, IconLock, IconPlus, @@ -99,28 +98,28 @@ export function BomTable({ ); } + if (!record.validated) { + extra.push( + + {t`This BOM item has not been validated`} + + ); + } + return ( part && ( - - - } - extra={extra} - title={t`Part Information`} - /> - {!record.validated && ( - - - - - - )} - + + } + iconColor={record.validated ? undefined : 'red'} + extra={extra} + title={t`Part Information`} + /> ) ); } From 2129e3338a21b322a3990eeacd4a3b6297a0c879 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 25 Apr 2026 10:01:48 +1000 Subject: [PATCH 32/71] Add docs for build order support in app (#11774) --- docs/docs/app/build.md | 35 ++++++++++++++++++ docs/docs/assets/images/app/build_detail.png | Bin 0 -> 134142 bytes docs/docs/assets/images/app/build_list.png | Bin 0 -> 272053 bytes docs/docs/assets/images/app/build_outputs.png | Bin 0 -> 99137 bytes .../images/app/build_required_parts.png | Bin 0 -> 143470 bytes docs/mkdocs.yml | 1 + 6 files changed, 36 insertions(+) create mode 100644 docs/docs/app/build.md create mode 100644 docs/docs/assets/images/app/build_detail.png create mode 100644 docs/docs/assets/images/app/build_list.png create mode 100644 docs/docs/assets/images/app/build_outputs.png create mode 100644 docs/docs/assets/images/app/build_required_parts.png diff --git a/docs/docs/app/build.md b/docs/docs/app/build.md new file mode 100644 index 0000000000..4d97b03f11 --- /dev/null +++ b/docs/docs/app/build.md @@ -0,0 +1,35 @@ +--- +title: Build Orders +--- + +## Build Order List + +The build order list display lists all build orders: + +{{ image("app/build_list.png", "Build order list") }} + +Select an individual build order to display the detail view for that order. + +### Filtering + +Displayed build orders can be subsequently filtered using the search input at the top of the screen + +## Build Order Detail + +{{ image("app/build_detail.png", "Build order detail") }} + +### Edit Build Order Details + +From the detail view, select the *Edit* button in the top-right of the screen. This opens the build order editing display. + +### Required Parts Tab + +The *Required Parts* tab shows the parts required to complete this build order: + +{{ image("app/build_required_parts.png", "Build order required parts") }} + +### Build Outputs Tab + +The *Build Outputs* tab shows the stock items which have been produced as part of this build order: + +{{ image("app/build_outputs.png", "Build order outputs") }} diff --git a/docs/docs/assets/images/app/build_detail.png b/docs/docs/assets/images/app/build_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..59112cd1dde2fbee6042f903b90e6c509f92321a GIT binary patch literal 134142 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

O(Wl;a!{duS2n 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 literal 0 HcmV?d00001 diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index a79df4ce30..abacabf74d 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -263,6 +263,7 @@ nav: - Stock: app/stock.md - Purchase Orders: app/po.md - Sales Orders: app/so.md + - Build Orders: app/build.md - Settings: app/settings.md - Privacy: app/privacy.md - Translation: app/translation.md From e684e002f75382bb61e3a49fc6569b9f06a6ce1d Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 26 Apr 2026 07:16:06 +1000 Subject: [PATCH 33/71] [UI] Hide top level tree panels (#11799) * Hide "top level stock location" panel Co-authored-by: Copilot * Hide "top level part category" Co-authored-by: Copilot * Adjust playwright tests * Improve robustness of test Co-authored-by: Copilot --------- Co-authored-by: Copilot --- .../src/pages/part/CategoryDetail.tsx | 11 +++----- .../src/pages/stock/LocationDetail.tsx | 13 ++++------ src/frontend/tests/pages/pui_stock.spec.ts | 25 ++++++++----------- src/frontend/tests/pui_permissions.spec.ts | 1 - 4 files changed, 19 insertions(+), 31 deletions(-) diff --git a/src/frontend/src/pages/part/CategoryDetail.tsx b/src/frontend/src/pages/part/CategoryDetail.tsx index a39ce98f5e..2eab39d719 100644 --- a/src/frontend/src/pages/part/CategoryDetail.tsx +++ b/src/frontend/src/pages/part/CategoryDetail.tsx @@ -1,5 +1,5 @@ import { t } from '@lingui/core/macro'; -import { Group, LoadingOverlay, Skeleton, Stack, Text } from '@mantine/core'; +import { Group, LoadingOverlay, Skeleton, Stack } from '@mantine/core'; import { IconCategory, IconInfoCircle, @@ -167,11 +167,7 @@ export default function CategoryDetail() { return ( - {id && category?.pk ? ( - - ) : ( - {t`Top level part category`} - )} + {id && category?.pk && } {id && category?.pk && } ); @@ -272,7 +268,8 @@ export default function CategoryDetail() { name: 'details', label: t`Category Details`, icon: , - content: detailsPanel + content: detailsPanel, + hidden: !id || !category?.pk }, { name: 'subcategories', diff --git a/src/frontend/src/pages/stock/LocationDetail.tsx b/src/frontend/src/pages/stock/LocationDetail.tsx index d0d68287fe..99506ced9a 100644 --- a/src/frontend/src/pages/stock/LocationDetail.tsx +++ b/src/frontend/src/pages/stock/LocationDetail.tsx @@ -5,7 +5,7 @@ import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl } from '@lib/functions/Navigation'; import type { StockOperationProps } from '@lib/types/Forms'; import { t } from '@lingui/core/macro'; -import { Group, Skeleton, Stack, Text } from '@mantine/core'; +import { Group, Skeleton, Stack } from '@mantine/core'; import { IconInfoCircle, IconListDetails, @@ -160,11 +160,7 @@ export default function Stock() { return ( - {id && location?.pk ? ( - - ) : ( - {t`Top level stock location`} - )} + {id && location?.pk && } {id && location?.pk && } ); @@ -178,7 +174,8 @@ export default function Stock() { name: 'details', label: t`Location Details`, icon: , - content: detailsPanel + content: detailsPanel, + hidden: !location?.pk }, SegmentedControlPanel({ name: 'sublocations', @@ -457,7 +454,7 @@ export default function Stock() { title={(location?.name ?? id) ? t`Stock Location` : t`Stock`} subtitle={location?.description} icon={location?.icon && } - actions={locationActions} + actions={location?.pk ? locationActions : undefined} editAction={editLocation.open} editEnabled={ !!location?.pk && diff --git a/src/frontend/tests/pages/pui_stock.spec.ts b/src/frontend/tests/pages/pui_stock.spec.ts index 24185fd832..ac861ebfe8 100644 --- a/src/frontend/tests/pages/pui_stock.spec.ts +++ b/src/frontend/tests/pages/pui_stock.spec.ts @@ -15,9 +15,6 @@ test('Stock - Basic Tests', async ({ browser }) => { await page.waitForURL('**/web/stock/location/**'); - await loadTab(page, 'Location Details'); - await page.waitForURL('**/web/stock/location/index/details'); - await loadTab(page, 'Stock Items'); await page.getByText('1551ABK').first().click(); @@ -62,7 +59,6 @@ test('Stock - Location Tree', async ({ browser }) => { const page = await doCachedLogin(browser, { url: 'stock/location/index/' }); await page.waitForURL('**/web/stock/location/**'); - await loadTab(page, 'Location Details'); await page.getByLabel('nav-breadcrumb-action').click(); await page.getByLabel('nav-tree-toggle-1}').click(); @@ -79,13 +75,14 @@ test('Stock - Location Delete', async ({ browser }) => { url: 'stock/location/38/sublocations' }); + const loc_1 = `loc-1-${Math.floor(Math.random() * 1000)}`; + const loc_2 = `loc-2-${Math.floor(Math.random() * 1000)}`; + // Create a sub-location await page .getByRole('button', { name: 'action-button-add-stock-location' }) .click(); - await page - .getByRole('textbox', { name: 'text-field-name' }) - .fill('my-location-1'); + await page.getByRole('textbox', { name: 'text-field-name' }).fill(loc_1); await page.getByRole('button', { name: 'Submit' }).click(); // Create a secondary sub-location @@ -93,22 +90,20 @@ test('Stock - Location Delete', async ({ browser }) => { await page .getByRole('button', { name: 'action-button-add-stock-location' }) .click(); - await page - .getByRole('textbox', { name: 'text-field-name' }) - .fill('my-location-2'); + await page.getByRole('textbox', { name: 'text-field-name' }).fill(loc_2); await page.getByRole('button', { name: 'Submit' }).click(); // Navigate up to parent - await page.getByRole('link', { name: 'breadcrumb-2-my-location-1' }).click(); + await page.getByRole('link', { name: `breadcrumb-2-${loc_1}` }).click(); await loadTab(page, 'Sublocations'); - await page - .getByRole('cell', { name: 'my-location-2', exact: true }) - .waitFor(); + await page.getByRole('cell', { name: loc_2, exact: true }).waitFor(); // Delete this location, and all child locations await page .locator('div') - .filter({ hasText: /^Stock>PCB Assembler>my-location-1Stock Location$/ }) + .filter({ + hasText: new RegExp(`^Stock>PCB Assembler>${loc_1}Stock Location$`) + }) .getByLabel('action-menu-location-actions') .click(); await page diff --git a/src/frontend/tests/pui_permissions.spec.ts b/src/frontend/tests/pui_permissions.spec.ts index 8bb46e8d5a..f554606d85 100644 --- a/src/frontend/tests/pui_permissions.spec.ts +++ b/src/frontend/tests/pui_permissions.spec.ts @@ -65,7 +65,6 @@ test('Permissions - Reader', async ({ browser }) => { url: '/part/category/index/' }); - await loadTab(page, 'Category Details'); await loadTab(page, 'Parts'); // Navigate to a specific part From 75942fbedf2a8f43d2ac3d827563929cdb71b5ca Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 26 Apr 2026 09:32:46 +1000 Subject: [PATCH 34/71] Fix for category template creation (#11803) - Prevent duplicate parameters - Closes https://github.com/inventree/InvenTree/issues/11798 Co-authored-by: Copilot --- src/backend/InvenTree/part/models.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index a9109c0174..b73b36ca8e 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -2478,6 +2478,7 @@ class Part( category__in=categories ).order_by('-category__level') + template_ids = set() parameters = [] content_type = ContentType.objects.get_for_model(Part) @@ -2488,6 +2489,12 @@ class Part( ).exists(): continue + # Ensure we do not create duplicate parameters if multiple categories have the same template + if category_template.template.pk in template_ids: + continue + + template_ids.add(category_template.template.pk) + parameters.append( Parameter( template=category_template.template, @@ -2497,8 +2504,7 @@ class Part( ) ) - if len(parameters) > 0: - Parameter.objects.bulk_create(parameters) + Parameter.objects.bulk_create(parameters) def getTestTemplates( self, required=None, include_parent: bool = True, enabled=None From f9cda954276e4c0a8c2eddd1d10559fdb4604740 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 26 Apr 2026 10:23:07 +1000 Subject: [PATCH 35/71] Adjust order quantity based on pack size (#11800) - Closes https://github.com/inventree/InvenTree/issues/10946 Co-authored-by: Copilot --- .../components/wizards/OrderPartsWizard.tsx | 49 ++++++++++++++++--- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/src/frontend/src/components/wizards/OrderPartsWizard.tsx b/src/frontend/src/components/wizards/OrderPartsWizard.tsx index 2d74c5b130..e026cae9fb 100644 --- a/src/frontend/src/components/wizards/OrderPartsWizard.tsx +++ b/src/frontend/src/components/wizards/OrderPartsWizard.tsx @@ -166,7 +166,8 @@ function PartRequirementsInfo({ * - part: The part instance * - supplier_part: The selected supplier part instance * - purchase_order: The selected purchase order instance - * - quantity: The quantity of the part to order + * - quantity: The quantity of the part to order (taking supplier pack size into account) + * - quantity_raw: The raw quantity entered by the user (before adjusting for supplier pack size) * - errors: Error messages for each attribute */ interface PartOrderRecord { @@ -174,6 +175,7 @@ interface PartOrderRecord { supplier_part: any; purchase_order: any; quantity: number; + quantity_raw?: number; errors: any; } @@ -277,6 +279,7 @@ function SelectPartsStep({ { accessor: 'part', title: t`Part`, + minWidth: 200, render: (record: PartOrderRecord) => ( @@ -375,7 +378,7 @@ function SelectPartsStep({ { accessor: 'quantity', title: t`Quantity`, - width: 150, + width: 175, render: (record: PartOrderRecord) => ( { if (record.part.pk === partId) { records[index].quantity = quantity; + + if (records[index].quantity_raw === undefined) { + records[index].quantity_raw = quantity; + } } }); @@ -499,6 +511,21 @@ export default function OrderPartsWizard({ records.forEach((record: PartOrderRecord, index: number) => { if (record.part.pk === partId) { records[index].supplier_part = supplierPart; + + if (!records[index].quantity_raw && !!records[index].quantity) { + records[index].quantity_raw = records[index].quantity; + } + + if ( + supplierPart?.pack_quantity_native && + records[index].quantity_raw + ) { + // Adjust the quantity based on the supplier pack size + records[index].quantity = Math.max( + 0, + records[index].quantity_raw / supplierPart.pack_quantity_native + ); + } } }); @@ -536,7 +563,13 @@ export default function OrderPartsWizard({ /> ); }, - [selectedParts] + [ + selectedParts, + removePart, + selectQuantity, + selectSupplierPart, + selectPurchaseOrder + ] ); const canStepForward = useCallback( @@ -614,13 +647,17 @@ export default function OrderPartsWizard({ const on_order = part.ordering ?? 0; const in_production = part.building ?? 0; - const to_order = required - on_hand - on_order - in_production; + const to_order = Math.max( + 0, + required - on_hand - on_order - in_production + ); records.push({ part: part, supplier_part: undefined, purchase_order: undefined, - quantity: Math.max(to_order, 0), + quantity: to_order, + quantity_raw: undefined, errors: {} }); } From ffe6c13edf704e84a7d7a2979831d47a41e368a2 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 26 Apr 2026 12:49:21 +1000 Subject: [PATCH 36/71] [UI] BOM Editing (#10210) * Support minimum column width * Adjust DescriptionColumn and StatusColumn * Column refactoring * Refactor PartColumn * Refactor LineItemsProgerssColumn * Tweaks * Ensure "can_build" value is not negative * Render row expansion icon * Add subassembly table for BOM * Add controls for BOM editing * Fix row click context * Improve rendering for BOM sub-rows * Hide BOM actions unless editing * Disable row expansion for now * Revert gitleaks changes * Remove gitleaks tags * Remove dead code * Remove commented code * Adjust playwright tests Co-authored-by: Copilot * Update docs Co-authored-by: Copilot * Further playwright fixes --------- Co-authored-by: Copilot --- docs/docs/manufacturing/bom.md | 11 ++- src/frontend/src/tables/bom/BomTable.tsx | 94 +++++++++++++++-------- src/frontend/tests/pages/pui_part.spec.ts | 35 +++++++-- src/frontend/tests/pui_importing.spec.ts | 6 ++ src/performance/tests.py | 1 + 5 files changed, 107 insertions(+), 40 deletions(-) diff --git a/docs/docs/manufacturing/bom.md b/docs/docs/manufacturing/bom.md index 4114b5b9ea..bca4bddbab 100644 --- a/docs/docs/manufacturing/bom.md +++ b/docs/docs/manufacturing/bom.md @@ -92,9 +92,16 @@ Note that inherited BOM Line Items only flow "downwards" in the variant inherita !!! info "Editing Inherited Items" When editing an inherited BOM Line Item for a template part, the changes are automatically reflected in the BOM of any variant parts. -## BOM Creation +## BOM Editing -BOMs can be created manually, by adjusting individual line items, or by uploading (importing) an existing BOM file. +Bills of Material (BOMs) can be created manually, by adjusting individual line items, or by uploading (importing) an existing BOM file. + +### Editing Mode + +By default, the BOM is displayed in "view" mode. To edit the BOM, click on the {{ icon("edit", color="blue", title="Edit") }} icon at the top of the BOM panel. This will enable editing mode, which allows you to add, adjust or delete BOM line items. + +!!! warning "Permissions" + Only users with the appropriate permissions can edit BOMs. If you do not have permission to edit the BOM, the "Edit" icon will not be visible. ### Importing a BOM diff --git a/src/frontend/src/tables/bom/BomTable.tsx b/src/frontend/src/tables/bom/BomTable.tsx index 7581cf2068..4833218473 100644 --- a/src/frontend/src/tables/bom/BomTable.tsx +++ b/src/frontend/src/tables/bom/BomTable.tsx @@ -1,3 +1,19 @@ +import { t } from '@lingui/core/macro'; +import { Alert, Group, Stack, Text } from '@mantine/core'; +import { showNotification } from '@mantine/notifications'; +import { + IconArrowRight, + IconCircleCheck, + IconEdit, + IconFileUpload, + IconLock, + IconPlus, + IconSwitch3 +} from '@tabler/icons-react'; +import { type ReactNode, useCallback, useMemo, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { ActionButton } from '@lib/components/ActionButton'; import { type RowAction, RowDeleteAction, @@ -12,20 +28,6 @@ import { navigateToLink } from '@lib/functions/Navigation'; import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; -import { t } from '@lingui/core/macro'; -import { Alert, Group, Stack, Text } from '@mantine/core'; -import { showNotification } from '@mantine/notifications'; -import { - IconArrowRight, - IconCircleCheck, - IconFileUpload, - IconLock, - IconPlus, - IconSwitch3 -} from '@tabler/icons-react'; -import { type ReactNode, useCallback, useMemo, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { Thumbnail } from '../../components/images/Thumbnail'; import { ActionDropdown } from '../../components/items/ActionDropdown'; import { RenderPart } from '../../components/render/Part'; import { useApi } from '../../contexts/ApiContext'; @@ -45,7 +47,8 @@ import { DescriptionColumn, IPNColumn, NoteColumn, - ReferenceColumn + ReferenceColumn, + RenderPartColumn } from '../ColumnRenderers'; import { PartCategoryFilter } from '../Filter'; import { InvenTreeTable } from '../InvenTreeTable'; @@ -80,27 +83,35 @@ export function BomTable({ const user = useUserState(); const table = useTable('bom'); const navigate = useNavigate(); + const openImporter = useImporterState((state) => state.openImporter); + const [isEditing, setIsEditing] = useState(false); + const tableColumns: TableColumn[] = useMemo(() => { return [ { accessor: 'sub_part', switchable: false, sortable: true, + minWidth: 250, render: (record: any) => { const part = record.sub_part_detail; + const extra = []; - if (record.part != partId) { + if (partId && record.part != partId) { extra.push( - {t`This BOM item is defined for a different parent`} + {t`This BOM item is defined for a different parent`} ); } if (!record.validated) { extra.push( - + {t`This BOM item has not been validated`} ); @@ -109,13 +120,7 @@ export function BomTable({ return ( part && ( - } + value={} iconColor={record.validated ? undefined : 'red'} extra={extra} title={t`Part Information`} @@ -376,7 +381,8 @@ export function BomTable({ return '-'; } - const can_build = Math.trunc(record.can_build); + const can_build = Math.max(0, Math.trunc(record.can_build)); + const value = ( { return [ @@ -614,7 +620,7 @@ export function BomTable({ }) ]; }, - [partId, partLocked, user] + [isEditing, partId, partLocked, user] ); const tableActions = useMemo(() => { @@ -624,7 +630,7 @@ export function BomTable({ tooltip={t`Add BOM Items`} position='bottom-start' icon={} - hidden={partLocked || !user.hasAddRole(UserRoles.part)} + hidden={!isEditing || partLocked || !user.hasAddRole(UserRoles.part)} actions={[ { name: t`Add BOM Item`, @@ -639,9 +645,29 @@ export function BomTable({ onClick: () => importBomItem.open() } ]} + />, + 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

CMH>wHS(lLc_LDNclfaO-TX?%rU~ef{a=3b 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 BUoQXv literal 0 HcmV?d00001 diff --git a/docs/docs/assets/images/build/bom_compare_icon.png b/docs/docs/assets/images/build/bom_compare_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e22b4c1b078b1cc9dd715a56a03cca4bf301f15c GIT binary patch literal 135286 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 `#R;B-q* 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 VXyJDEjgrgGb)`!cS^T(Gw;v;eeQkU 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

-Gx!9IgYi$ZzX`mn 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/docs/docs/manufacturing/bom.md b/docs/docs/manufacturing/bom.md index bca4bddbab..87093f704e 100644 --- a/docs/docs/manufacturing/bom.md +++ b/docs/docs/manufacturing/bom.md @@ -4,7 +4,7 @@ title: Bill of Materials ## Bill of Materials -A Bill of Materials (BOM) defines the list of component parts required to make an assembly, [create builds](./build.md) and allocate inventory. +A Bill of Materials (BOM) defines the list of component parts required to make an assembly, [create build orders](./build.md) and allocate inventory. A part which can be built from other sub components is called an *Assembly*. @@ -169,89 +169,26 @@ If the BOM requires revalidation, the status will be displayed as "Not Validated {{ image("build/bom_invalid.png", "BOM Not Validated") }} -## Required Quantity Calculation +## BOM Comparison -When a new [Build Order](./build.md) is created, the required production quantity of each component part is calculated based on the BOM line items defined for the assembly being built. To calculate the required production quantity of a component part, the following considerations are made: +It is possible to compare the BOM of one assembly with another assembly. This comparison can highlight different component parts, quantities and other properties of the BOM line items. -### Base Quantity +To compare the BOM of one assembly with another, navigate to the "Bill of Materials" tab of the part detail page, then click on the {{ icon("git-compare", color="blue", title="Compare BOM") }} icon at the top of the BOM table: -The base quantity of a BOM line item is defined by the `Quantity` field of the BOM line item. This is the number of parts which are required to build one assembly. This value is multiplied by the number of assemblies which are being built to determine the total quantity of parts required. +{{ image("build/bom_compare_icon.png", "BOM Compare") }} -``` -Required Quantity = Base Quantity * Number of Assemblies -``` +This will open the BOM comparison view, which allows you to select a secondary assembly to compare with the primary assembly. The BOM line items of the two assemblies will be displayed side by side, with differences highlighted: -### Attrition +{{ image("build/bom_compare.png", "BOM Compare") }} -The `Attrition` field of a BOM line item is used to account for expected losses during the production process. This is expressed as a percentage of the `Base Quantity` (e.g. 2%). +### Display Mode -If a non-zero attrition percentage is specified, it is applied to the calculated `Required Quantity` value. +When comparing BOMs from two different assemblies, the user can select from the following view modes: -``` -Required Quantity = Required Quantity * (1 + Attrition Percentage) -``` +| View Mode | Description | +| --- | --- | +| *Show all parts* | Display all BOM line items from both assemblies. Differences are highlighted. | +| *Show different parts* | Display only the BOM line items which are different between the two assemblies. | +| *Show common parts* | Display only the BOM line items which are common between the two assemblies. | -!!! info "Optional" - The attrition percentage is optional. If not specified, it defaults to 0%. - -### Setup Quantity - -The `Setup Quantity` field of a BOM line item is used to account for fixed losses during the production process. This is an additional quantity of the part which is required to ensure that the production run can be completed successfully. This value is added to the calculated `Required Quantity`. - -``` -Required Quantity = Required Quantity + Setup Quantity -``` - -!!! info "Optional" - The setup quantity is optional. If not specified, it defaults to 0. - -### Rounding Multiple - -The `Rounding Multiple` field of a BOM line item is used to round the calculated `Required Quantity` value to the nearest multiple of the specified value. This is useful for ensuring that the required quantity is a whole number, or to meet specific packaging requirements. - -``` -Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple -``` - -!!! info "Optional" - The rounding multiple is optional. If not specified, no rounding is applied to the calculated production quantity. - -### Example Calculation - -Consider a BOM line item with the following properties: - -- Base Quantity: 3 -- Attrition: 2% (0.02) -- Setup Quantity: 10 -- Rounding Multiple: 25 - -If we are building 100 assemblies, the required quantity would be calculated as follows: - -``` -Required Quantity = Base Quantity * Number of Assemblies - = 3 * 100 - = 300 - -Attrition Value = Required Quantity * Attrition Percentage - = 300 * 0.02 - = 6 - -Required Quantity = Required Quantity + Attrition Value - = 300 + 6 - = 306 - -Required Quantity = Required Quantity + Setup Quantity - = 306 + 10 - = 316 - -Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple - = ceil(316 / 25) * 25 - = 13 * 25 - = 325 - -``` - -So the final required production quantity of the component part would be `325`. - -!!! info "Calculation" - The required quantity calculation is performed automatically when a new [Build Order](./build.md) is created. +In each case, any differences between the BOM line items are highlighted in red. diff --git a/docs/docs/manufacturing/required.md b/docs/docs/manufacturing/required.md new file mode 100644 index 0000000000..949277b9ab --- /dev/null +++ b/docs/docs/manufacturing/required.md @@ -0,0 +1,90 @@ +--- +title: Required Build Quantity +--- + +## Required Build Quantity + +When a new [Build Order](./build.md) is created, the required production quantity of each component part is calculated based on the BOM line items defined for the assembly being built. To calculate the required production quantity of a component part, the following considerations are made: + +### Base Quantity + +The base quantity of a BOM line item is defined by the `Quantity` field of the BOM line item. This is the number of parts which are required to build one assembly. This value is multiplied by the number of assemblies which are being built to determine the total quantity of parts required. + +``` +Required Quantity = Base Quantity * Number of Assemblies +``` + +### Attrition + +The `Attrition` field of a BOM line item is used to account for expected losses during the production process. This is expressed as a percentage of the `Base Quantity` (e.g. 2%). + +If a non-zero attrition percentage is specified, it is applied to the calculated `Required Quantity` value. + +``` +Required Quantity = Required Quantity * (1 + Attrition Percentage) +``` + +!!! info "Optional" + The attrition percentage is optional. If not specified, it defaults to 0%. + +### Setup Quantity + +The `Setup Quantity` field of a BOM line item is used to account for fixed losses during the production process. This is an additional quantity of the part which is required to ensure that the production run can be completed successfully. This value is added to the calculated `Required Quantity`. + +``` +Required Quantity = Required Quantity + Setup Quantity +``` + +!!! info "Optional" + The setup quantity is optional. If not specified, it defaults to 0. + +### Rounding Multiple + +The `Rounding Multiple` field of a BOM line item is used to round the calculated `Required Quantity` value to the nearest multiple of the specified value. This is useful for ensuring that the required quantity is a whole number, or to meet specific packaging requirements. + +``` +Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple +``` + +!!! info "Optional" + The rounding multiple is optional. If not specified, no rounding is applied to the calculated production quantity. + +### Example Calculation + +Consider a BOM line item with the following properties: + +- Base Quantity: 3 +- Attrition: 2% (0.02) +- Setup Quantity: 10 +- Rounding Multiple: 25 + +If we are building 100 assemblies, the required quantity would be calculated as follows: + +``` +Required Quantity = Base Quantity * Number of Assemblies + = 3 * 100 + = 300 + +Attrition Value = Required Quantity * Attrition Percentage + = 300 * 0.02 + = 6 + +Required Quantity = Required Quantity + Attrition Value + = 300 + 6 + = 306 + +Required Quantity = Required Quantity + Setup Quantity + = 306 + 10 + = 316 + +Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple + = ceil(316 / 25) * 25 + = 13 * 25 + = 325 + +``` + +So the final required production quantity of the component part would be `325`. + +!!! info "Calculation" + The required quantity calculation is performed automatically when a new [Build Order](./build.md) is created. diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index abacabf74d..82bb9cd772 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -150,6 +150,7 @@ nav: - Bill of Materials: manufacturing/bom.md - Build Orders: manufacturing/build.md - Build Outputs: manufacturing/output.md + - Required Quantity: manufacturing/required.md - Allocating Stock: manufacturing/allocate.md - External Manufacturing: manufacturing/external.md - Example Build Order: manufacturing/example.md diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 84dcb6b9b5..8e4a0312df 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -13,7 +13,7 @@ v480 -> 2026-04-27 : https://github.com/inventree/InvenTree/pull/11816 - The "issued_by" field on the Build API endpoint is now read-only, and is automatically set to the current user when a build is created v479 -> 2026-04-11 : https://github.com/inventree/InvenTree/pull/11723 - - POST /api//notifications/readall/ now requires a POST action + - POST /api/notifications/readall/ now requires a POST action - POST /api/admin/email/test/ - now returns a 200 on. a successful test - GET /api/notifications/ - now uses user-centric permissions, not a general read diff --git a/src/frontend/src/components/images/ApiImage.tsx b/src/frontend/src/components/images/ApiImage.tsx index fcce1c22ec..05cfcc7047 100644 --- a/src/frontend/src/components/images/ApiImage.tsx +++ b/src/frontend/src/components/images/ApiImage.tsx @@ -71,6 +71,7 @@ export function ApiImage(props: Readonly) { src={imageUrl} fit='contain' style={{ + ...props.style, opacity: isLoaded ? 1 : 0, transition: 'opacity 0.2s ease' }} diff --git a/src/frontend/src/components/images/Thumbnail.tsx b/src/frontend/src/components/images/Thumbnail.tsx index 22c86249d8..c24e7671a0 100644 --- a/src/frontend/src/components/images/Thumbnail.tsx +++ b/src/frontend/src/components/images/Thumbnail.tsx @@ -56,7 +56,7 @@ export function Thumbnail({ w={size} fit='contain' radius='xs' - style={{ maxHeight: size }} + style={{ maxHeight: size, height: size }} /> {inner} diff --git a/src/frontend/src/pages/part/PartDetail.tsx b/src/frontend/src/pages/part/PartDetail.tsx index 645b305a52..4c56646f50 100644 --- a/src/frontend/src/pages/part/PartDetail.tsx +++ b/src/frontend/src/pages/part/PartDetail.tsx @@ -5,9 +5,7 @@ import { Center, Grid, Group, - HoverCard, Loader, - type MantineColor, Paper, Skeleton, Stack, @@ -17,13 +15,11 @@ import { IconBookmarks, IconBuilding, IconChecklist, - IconCircleCheck, IconClipboardList, IconCurrencyDollar, IconExclamationCircle, IconInfoCircle, IconLayersLinked, - IconListCheck, IconListDetails, IconListTree, IconLock, @@ -47,7 +43,6 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl } from '@lib/functions/Navigation'; -import { ActionButton } from '@lib/index'; import type { StockOperationProps } from '@lib/types/Forms'; import AdminButton from '../../components/buttons/AdminButton'; import { PrintingActions } from '../../components/buttons/PrintingActions'; @@ -76,20 +71,17 @@ import NotesPanel from '../../components/panels/NotesPanel'; import type { PanelType } from '../../components/panels/Panel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import { RenderPart } from '../../components/render/Part'; -import { RenderUser } from '../../components/render/User'; import OrderPartsWizard from '../../components/wizards/OrderPartsWizard'; import { useApi } from '../../contexts/ApiContext'; import { formatDecimal, formatPriceRange } from '../../defaults/formatters'; import { usePartFields } from '../../forms/PartForms'; import { useFindSerialNumberForm } from '../../forms/StockForms'; -import useBackgroundTask from '../../hooks/UseBackgroundTask'; import { - useApiFormModal, useCreateApiFormModal, useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { type UseInstanceResult, useInstance } from '../../hooks/UseInstance'; +import { useInstance } from '../../hooks/UseInstance'; import { useStockAdjustActions } from '../../hooks/UseStockAdjustActions'; import { useGlobalSettingsState, @@ -112,6 +104,7 @@ import PartAllocationPanel from './PartAllocationPanel'; import PartPricingPanel from './PartPricingPanel'; import PartStockHistoryDetail from './PartStockHistoryDetail'; import PartSupplierDetail from './PartSupplierDetail'; +import { BomActions } from './bom/BomActions'; /** * Render a part revision selector component @@ -154,132 +147,6 @@ function RevisionSelector({ ); } -/** - * A hover-over component which displays information about the BOM validation for a given part - */ -function BomValidationInformation({ - bomInformation, - partId -}: { - bomInformation: UseInstanceResult; - partId: number; -}) { - const user = useUserState(); - - const [taskId, setTaskId] = useState(''); - - useBackgroundTask({ - taskId: taskId, - message: t`Validating BOM`, - successMessage: t`BOM validated`, - onComplete: () => { - bomInformation.instanceQuery.refetch(); - } - }); - - const validateBom = useApiFormModal({ - url: ApiEndpoints.bom_validate, - method: 'PUT', - fields: { - valid: { - hidden: true, - value: true - } - }, - title: t`Validate BOM`, - pk: partId, - preFormContent: ( - } title={t`Validate BOM`}> - {t`Do you want to validate the bill of materials for this assembly?`} - - ), - successMessage: null, - onFormSuccess: (response: any) => { - // If the process has been offloaded to a background task - if (response.task_id) { - setTaskId(response.task_id); - } else { - bomInformation.instanceQuery.refetch(); - } - } - }); - - if (bomInformation.instanceQuery.isFetching) { - return ; - } - - let icon: ReactNode; - let color: MantineColor; - let title = ''; - let description = ''; - - if (bomInformation.instance?.bom_validated) { - color = 'green'; - icon = ; - title = t`BOM Validated`; - description = t`The Bill of Materials for this part has been validated`; - } else if (bomInformation.instance?.bom_checked_date) { - color = 'yellow'; - icon = ; - title = t`BOM Not Validated`; - description = t`The Bill of Materials for this part has previously been checked, but requires revalidation`; - } else { - color = 'red'; - icon = ; - title = t`BOM Not Validated`; - description = t`The Bill of Materials for this part has not yet been validated`; - } - - return ( - <> - {validateBom.modal} - - {!bomInformation.instance?.bom_validated && - user.hasChangeRole(UserRoles.bom) && ( - } - color='green' - tooltip={t`Validate BOM`} - onClick={validateBom.open} - /> - )} - - - - {icon} - - - - - - {description} - {bomInformation.instance?.bom_checked_date && ( - - {t`Validated On`}:{' '} - {bomInformation.instance.bom_checked_date} - - )} - {bomInformation.instance?.bom_checked_by_detail && ( - - {t`Validated By`}: - - - )} - - - - - - - ); -} - /** * Detail view for a single Part instance */ @@ -295,6 +162,7 @@ export default function PartDetail() { const globalSettings = useGlobalSettingsState(); const userSettings = useUserSettingsState(); + // BOM validation information (used for hover-over info on the BOM tab) const bomInformation = useInstance({ endpoint: ApiEndpoints.bom_validate, pk: id, @@ -808,10 +676,7 @@ export default function PartDetail() { name: 'bom', label: t`Bill of Materials`, controls: ( - + ), icon: , hidden: !part.assembly || !user.hasViewRole(UserRoles.bom), diff --git a/src/frontend/src/pages/part/bom/BomActions.tsx b/src/frontend/src/pages/part/bom/BomActions.tsx new file mode 100644 index 0000000000..764db9f1b8 --- /dev/null +++ b/src/frontend/src/pages/part/bom/BomActions.tsx @@ -0,0 +1,191 @@ +import { ActionButton } from '@lib/components/ActionButton'; +import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; +import { UserRoles } from '@lib/enums/Roles'; +import { t } from '@lingui/core/macro'; +import { + ActionIcon, + Alert, + Group, + HoverCard, + Loader, + type MantineColor, + Stack, + Text +} from '@mantine/core'; +import { + IconCircleCheck, + IconExclamationCircle, + IconGitCompare, + IconListCheck +} from '@tabler/icons-react'; +import { type ReactNode, useEffect, useState } from 'react'; +import { useSearchParams } from 'react-router-dom'; +import { RenderUser } from '../../../components/render/User'; +import useBackgroundTask from '../../../hooks/UseBackgroundTask'; +import { useApiFormModal } from '../../../hooks/UseForm'; +import type { UseInstanceResult } from '../../../hooks/UseInstance'; +import { useUserState } from '../../../states/UserState'; +import { BomCompareDrawer } from './BomCompare'; + +/** + * A hover-over component which displays information about the BOM validation for a given part + */ +export function BomActions({ + bomInformation, + partInstance +}: Readonly<{ + bomInformation: UseInstanceResult; + partInstance: any; +}>) { + const user = useUserState(); + + const [bomCompareOpen, setBomCompareOpen] = useState(false); + + const [bomCompareId, setBomCompareId] = useState(''); + + const [searchParams, setSearchParams] = useSearchParams(); + + // Open the BOM compare drawer if the URL contains the relevant query parameter + useEffect(() => { + if ( + searchParams.has('compare') && + !!searchParams.get('compare') && + !bomCompareOpen + ) { + setBomCompareId(searchParams.get('compare') as string); + setBomCompareOpen(true); + } + }, [searchParams]); + + const [taskId, setTaskId] = useState(''); + + useBackgroundTask({ + taskId: taskId, + message: t`Validating BOM`, + successMessage: t`BOM validated`, + onComplete: () => { + bomInformation.instanceQuery.refetch(); + } + }); + + const validateBom = useApiFormModal({ + url: ApiEndpoints.bom_validate, + method: 'PUT', + fields: { + valid: { + hidden: true, + value: true + } + }, + title: t`Validate BOM`, + pk: partInstance.pk, + preFormContent: ( + } title={t`Validate BOM`}> + {t`Do you want to validate the bill of materials for this assembly?`} + + ), + successMessage: null, + onFormSuccess: (response: any) => { + // If the process has been offloaded to a background task + if (response.task_id) { + setTaskId(response.task_id); + } else { + bomInformation.instanceQuery.refetch(); + } + } + }); + + if (bomInformation.instanceQuery.isFetching) { + return ; + } + + let icon: ReactNode; + let color: MantineColor; + let title = ''; + let description = ''; + + if (bomInformation.instance?.bom_validated) { + color = 'green'; + icon = ; + title = t`BOM Validated`; + description = t`The Bill of Materials for this part has been validated`; + } else if (bomInformation.instance?.bom_checked_date) { + color = 'yellow'; + icon = ; + title = t`BOM Not Validated`; + description = t`The Bill of Materials for this part has previously been checked, but requires revalidation`; + } else { + color = 'red'; + icon = ; + title = t`BOM Not Validated`; + description = t`The Bill of Materials for this part has not yet been validated`; + } + + return ( + <> + {validateBom.modal} + + } + color='blue' + tooltip={t`Compare Bill of Materials`} + onClick={() => setBomCompareOpen(true)} + /> + {!bomInformation.instance?.bom_validated && + user.hasChangeRole(UserRoles.bom) && ( + } + color='green' + tooltip={t`Validate BOM`} + onClick={validateBom.open} + /> + )} + + + + {icon} + + + + + + {description} + {bomInformation.instance?.bom_checked_date && ( + + {t`Validated On`}:{' '} + {bomInformation.instance.bom_checked_date} + + )} + {bomInformation.instance?.bom_checked_by_detail && ( + + {t`Validated By`}: + + + )} + + + + + + { + setBomCompareId(''); + setBomCompareOpen(false); + setSearchParams((params: URLSearchParams) => { + params.delete('compare'); + return params; + }); + }} + /> + + ); +} diff --git a/src/frontend/src/pages/part/bom/BomCompare.tsx b/src/frontend/src/pages/part/bom/BomCompare.tsx new file mode 100644 index 0000000000..be69f0968b --- /dev/null +++ b/src/frontend/src/pages/part/bom/BomCompare.tsx @@ -0,0 +1,428 @@ +import { ApiEndpoints, ModelType, StylishText, apiUrl } from '@lib/index'; +import { t } from '@lingui/core/macro'; +import { + ActionIcon, + Alert, + Divider, + Drawer, + Group, + Paper, + Select, + SimpleGrid, + Stack, + Table, + Text +} from '@mantine/core'; +import { + IconArrowRight, + IconCircleCheck, + IconCirclePlus, + IconCircleX, + IconStatusChange +} from '@tabler/icons-react'; +import { useQuery } from '@tanstack/react-query'; +import { type ReactNode, useEffect, useMemo, useState } from 'react'; +import { useSearchParams } from 'react-router-dom'; +import { api } from '../../../App'; +import { StandaloneField } from '../../../components/forms/StandaloneField'; +import Expand from '../../../components/items/Expand'; +import { RenderPartColumn } from '../../../tables/ColumnRenderers'; + +// Field to check for differences when comparing BOM items +const DELTA_FIELDS = { + quantity: t`Quantity`, + reference: t`Reference`, + allow_variants: t`Allow Variants`, + inherited: t`Inherited`, + optional: t`Optional`, + consumable: t`Consumable`, + setup_quantity: t`Setup Quantity`, + attrition: t`Attrition`, + rounding_multiple: t`Rounding Multiple` +}; + +type BomCompareRow = { + part_detail: any; + primary: any; + secondary: any; + match: boolean; + deltas: string[]; + key: string; +}; + +type BomDisplayMode = 'all' | 'different' | 'common'; + +function getBomDeltas(primary: any, secondary: any): string[] { + const deltas: string[] = []; + + Object.entries(DELTA_FIELDS).forEach(([field, label]) => { + if (primary?.[field] != secondary?.[field]) { + deltas.push(field); + } + }); + + return deltas; +} + +function BomTableRow({ + item +}: Readonly<{ + item: BomCompareRow; +}>) { + const partMatch = !!item.primary && !!item.secondary; + + const quantityMatch = + partMatch && item.primary.quantity == item.secondary.quantity; + + const deltas: any[] = useMemo(() => { + const fields: any[] = []; + + item.deltas.forEach((delta) => { + fields.push({ + field: delta, + label: DELTA_FIELDS[delta as keyof typeof DELTA_FIELDS], + primaryValue: item.primary?.[delta] ?? null, + secondaryValue: item.secondary?.[delta] ?? null + }); + }); + + return fields; + }, [item]); + + // Determine the appropriate icon to display for this row + const rowIcon: ReactNode = useMemo(() => { + if (!!item.primary != !!item.secondary) { + if (!!item.secondary) { + // Part was added to the secondary BOM (exists in secondary but not primary) + return ( + + + + ); + } else { + return ( + + + + ); + } + } else if ( + !!item.deltas?.length || + item.primary?.quantity != item.secondary?.quantity + ) { + // Part exists in both BOMs but has differences + return ( + + + + ); + } else { + return ( + + + + ); + } + }, [item]); + + return ( + + + + {rowIcon} + + + + + + + {item.primary?.quantity ?? item.secondary?.quantity ?? '-'} + + {item.part_detail?.units && ( + [{item.part_detail.units}] + )} + + + + + {rowIcon} + {partMatch && deltas.length > 0 ? ( + + {deltas.map((delta, index) => ( + + {delta.label} + {delta.primaryValue ?? '-'} + + + + {delta.secondaryValue ?? '-'} + + ))} + + ) : ( + + {partMatch + ? t`No changes` + : !!item.primary + ? t`Part removed from BOM` + : t`Part added to BOM`} + + )} + + + + ); +} + +function BomTable({ + items +}: Readonly<{ + items: BomCompareRow[]; +}>) { + return ( + + + + + {t`Part`} + {t`Quantity`} + {t`Changes`} + + + + {items.map((item: any, index) => ( + + ))} + +
+
+ ); +} + +export function BomCompareDrawer({ + opened, + onClosed, + compareId, + partInstance +}: { + opened: boolean; + onClosed: () => void; + compareId?: string; + partInstance: any; +}) { + const [displayMode, setDisplayMode] = useState('all'); + + const [searchParam, setSearchParams] = useSearchParams(); + + // Fetch entire BOM for the part + const primaryBom = useQuery({ + queryKey: ['bom-compare-primary', partInstance.pk, opened], + enabled: opened && !!partInstance.pk, + queryFn: async () => { + return api + .get(apiUrl(ApiEndpoints.bom_list), { + params: { + part: partInstance.pk, + sub_part_detail: true + } + }) + .then((response) => response.data); + } + }); + + // Secondary part ID + const [secondaryPartId, setSecondaryPartId] = useState( + compareId ?? '' + ); + + useEffect(() => { + setSecondaryPartId(compareId ?? ''); + }, [opened]); + + // Fetch BOM for the secondary part + const secondaryBom = useQuery({ + queryKey: ['bom-compare-secondary', secondaryPartId, opened], + enabled: opened && !!secondaryPartId, + queryFn: async () => { + return api + .get(apiUrl(ApiEndpoints.bom_list), { + params: { + part: secondaryPartId, + sub_part_detail: true + } + }) + .then((response) => response.data); + } + }); + + // Perform comparison against + const comparedItems: any[] = useMemo(() => { + let rows: BomCompareRow[] = []; + + const primaryPartIds = new Set(); + const secondaryPartIds = new Set(); + + // First, iterate through the "primary" BOM to generate the initial data + primaryBom.data?.forEach((item: any) => { + let subPartId = `${item.sub_part}`; + + while (primaryPartIds.has(subPartId)) { + subPartId += '_dup'; + } + + primaryPartIds.add(subPartId); + + rows.push({ + part_detail: item.sub_part_detail, + primary: item, + secondary: null, + match: false, + deltas: getBomDeltas(item, null), // Initialize deltas with all fields (since no match yet) + key: subPartId + }); + }); + + // Next, iterate through the "secondary" BOM to find matches and update the data + secondaryBom.data?.forEach((item: any) => { + let subPartId = `${item.sub_part}`; + + while (secondaryPartIds.has(subPartId)) { + subPartId += '_dup'; + } + + secondaryPartIds.add(subPartId); + + // Try to find a matching part in the primary BOM + const match = rows.find((row) => row.key == subPartId); + + if (match) { + // If a match is found, update the existing row + match.secondary = item; + match.match = true; // Mark as a match + match.deltas = getBomDeltas(match.primary, match.secondary); // Update deltas with actual differences + } else { + // If no match is found, add a new row for the secondary item + rows.push({ + part_detail: item.sub_part_detail, + primary: null, + secondary: item, + match: false, + deltas: getBomDeltas(null, item), + key: subPartId + }); + } + }); + + switch (displayMode) { + case 'different': + // Show only *different* parts + rows = rows.filter((row) => !row.match); + break; + case 'common': + // Show only *common* parts + rows = rows.filter((row) => row.match); + break; + default: + case 'all': + break; + } + + // Return rows, sorted by part name + return rows.sort((a, b) => { + const nameA = a.part_detail?.name ?? ''; + const nameB = b.part_detail?.name ?? ''; + + return nameA.localeCompare(nameB); + }); + }, [displayMode, primaryBom.data, secondaryBom.data]); + + return ( + {t`Compare Bill of Materials`} + } + > + + + + + + {t`Primary Assembly`} + {t`Primary assembly for comparison`} + + + + { + setSecondaryPartId(value); + if (opened) { + setSearchParams( + { + compare: value + }, + { replace: true } + ); + } + } + }} + /> + +