From 1b8ee2e3c117fad5c2d8f542cb615212e040a42f Mon Sep 17 00:00:00 2001 From: objecttothis <17935339+objecttothis@users.noreply.github.com> Date: Fri, 2 Oct 2026 14:56:20 +0400 Subject: [PATCH] feat(items): optimize search, attribute filtering, and sort for items view (#4652) feat(items): optimize search, attribute filtering, and sort for items view (#4652) BREAKING CHANGE: none ## Search & Query Optimization - Split item search into two-phase query: Phase A resolves qualifying IDs, Phase B joins scoped display tables for better performance and readability - Sanitize `definition_ids` via `array_map` to prevent injection vulnerabilities - Introduce subquery for SUM aggregation to prevent over-counting across joins - Add validation requiring both start and end dates before applying date range filter ## Attribute Search (fixes #2919, #2722) - Add `SHOW_IN_SEARCH` flag (value 8) to Attribute model to separate searchability from table visibility - Add `parse_attribute_search()` to parse syntax like `color:blue AND size:large` - Add `applyNamedAttributeSearch()` supporting decimal and date types with locale-aware parsing - Support AND/OR logic for multi-attribute queries ## Sorting - Add `get_attribute_sort_definition_id()` to detect attribute column sorting - Join attribute tables dynamically when sorting by attribute columns - Use `MAX()` for consistent results when sorting by attribute values - Replace static sort column list with dynamic headers via `itemSortColumns()` - Add `sanitizeSortColumnAttribute()` to validate attribute definition IDs as sort columns ## Tax & Data Row - Streamline tax computation in `getItemDataRow()` ## Low Inventory Filter - Require valid `stock_location_id` before applying low inventory filter - Add conditional logic to sort by sum of quantities across all locations when `stock_location_id` is invalid ## Localization - Add `show_in_search` / `show_in_search_visibility` strings to all language files - Translated: de-DE, es-ES, fr, it; English placeholder for remaining locales - Unify single-quote style across all attribute language files ## Refactoring & Style - Adopt camelCase naming throughout (variables, helpers, methods) - Replace `sanitizeSortColumnAttribute` with reusable `sanitizeSortColumn` from `Secure_Controller` - Simplify column key extraction using `array_key_first` - Apply PSR-12 formatting ## Tests - Add tests for tax computation, quantity aggregation (single- and multi-location), named attribute search, free-text parsing, and date/decimal type handling - Add `ensureStockLocation` helper to auto-create missing stock locations in tests - Refactor tests to handle config cache issues Co-authored-by: Ollama --- AGENTS.md | 2 +- app/Controllers/Attributes.php | 20 +- app/Controllers/Items.php | 94 ++++- app/Controllers/Secure_Controller.php | 12 +- app/Helpers/tabular_helper.php | 70 ++-- app/Language/ar-EG/Attributes.php | 62 +-- app/Language/ar-LB/Attributes.php | 62 +-- app/Language/az/Attributes.php | 62 +-- app/Language/bg/Attributes.php | 62 +-- app/Language/bs/Attributes.php | 62 +-- app/Language/ckb/Attributes.php | 62 +-- app/Language/cs/Attributes.php | 62 +-- app/Language/da/Attributes.php | 62 +-- app/Language/de-CH/Attributes.php | 62 +-- app/Language/de-DE/Attributes.php | 62 +-- app/Language/el/Attributes.php | 62 +-- app/Language/en-GB/Attributes.php | 62 +-- app/Language/en/Attributes.php | 62 +-- app/Language/es-ES/Attributes.php | 62 +-- app/Language/es-MX/Attributes.php | 62 +-- app/Language/fa/Attributes.php | 62 +-- app/Language/fr/Attributes.php | 62 +-- app/Language/he/Attributes.php | 62 +-- app/Language/hr-HR/Attributes.php | 62 +-- app/Language/hu/Attributes.php | 62 +-- app/Language/hy/Attributes.php | 62 +-- app/Language/id/Attributes.php | 62 +-- app/Language/it/Attributes.php | 62 +-- app/Language/km/Attributes.php | 62 +-- app/Language/lo/Attributes.php | 62 +-- app/Language/ml/Attributes.php | 62 +-- app/Language/nb/Attributes.php | 62 +-- app/Language/nl-BE/Attributes.php | 62 +-- app/Language/nl-NL/Attributes.php | 62 +-- app/Language/pl/Attributes.php | 62 +-- app/Language/pt-BR/Attributes.php | 62 +-- app/Language/ro/Attributes.php | 62 +-- app/Language/ru/Attributes.php | 62 +-- app/Language/sv/Attributes.php | 62 +-- app/Language/sw-KE/Attributes.php | 64 +-- app/Language/sw-TZ/Attributes.php | 64 +-- app/Language/ta/Attributes.php | 62 +-- app/Language/th/Attributes.php | 62 +-- app/Language/tl/Attributes.php | 62 +-- app/Language/tr/Attributes.php | 62 +-- app/Language/uk/Attributes.php | 62 +-- app/Language/ur/Attributes.php | 62 +-- app/Language/vi/Attributes.php | 62 +-- app/Language/zh-Hans/Attributes.php | 62 +-- app/Language/zh-Hant/Attributes.php | 62 +-- app/Models/Attribute.php | 3 +- app/Models/Item.php | 480 ++++++++++++++++++----- app/Models/Item_taxes.php | 20 + tests/Models/ItemSearchTest.php | 468 ++++++++++++++++++++++ tests/Models/ItemTaxesMultipleTest.php | 79 ++++ tests/Support/ItemSearchFixtureTrait.php | 133 +++++++ tests/helpers/GetItemDataRowTest.php | 107 +++++ 57 files changed, 2765 insertions(+), 1517 deletions(-) create mode 100644 tests/Models/ItemSearchTest.php create mode 100644 tests/Models/ItemTaxesMultipleTest.php create mode 100644 tests/Support/ItemSearchFixtureTrait.php create mode 100644 tests/helpers/GetItemDataRowTest.php diff --git a/AGENTS.md b/AGENTS.md index 52163b0d1..bbca08c83 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,7 +12,7 @@ This document provides guidance for AI agents working on the Open Source Point o - PHP 8.2+ features acceptable (named arguments, enums, readonly properties) - Write PHP 8.2+ compatible code with proper type declarations - Always import classes, functions, and constants with a `use` statement at the top of the file instead of referencing them inline via fully-qualified name (e.g. `use Config\Database;` then `Database::connect()`, not `\Config\Database::connect()`) -- Do not add comments or docblocks that merely restate what the code already makes clear — only comment on non-obvious rationale, constraints, or behavior +- No useless comments or docblocks: if the code speaks for itself, explanatory comments are unnecessary. Do not add comments or docblocks that merely restate what the code already makes clear (e.g. `@param array $items` next to `array $items`, or a comment repeating a method's name) — only comment on non-obvious rationale, constraints, or behavior - Views in `app/Views/errors/html/` are excluded from the fixer - Run fixer before committing: `vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.no-header.php` - **JavaScript**: use `const` for variables that are never reassigned, `let` for variables that are. Never use `var`. diff --git a/app/Controllers/Attributes.php b/app/Controllers/Attributes.php index de78f15d4..0b59836ae 100644 --- a/app/Controllers/Attributes.php +++ b/app/Controllers/Attributes.php @@ -257,26 +257,26 @@ class Attributes extends Secure_Controller } /** - * @param int $definition_id + * @param int $definitionId * @return string */ - public function getView(int $definition_id = NO_DEFINITION_ID): string + public function getView(int $definitionId = NO_DEFINITION_ID): string { - $info = $this->attribute->getAttributeInfo($definition_id); + $info = $this->attribute->getAttributeInfo($definitionId); foreach (get_object_vars($info) as $property => $value) { $info->$property = $value; } - $data['definition_id'] = $definition_id; - $data['definition_values'] = $this->attribute->getDefinitionValues($definition_id); - $data['definition_group'] = $this->attribute->getDefinitionsByType(GROUP, $definition_id); + $data['definition_id'] = $definitionId; + $data['definition_values'] = $this->attribute->getDefinitionValues($definitionId); + $data['definition_group'] = $this->attribute->getDefinitionsByType(GROUP, $definitionId); $data['definition_group'][''] = lang('Common.none_selected_text'); $data['definition_info'] = $info; - $show_all = Attribute::SHOW_IN_ITEMS | Attribute::SHOW_IN_RECEIVINGS | Attribute::SHOW_IN_SALES; - $data['definition_flags'] = $this->get_attributes($show_all); - $selected_flags = $info->definition_flags === '' ? $show_all : $info->definition_flags; - $data['selected_definition_flags'] = $this->get_attributes($selected_flags); + $showAll = Attribute::SHOW_IN_ITEMS | Attribute::SHOW_IN_RECEIVINGS | Attribute::SHOW_IN_SALES | Attribute::SHOW_IN_SEARCH; + $data['definition_flags'] = $this->get_attributes($showAll); + $selectedFlags = $info->definition_flags === '' ? $showAll : $info->definition_flags; + $data['selected_definition_flags'] = $this->get_attributes($selectedFlags); return view('attributes/form', $data); } diff --git a/app/Controllers/Items.php b/app/Controllers/Items.php index f4a7b33bf..33529261b 100644 --- a/app/Controllers/Items.php +++ b/app/Controllers/Items.php @@ -76,7 +76,7 @@ class Items extends Secure_Controller { $this->session->set('allow_temp_items', 0); - $data['table_headers'] = get_items_manage_table_headers(); + $data['table_headers'] = getItemsManageTableHeaders(); // Restore stock_location from URL or session $stockLocation = $this->request->getGet('stock_location', FILTER_SANITIZE_NUMBER_INT); @@ -111,12 +111,14 @@ class Items extends Secure_Controller $search = $this->request->getGet('search', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT); $offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT); - $sort = $this->sanitizeSortColumn(item_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'item_id'); $order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $this->item_lib->set_item_location($this->request->getGet('stock_location')); - $definitionNames = $this->attribute->getDefinitionsByFlags(Attribute::SHOW_IN_ITEMS); + $definitionNamesWithTypes = $this->attribute->getDefinitionsByFlags(Attribute::SHOW_IN_ITEMS, true); + $definitionIds = array_keys($definitionNamesWithTypes); + + $sort = $this->sanitizeSortColumn(itemSortColumns($definitionIds), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'items.item_id'); $filters = [ 'start_date' => $this->request->getGet('start_date'), @@ -129,25 +131,79 @@ class Items extends Secure_Controller 'search_custom' => false, 'is_deleted' => false, 'temporary' => false, - 'definition_ids' => array_keys($definitionNames) + 'definition_ids' => $definitionIds ]; // Check if any filter is set in the multiselect dropdown - $request_filters = array_fill_keys($this->request->getGet('filters', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? [], true); - $filters = array_merge($filters, $request_filters); - $items = $this->item->search($search, $filters, $limit, $offset, $sort, $order); - $total_rows = $this->item->get_found_rows($search, $filters); - $data_rows = []; + $requestFilters = array_fill_keys($this->request->getGet('filters', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? [], true); + $filters = array_merge($filters, $requestFilters); - foreach ($items->getResult() as $item) { - $data_rows[] = get_item_data_row($item); + // When search_custom is enabled, include attributes that are searchable but may not be visible in table + if (!empty($filters['search_custom'])) { + $searchableDefinitions = $this->attribute->getDefinitionsByFlags(Attribute::SHOW_IN_ITEMS | Attribute::SHOW_IN_SEARCH); + $filters['definition_ids'] = array_keys($searchableDefinitions); + } + + $items = $this->item->search($search, $filters, $limit, $offset, $sort, $order); + $itemResults = $items->getResult(); + $totalRows = $this->item->get_found_rows($search, $filters); + $taxPercentsByItemId = $this->buildTaxPercentsByItem($itemResults); + + $dataRows = []; + + foreach ($itemResults as $item) { + $dataRows[] = getItemDataRow($item, $definitionNamesWithTypes, $taxPercentsByItemId); if ($item->pic_filename !== null) { $this->update_pic_filename($item); } } - return $this->response->setJSON(['total' => $total_rows, 'rows' => $data_rows]); + return $this->response->setJSON(['total' => $totalRows, 'rows' => $dataRows]); + } + + /** + * @return array item_id => formatted tax percents string + */ + private function buildTaxPercentsByItem(array $items): array + { + $config = config(OSPOS::class)->settings; + $taxPercentsByItemId = []; + + if ($config['use_destination_based_tax']) { + $taxCategoryIds = array_unique(array_filter(array_map(fn ($item) => $item->tax_category_id, $items))); + + if (empty($taxCategoryIds)) { + return []; + } + + $taxCategoryNames = []; + foreach ($this->tax_category->get_multiple_info($taxCategoryIds)->getResult() as $taxCategoryInfo) { + $taxCategoryNames[$taxCategoryInfo->tax_category_id] = $taxCategoryInfo->tax_category; + } + + foreach ($items as $item) { + if ($item->tax_category_id !== null && isset($taxCategoryNames[$item->tax_category_id])) { + $taxPercentsByItemId[$item->item_id] = $taxCategoryNames[$item->tax_category_id]; + } + } + } else { + $itemIds = array_map(fn ($item) => $item->item_id, $items); + $itemTaxesByItemId = $this->item_taxes->getInfoMultiple($itemIds); + + foreach ($itemIds as $itemId) { + $taxPercents = ''; + foreach ($itemTaxesByItemId[$itemId] ?? [] as $taxInfo) { + $taxPercents .= to_tax_decimals($taxInfo['percent']) . '%, '; + } + + // Remove ', ' from last item + $taxPercents = substr($taxPercents, 0, -2); + $taxPercentsByItemId[$itemId] = !$taxPercents ? '-' : $taxPercents; + } + } + + return $taxPercentsByItemId; } /** @@ -276,17 +332,21 @@ class Items extends Secure_Controller } /** - * @param string $item_ids + * @param string $itemIds * @return ResponseInterface */ - public function getRow(string $item_ids): ResponseInterface // TODO: An array would be better for parameter. + public function getRow(string $itemIds): ResponseInterface // TODO: An array would be better for parameter. { - $item_infos = $this->item->get_multiple_info(explode(':', $item_ids), $this->item_lib->get_item_location()); + $itemInfos = $this->item->get_multiple_info(explode(':', $itemIds), $this->item_lib->get_item_location()); + $itemResults = $itemInfos->getResult(); + + $definitionNames = $this->attribute->getDefinitionsByFlags(Attribute::SHOW_IN_ITEMS, true); + $taxPercentsByItemId = $this->buildTaxPercentsByItem($itemResults); $result = []; - foreach ($item_infos->getResult() as $item_info) { - $result[$item_info->item_id] = get_item_data_row($item_info); + foreach ($itemResults as $itemInfo) { + $result[$itemInfo->item_id] = getItemDataRow($itemInfo, $definitionNames, $taxPercentsByItemId); } return $this->response->setJSON($result); diff --git a/app/Controllers/Secure_Controller.php b/app/Controllers/Secure_Controller.php index 36daeebd5..535825d3e 100644 --- a/app/Controllers/Secure_Controller.php +++ b/app/Controllers/Secure_Controller.php @@ -75,7 +75,17 @@ class Secure_Controller extends BaseController public function sanitizeSortColumn($headers, $field, $default): string { - return $field != null && in_array($field, array_keys(array_merge(...$headers))) ? $field : $default; + if ($field === null) { + return $default; + } + + // Flatten keys directly as array_merge() renumbers numeric string keys + $validColumns = []; + foreach ($headers as $header) { + $validColumns[] = (string) array_key_first($header); + } + + return in_array((string) $field, $validColumns, true) ? $field : $default; } /** diff --git a/app/Helpers/tabular_helper.php b/app/Helpers/tabular_helper.php index 129e6c921..2670929c0 100644 --- a/app/Helpers/tabular_helper.php +++ b/app/Helpers/tabular_helper.php @@ -2,8 +2,6 @@ use App\Models\Attribute; use App\Models\Employee; -use App\Models\Item_taxes; -use App\Models\Tax_category; use CodeIgniter\Database\ResultInterface; use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\Session\Session; @@ -402,10 +400,33 @@ function item_headers(): array ]; } +/** + * Get all sortable column keys for items table, including dynamic attribute columns. + * + * @param array|null $definitionIds Attribute definition IDs to append as sortable columns. + * If null, resolved via a query against SHOW_IN_ITEMS. + * @return array Array of column headers in the format sanitizeSortColumn() expects + */ +function itemSortColumns(?array $definitionIds = null): array +{ + if ($definitionIds === null) { + $attribute = model(Attribute::class); + $definitionIds = array_keys($attribute->getDefinitionsByFlags($attribute::SHOW_IN_ITEMS)); + } + + $headers = item_headers(); + + foreach ($definitionIds as $definitionId) { + $headers[] = [(string) $definitionId => '']; + } + + return $headers; +} + /** * Get the header for the items tabular view */ -function get_items_manage_table_headers(): string +function getItemsManageTableHeaders(): string { $attribute = model(Attribute::class); $config = config(OSPOS::class)->settings; @@ -421,8 +442,8 @@ function get_items_manage_table_headers(): string $headers[] = ['item_pic' => lang('Items.image'), 'sortable' => false]; - foreach ($definitionsWithTypes as $definition_id => $definitionInfo) { - $headers[] = [$definition_id => $definitionInfo['name'], 'sortable' => false]; + foreach ($definitionsWithTypes as $definitionId => $definitionInfo) { + $headers[] = [$definitionId => $definitionInfo['name'], 'sortable' => true]; } $headers[] = ['inventory' => '', 'escape' => false]; @@ -433,32 +454,17 @@ function get_items_manage_table_headers(): string /** * Get the html data row for the item + * + * @param object $item + * @param array $definitionNames Attribute definitions with types, keyed by definition_id (see Attribute::getDefinitionsByFlags(..., true)) + * @param array $taxPercentsByItemId Pre-computed tax percent strings, keyed by item_id (see Items::buildTaxPercentsByItem()) + * @return array */ -function get_item_data_row(object $item): array +function getItemDataRow(object $item, array $definitionNames, array $taxPercentsByItemId): array { - $attribute = model(Attribute::class); - $item_taxes = model(Item_taxes::class); - $tax_category = model(Tax_category::class); $config = config(OSPOS::class)->settings; - if ($config['use_destination_based_tax']) { - if ($item->tax_category_id == null) { // TODO: === ? - $tax_percents = '-'; - } else { - $tax_category_info = $tax_category->get_info($item->tax_category_id); - $tax_percents = $tax_category_info->tax_category; - } - } else { - $item_tax_info = $item_taxes->get_info($item->item_id); - $tax_percents = ''; - foreach ($item_tax_info as $tax_info) { - $tax_percents .= to_tax_decimals($tax_info['percent']) . '%, '; - } - - // Remove ', ' from last item - $tax_percents = substr($tax_percents, 0, -2); - $tax_percents = !$tax_percents ? '-' : $tax_percents; - } + $taxPercents = $taxPercentsByItemId[$item->item_id] ?? '-'; $controller = get_controller(); @@ -471,8 +477,8 @@ function get_item_data_row(object $item): array : glob("./uploads/item_pics/$item->pic_filename"); if (sizeof($images) > 0) { - $image_path = ltrim($images[0], './'); - $image .= 'Image thumbnail'; + $imagePath = ltrim($images[0], './'); + $image .= 'Image thumbnail'; } } @@ -480,8 +486,6 @@ function get_item_data_row(object $item): array $item->name .= NAME_SEPARATOR . $item->pack_name; } - $definition_names = $attribute->getDefinitionsByFlags($attribute::SHOW_IN_ITEMS, true); - $columns = [ 'items.item_id' => $item->item_id, 'item_number' => $item->item_number, @@ -491,7 +495,7 @@ function get_item_data_row(object $item): array 'cost_price' => to_currency($item->cost_price), 'unit_price' => to_currency($item->unit_price), 'quantity' => to_quantity_decimals($item->quantity), - 'tax_percents' => !$tax_percents ? '-' : $tax_percents, + 'tax_percents' => !$taxPercents ? '-' : $taxPercents, 'item_pic' => $image ]; @@ -524,7 +528,7 @@ function get_item_data_row(object $item): array ) ]; - return $columns + expand_attribute_values($definition_names, (array) $item) + $icons; + return $columns + expand_attribute_values($definitionNames, (array) $item) + $icons; } function giftcard_headers(): array diff --git a/app/Language/ar-EG/Attributes.php b/app/Language/ar-EG/Attributes.php index b286580a2..c754d6009 100644 --- a/app/Language/ar-EG/Attributes.php +++ b/app/Language/ar-EG/Attributes.php @@ -1,34 +1,36 @@ "الميزات لا يمكن أن تحتوي على ':' أو'|'", - "confirm_delete" => "هل أنت متأكد من أنك تريد حذف الميزات المحددة ؟", - "confirm_restore" => "هل أنت متأكد من أنك تريد استعادة السمة (السمات) المحددة؟", - "definition_cannot_be_deleted" => "لا يمكن حذف السمات المحددة", - "definition_invalid_group" => "المجموعة المحددة غير موجودة أو غير صالحة.", - "definition_error_adding_updating" => "لا يمكن إضافة السمة {0} أو تحديثها. يرجى التحقق من سجل الخطأ.", - "definition_flags" => "رؤية الميزات", - "definition_group" => "المجموعة", - "definition_id" => "كود", - "definition_name" => "إضافة ميزة", - "definition_name_required" => "اسم الميزة هي خانة اجبارية", - "definition_one_or_multiple" => "ميزة/ميزات", - "definition_successful_adding" => "لقد تم إضافة صنف بنجاح", - "definition_successful_deleted" => "لقد تم حذف ميزة بنجاح", - "definition_successful_updating" => "تم تعديل الميزة بنجاح", - "definition_type" => "نوع الميزة", - "definition_type_required" => "نوع الميزة هي خانة إجبارية", - "definition_unit" => "وحدة قياس", - "definition_values" => "قيمة الميزة", - "new" => "اضافة ميزة جديده", - "no_attributes_to_display" => "لا يوجد اصناف للعرض", - "receipt_visibility" => "وصل", - "show_in_items" => "اظهار في الصنف", - "show_in_items_visibility" => "الصنف", - "show_in_receipt" => "اظهار على الوصل", - "show_in_receivings" => "اظهار في استلام البضائع", - "show_in_receivings_visibility" => "استلام البضائع", - "show_in_sales" => "اظهار خلال البيع", - "show_in_sales_visibility" => "البيع", - "update" => "تحديث الميزات", + 'attribute_value_invalid_chars' => 'الميزات لا يمكن أن تحتوي على \':\' أو\'|\'', + 'confirm_delete' => 'هل أنت متأكد من أنك تريد حذف الميزات المحددة ؟', + 'confirm_restore' => 'هل أنت متأكد من أنك تريد استعادة السمة (السمات) المحددة؟', + 'definition_cannot_be_deleted' => 'لا يمكن حذف السمات المحددة', + 'definition_invalid_group' => 'المجموعة المحددة غير موجودة أو غير صالحة.', + 'definition_error_adding_updating' => 'لا يمكن إضافة السمة {0} أو تحديثها. يرجى التحقق من سجل الخطأ.', + 'definition_flags' => 'رؤية الميزات', + 'definition_group' => 'المجموعة', + 'definition_id' => 'كود', + 'definition_name' => 'إضافة ميزة', + 'definition_name_required' => 'اسم الميزة هي خانة اجبارية', + 'definition_one_or_multiple' => 'ميزة/ميزات', + 'definition_successful_adding' => 'لقد تم إضافة صنف بنجاح', + 'definition_successful_deleted' => 'لقد تم حذف ميزة بنجاح', + 'definition_successful_updating' => 'تم تعديل الميزة بنجاح', + 'definition_type' => 'نوع الميزة', + 'definition_type_required' => 'نوع الميزة هي خانة إجبارية', + 'definition_unit' => 'وحدة قياس', + 'definition_values' => 'قيمة الميزة', + 'new' => 'اضافة ميزة جديده', + 'no_attributes_to_display' => 'لا يوجد اصناف للعرض', + 'receipt_visibility' => 'وصل', + 'show_in_items' => 'اظهار في الصنف', + 'show_in_items_visibility' => 'الصنف', + 'show_in_receipt' => 'اظهار على الوصل', + 'show_in_receivings' => 'اظهار في استلام البضائع', + 'show_in_receivings_visibility' => 'استلام البضائع', + 'show_in_sales' => 'اظهار خلال البيع', + 'show_in_sales_visibility' => 'البيع', + 'show_in_search' => 'اظهار في البحث', + 'show_in_search_visibility' => 'بحث', + 'update' => 'تحديث الميزات', ]; diff --git a/app/Language/ar-LB/Attributes.php b/app/Language/ar-LB/Attributes.php index b286580a2..c754d6009 100644 --- a/app/Language/ar-LB/Attributes.php +++ b/app/Language/ar-LB/Attributes.php @@ -1,34 +1,36 @@ "الميزات لا يمكن أن تحتوي على ':' أو'|'", - "confirm_delete" => "هل أنت متأكد من أنك تريد حذف الميزات المحددة ؟", - "confirm_restore" => "هل أنت متأكد من أنك تريد استعادة السمة (السمات) المحددة؟", - "definition_cannot_be_deleted" => "لا يمكن حذف السمات المحددة", - "definition_invalid_group" => "المجموعة المحددة غير موجودة أو غير صالحة.", - "definition_error_adding_updating" => "لا يمكن إضافة السمة {0} أو تحديثها. يرجى التحقق من سجل الخطأ.", - "definition_flags" => "رؤية الميزات", - "definition_group" => "المجموعة", - "definition_id" => "كود", - "definition_name" => "إضافة ميزة", - "definition_name_required" => "اسم الميزة هي خانة اجبارية", - "definition_one_or_multiple" => "ميزة/ميزات", - "definition_successful_adding" => "لقد تم إضافة صنف بنجاح", - "definition_successful_deleted" => "لقد تم حذف ميزة بنجاح", - "definition_successful_updating" => "تم تعديل الميزة بنجاح", - "definition_type" => "نوع الميزة", - "definition_type_required" => "نوع الميزة هي خانة إجبارية", - "definition_unit" => "وحدة قياس", - "definition_values" => "قيمة الميزة", - "new" => "اضافة ميزة جديده", - "no_attributes_to_display" => "لا يوجد اصناف للعرض", - "receipt_visibility" => "وصل", - "show_in_items" => "اظهار في الصنف", - "show_in_items_visibility" => "الصنف", - "show_in_receipt" => "اظهار على الوصل", - "show_in_receivings" => "اظهار في استلام البضائع", - "show_in_receivings_visibility" => "استلام البضائع", - "show_in_sales" => "اظهار خلال البيع", - "show_in_sales_visibility" => "البيع", - "update" => "تحديث الميزات", + 'attribute_value_invalid_chars' => 'الميزات لا يمكن أن تحتوي على \':\' أو\'|\'', + 'confirm_delete' => 'هل أنت متأكد من أنك تريد حذف الميزات المحددة ؟', + 'confirm_restore' => 'هل أنت متأكد من أنك تريد استعادة السمة (السمات) المحددة؟', + 'definition_cannot_be_deleted' => 'لا يمكن حذف السمات المحددة', + 'definition_invalid_group' => 'المجموعة المحددة غير موجودة أو غير صالحة.', + 'definition_error_adding_updating' => 'لا يمكن إضافة السمة {0} أو تحديثها. يرجى التحقق من سجل الخطأ.', + 'definition_flags' => 'رؤية الميزات', + 'definition_group' => 'المجموعة', + 'definition_id' => 'كود', + 'definition_name' => 'إضافة ميزة', + 'definition_name_required' => 'اسم الميزة هي خانة اجبارية', + 'definition_one_or_multiple' => 'ميزة/ميزات', + 'definition_successful_adding' => 'لقد تم إضافة صنف بنجاح', + 'definition_successful_deleted' => 'لقد تم حذف ميزة بنجاح', + 'definition_successful_updating' => 'تم تعديل الميزة بنجاح', + 'definition_type' => 'نوع الميزة', + 'definition_type_required' => 'نوع الميزة هي خانة إجبارية', + 'definition_unit' => 'وحدة قياس', + 'definition_values' => 'قيمة الميزة', + 'new' => 'اضافة ميزة جديده', + 'no_attributes_to_display' => 'لا يوجد اصناف للعرض', + 'receipt_visibility' => 'وصل', + 'show_in_items' => 'اظهار في الصنف', + 'show_in_items_visibility' => 'الصنف', + 'show_in_receipt' => 'اظهار على الوصل', + 'show_in_receivings' => 'اظهار في استلام البضائع', + 'show_in_receivings_visibility' => 'استلام البضائع', + 'show_in_sales' => 'اظهار خلال البيع', + 'show_in_sales_visibility' => 'البيع', + 'show_in_search' => 'اظهار في البحث', + 'show_in_search_visibility' => 'بحث', + 'update' => 'تحديث الميزات', ]; diff --git a/app/Language/az/Attributes.php b/app/Language/az/Attributes.php index bd28a0a28..9f8e336de 100644 --- a/app/Language/az/Attributes.php +++ b/app/Language/az/Attributes.php @@ -1,34 +1,36 @@ "Atribut dəyəri bu ':' və ya '|' olmaz", - "confirm_delete" => "Seçilmiş Atributları silmək istədiyinizdən əminsinizmi?", - "confirm_restore" => "Seçilmiş atributları bərpa etmək istədiyinizə əminsinizmi?", - "definition_cannot_be_deleted" => "Seçilmiş xüsusiyyətləri silmək olmadı", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "{0} -in atributları əlavə oluna və yenilənə bilmədi. Lütfən XƏTA loq faylını yoxlayın.", - "definition_flags" => "Atribut görünüşü", - "definition_group" => "Qrup", - "definition_id" => "Id", - "definition_name" => "Atribut əlavə et", - "definition_name_required" => "Atribut adı zəruri bir sahədir", - "definition_one_or_multiple" => "atribut (lar)", - "definition_successful_adding" => "Malı uğurla əlavə etdiniz", - "definition_successful_deleted" => "Siz uğurla sildiniz", - "definition_successful_updating" => "Atributunuzu müvəffəqiyyətlə yenilədiniz", - "definition_type" => "Atribut Tipi", - "definition_type_required" => "Atribut növü tələb olunan sahədir", - "definition_unit" => "Ölçü vahidi", - "definition_values" => "Atribut dəyərləri", - "new" => "Yeni atributlar", - "no_attributes_to_display" => "Göstərmək üçün heç bir element yoxdur", - "receipt_visibility" => "Qəbz", - "show_in_items" => "Malları göstər", - "show_in_items_visibility" => "Mallar", - "show_in_receipt" => "Qəbzi göstərin", - "show_in_receivings" => "Alacaqlarda göstərin", - "show_in_receivings_visibility" => "Alınanlar", - "show_in_sales" => "Satışda göstərin", - "show_in_sales_visibility" => "Satışlar", - "update" => "Atributları yenilə", + 'attribute_value_invalid_chars' => 'Atribut dəyəri bu \':\' və ya \'|\' olmaz', + 'confirm_delete' => 'Seçilmiş Atributları silmək istədiyinizdən əminsinizmi?', + 'confirm_restore' => 'Seçilmiş atributları bərpa etmək istədiyinizə əminsinizmi?', + 'definition_cannot_be_deleted' => 'Seçilmiş xüsusiyyətləri silmək olmadı', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => '{0} -in atributları əlavə oluna və yenilənə bilmədi. Lütfən XƏTA loq faylını yoxlayın.', + 'definition_flags' => 'Atribut görünüşü', + 'definition_group' => 'Qrup', + 'definition_id' => 'Id', + 'definition_name' => 'Atribut əlavə et', + 'definition_name_required' => 'Atribut adı zəruri bir sahədir', + 'definition_one_or_multiple' => 'atribut (lar)', + 'definition_successful_adding' => 'Malı uğurla əlavə etdiniz', + 'definition_successful_deleted' => 'Siz uğurla sildiniz', + 'definition_successful_updating' => 'Atributunuzu müvəffəqiyyətlə yenilədiniz', + 'definition_type' => 'Atribut Tipi', + 'definition_type_required' => 'Atribut növü tələb olunan sahədir', + 'definition_unit' => 'Ölçü vahidi', + 'definition_values' => 'Atribut dəyərləri', + 'new' => 'Yeni atributlar', + 'no_attributes_to_display' => 'Göstərmək üçün heç bir element yoxdur', + 'receipt_visibility' => 'Qəbz', + 'show_in_items' => 'Malları göstər', + 'show_in_items_visibility' => 'Mallar', + 'show_in_receipt' => 'Qəbzi göstərin', + 'show_in_receivings' => 'Alacaqlarda göstərin', + 'show_in_receivings_visibility' => 'Alınanlar', + 'show_in_sales' => 'Satışda göstərin', + 'show_in_sales_visibility' => 'Satışlar', + 'show_in_search' => 'Axtarışda göstər', + 'show_in_search_visibility' => 'Axtarış', + 'update' => 'Atributları yenilə', ]; diff --git a/app/Language/bg/Attributes.php b/app/Language/bg/Attributes.php index 3213b12e4..0342064f7 100644 --- a/app/Language/bg/Attributes.php +++ b/app/Language/bg/Attributes.php @@ -1,34 +1,36 @@ "", - "confirm_delete" => "", - "confirm_restore" => "", - "definition_cannot_be_deleted" => "", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "", - "definition_flags" => "", - "definition_group" => "", - "definition_id" => "", - "definition_name" => "", - "definition_name_required" => "", - "definition_one_or_multiple" => "", - "definition_successful_adding" => "", - "definition_successful_deleted" => "", - "definition_successful_updating" => "", - "definition_type" => "", - "definition_type_required" => "", - "definition_unit" => "", - "definition_values" => "", - "new" => "", - "no_attributes_to_display" => "", - "receipt_visibility" => "", - "show_in_items" => "", - "show_in_items_visibility" => "", - "show_in_receipt" => "", - "show_in_receivings" => "", - "show_in_receivings_visibility" => "", - "show_in_sales" => "", - "show_in_sales_visibility" => "", - "update" => "", + 'attribute_value_invalid_chars' => '', + 'confirm_delete' => '', + 'confirm_restore' => '', + 'definition_cannot_be_deleted' => '', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => '', + 'definition_flags' => '', + 'definition_group' => '', + 'definition_id' => '', + 'definition_name' => '', + 'definition_name_required' => '', + 'definition_one_or_multiple' => '', + 'definition_successful_adding' => '', + 'definition_successful_deleted' => '', + 'definition_successful_updating' => '', + 'definition_type' => '', + 'definition_type_required' => '', + 'definition_unit' => '', + 'definition_values' => '', + 'new' => '', + 'no_attributes_to_display' => '', + 'receipt_visibility' => '', + 'show_in_items' => '', + 'show_in_items_visibility' => '', + 'show_in_receipt' => '', + 'show_in_receivings' => '', + 'show_in_receivings_visibility' => '', + 'show_in_sales' => '', + 'show_in_sales_visibility' => '', + 'show_in_search' => 'Показване в търсенето', + 'show_in_search_visibility' => 'Търсене', + 'update' => '', ]; diff --git a/app/Language/bs/Attributes.php b/app/Language/bs/Attributes.php index 36a640f0b..662b6954c 100644 --- a/app/Language/bs/Attributes.php +++ b/app/Language/bs/Attributes.php @@ -1,34 +1,36 @@ "Vrijednost atributa ne može sadržavati ':' ili '|'", - "confirm_delete" => "Da li ste sigurni da želite da izbrišete izabrani atribut?", - "confirm_restore" => "Da li ste sigurni da želite vratiti izabrane atribute?", - "definition_cannot_be_deleted" => "Nije moguće izbrisati izabrane atribut", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "Atribut {0} nije moguće dodati ili ažurirati. Molimo provjerite dnevnik grešaka.", - "definition_flags" => "Vidljivost atributa", - "definition_group" => "Grupa", - "definition_id" => "Id", - "definition_name" => "Dodaj Atribut", - "definition_name_required" => "Ime atributa je obavezno polje", - "definition_one_or_multiple" => "atributi", - "definition_successful_adding" => "Uspješno ste dodali stavku", - "definition_successful_deleted" => "Uspješno ste izbrisali", - "definition_successful_updating" => "Uspješno ste ažurirali atribute", - "definition_type" => "Tip atributa", - "definition_type_required" => "Tip atributa je obavezno polje", - "definition_unit" => "Jedinice mjere", - "definition_values" => "Vrijednosti atributa", - "new" => "Novi atribut", - "no_attributes_to_display" => "Nema stavki za prikaz", - "receipt_visibility" => "Račun", - "show_in_items" => "Prikaži u stavkama", - "show_in_items_visibility" => "Stavka", - "show_in_receipt" => "Prikaži u računu", - "show_in_receivings" => "Prikaži na ulazima", - "show_in_receivings_visibility" => "Ulazi", - "show_in_sales" => "Prikaži u prodaji", - "show_in_sales_visibility" => "Prodaja", - "update" => "Ažuriraj atribut", + 'attribute_value_invalid_chars' => 'Vrijednost atributa ne može sadržavati \':\' ili \'|\'', + 'confirm_delete' => 'Da li ste sigurni da želite da izbrišete izabrani atribut?', + 'confirm_restore' => 'Da li ste sigurni da želite vratiti izabrane atribute?', + 'definition_cannot_be_deleted' => 'Nije moguće izbrisati izabrane atribut', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'Atribut {0} nije moguće dodati ili ažurirati. Molimo provjerite dnevnik grešaka.', + 'definition_flags' => 'Vidljivost atributa', + 'definition_group' => 'Grupa', + 'definition_id' => 'Id', + 'definition_name' => 'Dodaj Atribut', + 'definition_name_required' => 'Ime atributa je obavezno polje', + 'definition_one_or_multiple' => 'atributi', + 'definition_successful_adding' => 'Uspješno ste dodali stavku', + 'definition_successful_deleted' => 'Uspješno ste izbrisali', + 'definition_successful_updating' => 'Uspješno ste ažurirali atribute', + 'definition_type' => 'Tip atributa', + 'definition_type_required' => 'Tip atributa je obavezno polje', + 'definition_unit' => 'Jedinice mjere', + 'definition_values' => 'Vrijednosti atributa', + 'new' => 'Novi atribut', + 'no_attributes_to_display' => 'Nema stavki za prikaz', + 'receipt_visibility' => 'Račun', + 'show_in_items' => 'Prikaži u stavkama', + 'show_in_items_visibility' => 'Stavka', + 'show_in_receipt' => 'Prikaži u računu', + 'show_in_receivings' => 'Prikaži na ulazima', + 'show_in_receivings_visibility' => 'Ulazi', + 'show_in_sales' => 'Prikaži u prodaji', + 'show_in_sales_visibility' => 'Prodaja', + 'show_in_search' => 'Prikaži u pretrazi', + 'show_in_search_visibility' => 'Pretraga', + 'update' => 'Ažuriraj atribut', ]; diff --git a/app/Language/ckb/Attributes.php b/app/Language/ckb/Attributes.php index 77f189a9c..d5ba8eaa9 100644 --- a/app/Language/ckb/Attributes.php +++ b/app/Language/ckb/Attributes.php @@ -1,34 +1,36 @@ "بەهای تایبەتمەندیی ناتوانێت '_' یان ' لەخۆبگرێت|'", - "confirm_delete" => "ئایا دڵنیای کە دەتەوێت تایبەتمەندییە هەڵبژێردراوەکە(کان) بسڕیتەوە؟", - "confirm_restore" => "ئایا دڵنیای کە دەتەوێت تایبەتمەندییە هەڵبژێردراوەکە(کان) بگەڕێنیتەوە؟", - "definition_cannot_be_deleted" => "نەتوانرا تایبەتمەندی هەڵبژێردراو بسڕدرێتەوە", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "تایبەتمەندی {0} نەتوانرا زیاد بکرێت یان نوێ بکرێتەوە. تکایە لیستی هەڵەکان بپشکنە.", - "definition_flags" => "توانای بینراویی تایبەتمەندی", - "definition_group" => "گروپ", - "definition_id" => "ناسنامە", - "definition_name" => "تایبەتمەندی زیاد بکە", - "definition_name_required" => "ناوی تایبەتمەندی خانەیەکی پێویستە", - "definition_one_or_multiple" => "تایبەتمەندی(ەکان)", - "definition_successful_adding" => "بەسەرکەوتوویی ئایتمەکەت زیادکرد", - "definition_successful_deleted" => "بەسەرکەوتوویی سڕیوتەتەوە", - "definition_successful_updating" => "بەسەرکەوتوویی تایبەتمەندیت نوێ کردووەتەوە", - "definition_type" => "جۆری تایبەتمەندی", - "definition_type_required" => "جۆری تایبەتمەندی خانەیەکی پێویستە", - "definition_unit" => "یەکەی پێوانەکردن", - "definition_values" => "بەهاکانی تایبەتمەندی", - "new" => "تایبەتمەندی نوێ", - "no_attributes_to_display" => "هیچ تایبەتمەندییەک نییە بۆ پیشاندان", - "receipt_visibility" => "ڕەچەتە", - "show_in_items" => "لەناو ئایتمەکان نیشانی بدە", - "show_in_items_visibility" => "ئایتمەکان", - "show_in_receipt" => "لە ڕەچەتەکەدا نیشانی بدە", - "show_in_receivings" => "لە بەدەستگەیشتووەکاندا نیشانی بدە", - "show_in_receivings_visibility" => "بەدەستگەیشتووکان", - "show_in_sales" => "لە فرۆشتندا نیشانی بدە", - "show_in_sales_visibility" => "فرۆشتن", - "update" => "تایبەتمەندی نوێ بکەرەوە", + 'attribute_value_invalid_chars' => 'بەهای تایبەتمەندیی ناتوانێت \'_\' یان \' لەخۆبگرێت|\'', + 'confirm_delete' => 'ئایا دڵنیای کە دەتەوێت تایبەتمەندییە هەڵبژێردراوەکە(کان) بسڕیتەوە؟', + 'confirm_restore' => 'ئایا دڵنیای کە دەتەوێت تایبەتمەندییە هەڵبژێردراوەکە(کان) بگەڕێنیتەوە؟', + 'definition_cannot_be_deleted' => 'نەتوانرا تایبەتمەندی هەڵبژێردراو بسڕدرێتەوە', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'تایبەتمەندی {0} نەتوانرا زیاد بکرێت یان نوێ بکرێتەوە. تکایە لیستی هەڵەکان بپشکنە.', + 'definition_flags' => 'توانای بینراویی تایبەتمەندی', + 'definition_group' => 'گروپ', + 'definition_id' => 'ناسنامە', + 'definition_name' => 'تایبەتمەندی زیاد بکە', + 'definition_name_required' => 'ناوی تایبەتمەندی خانەیەکی پێویستە', + 'definition_one_or_multiple' => 'تایبەتمەندی(ەکان)', + 'definition_successful_adding' => 'بەسەرکەوتوویی ئایتمەکەت زیادکرد', + 'definition_successful_deleted' => 'بەسەرکەوتوویی سڕیوتەتەوە', + 'definition_successful_updating' => 'بەسەرکەوتوویی تایبەتمەندیت نوێ کردووەتەوە', + 'definition_type' => 'جۆری تایبەتمەندی', + 'definition_type_required' => 'جۆری تایبەتمەندی خانەیەکی پێویستە', + 'definition_unit' => 'یەکەی پێوانەکردن', + 'definition_values' => 'بەهاکانی تایبەتمەندی', + 'new' => 'تایبەتمەندی نوێ', + 'no_attributes_to_display' => 'هیچ تایبەتمەندییەک نییە بۆ پیشاندان', + 'receipt_visibility' => 'ڕەچەتە', + 'show_in_items' => 'لەناو ئایتمەکان نیشانی بدە', + 'show_in_items_visibility' => 'ئایتمەکان', + 'show_in_receipt' => 'لە ڕەچەتەکەدا نیشانی بدە', + 'show_in_receivings' => 'لە بەدەستگەیشتووەکاندا نیشانی بدە', + 'show_in_receivings_visibility' => 'بەدەستگەیشتووکان', + 'show_in_sales' => 'لە فرۆشتندا نیشانی بدە', + 'show_in_sales_visibility' => 'فرۆشتن', + 'show_in_search' => 'لە گەڕاندا نیشانی بدە', + 'show_in_search_visibility' => 'گەڕان', + 'update' => 'تایبەتمەندی نوێ بکەرەوە', ]; diff --git a/app/Language/cs/Attributes.php b/app/Language/cs/Attributes.php index 3213b12e4..8af0b2289 100644 --- a/app/Language/cs/Attributes.php +++ b/app/Language/cs/Attributes.php @@ -1,34 +1,36 @@ "", - "confirm_delete" => "", - "confirm_restore" => "", - "definition_cannot_be_deleted" => "", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "", - "definition_flags" => "", - "definition_group" => "", - "definition_id" => "", - "definition_name" => "", - "definition_name_required" => "", - "definition_one_or_multiple" => "", - "definition_successful_adding" => "", - "definition_successful_deleted" => "", - "definition_successful_updating" => "", - "definition_type" => "", - "definition_type_required" => "", - "definition_unit" => "", - "definition_values" => "", - "new" => "", - "no_attributes_to_display" => "", - "receipt_visibility" => "", - "show_in_items" => "", - "show_in_items_visibility" => "", - "show_in_receipt" => "", - "show_in_receivings" => "", - "show_in_receivings_visibility" => "", - "show_in_sales" => "", - "show_in_sales_visibility" => "", - "update" => "", + 'attribute_value_invalid_chars' => '', + 'confirm_delete' => '', + 'confirm_restore' => '', + 'definition_cannot_be_deleted' => '', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => '', + 'definition_flags' => '', + 'definition_group' => '', + 'definition_id' => '', + 'definition_name' => '', + 'definition_name_required' => '', + 'definition_one_or_multiple' => '', + 'definition_successful_adding' => '', + 'definition_successful_deleted' => '', + 'definition_successful_updating' => '', + 'definition_type' => '', + 'definition_type_required' => '', + 'definition_unit' => '', + 'definition_values' => '', + 'new' => '', + 'no_attributes_to_display' => '', + 'receipt_visibility' => '', + 'show_in_items' => '', + 'show_in_items_visibility' => '', + 'show_in_receipt' => '', + 'show_in_receivings' => '', + 'show_in_receivings_visibility' => '', + 'show_in_sales' => '', + 'show_in_sales_visibility' => '', + 'show_in_search' => 'Zobrazit ve vyhledávání', + 'show_in_search_visibility' => 'Vyhledávání', + 'update' => '', ]; diff --git a/app/Language/da/Attributes.php b/app/Language/da/Attributes.php index fd643f036..8944f7498 100644 --- a/app/Language/da/Attributes.php +++ b/app/Language/da/Attributes.php @@ -1,34 +1,36 @@ "Egenskabens værdi kan ikke indeholde ':' or '|'", - "confirm_delete" => "Er du sikker på, at du vil slette de valgte egenskaber?", - "confirm_restore" => "Er du sikker på, at du vil gendanne de valgte egenskaber?", - "definition_cannot_be_deleted" => "De valgte egenskaber kunne ikke slettes", - "definition_invalid_group" => "Den valgte gruppe findes ikke eller er ugyldig.", - "definition_error_adding_updating" => "Egenskab {0} Kunne ikke tilføjes eller opdateres. Tjek venligst fejlprotokollen.", - "definition_flags" => "Egenskabens Synlighed", - "definition_group" => "Gruppe", - "definition_id" => "Id", - "definition_name" => "Tilføj egenskab", - "definition_name_required" => "Egenskabens navn er et obligatorisk felt", - "definition_one_or_multiple" => "Egenskab(er)", - "definition_successful_adding" => "Du har tilføjet en genstand", - "definition_successful_deleted" => "Du har slettet en genstand", - "definition_successful_updating" => "Du har opdateret en egenskab", - "definition_type" => "Egenskabs-type", - "definition_type_required" => "Egenskabs-type er et obligatorisk felt", - "definition_unit" => "Måleenhed", - "definition_values" => "Egenskabens værdier", - "new" => "Ny egenskab", - "no_attributes_to_display" => "Ingen genstande at vise", - "receipt_visibility" => "Kvittering", - "show_in_items" => "Vis i genstande", - "show_in_items_visibility" => "Genstande", - "show_in_receipt" => "Vis i kvittering", - "show_in_receivings" => "Vis i modtagelser", - "show_in_receivings_visibility" => "Modtagelser", - "show_in_sales" => "Vis i salg", - "show_in_sales_visibility" => "Salg", - "update" => "Opdater egenskab", + 'attribute_value_invalid_chars' => 'Egenskabens værdi kan ikke indeholde \':\' or \'|\'', + 'confirm_delete' => 'Er du sikker på, at du vil slette de valgte egenskaber?', + 'confirm_restore' => 'Er du sikker på, at du vil gendanne de valgte egenskaber?', + 'definition_cannot_be_deleted' => 'De valgte egenskaber kunne ikke slettes', + 'definition_invalid_group' => 'Den valgte gruppe findes ikke eller er ugyldig.', + 'definition_error_adding_updating' => 'Egenskab {0} Kunne ikke tilføjes eller opdateres. Tjek venligst fejlprotokollen.', + 'definition_flags' => 'Egenskabens Synlighed', + 'definition_group' => 'Gruppe', + 'definition_id' => 'Id', + 'definition_name' => 'Tilføj egenskab', + 'definition_name_required' => 'Egenskabens navn er et obligatorisk felt', + 'definition_one_or_multiple' => 'Egenskab(er)', + 'definition_successful_adding' => 'Du har tilføjet en genstand', + 'definition_successful_deleted' => 'Du har slettet en genstand', + 'definition_successful_updating' => 'Du har opdateret en egenskab', + 'definition_type' => 'Egenskabs-type', + 'definition_type_required' => 'Egenskabs-type er et obligatorisk felt', + 'definition_unit' => 'Måleenhed', + 'definition_values' => 'Egenskabens værdier', + 'new' => 'Ny egenskab', + 'no_attributes_to_display' => 'Ingen genstande at vise', + 'receipt_visibility' => 'Kvittering', + 'show_in_items' => 'Vis i genstande', + 'show_in_items_visibility' => 'Genstande', + 'show_in_receipt' => 'Vis i kvittering', + 'show_in_receivings' => 'Vis i modtagelser', + 'show_in_receivings_visibility' => 'Modtagelser', + 'show_in_sales' => 'Vis i salg', + 'show_in_sales_visibility' => 'Salg', + 'show_in_search' => 'Vis i søgning', + 'show_in_search_visibility' => 'Søgning', + 'update' => 'Opdater egenskab', ]; diff --git a/app/Language/de-CH/Attributes.php b/app/Language/de-CH/Attributes.php index d76085ec7..f25b7bf63 100644 --- a/app/Language/de-CH/Attributes.php +++ b/app/Language/de-CH/Attributes.php @@ -1,34 +1,36 @@ "", - "confirm_delete" => "", - "confirm_restore" => "", - "definition_cannot_be_deleted" => "", - "definition_invalid_group" => "Die ausgewählte Gruppe existiert nicht oder ist ungültig.", - "definition_error_adding_updating" => "", - "definition_flags" => "", - "definition_group" => "", - "definition_id" => "", - "definition_name" => "", - "definition_name_required" => "", - "definition_one_or_multiple" => "", - "definition_successful_adding" => "", - "definition_successful_deleted" => "", - "definition_successful_updating" => "", - "definition_type" => "", - "definition_type_required" => "", - "definition_unit" => "", - "definition_values" => "", - "new" => "", - "no_attributes_to_display" => "", - "receipt_visibility" => "", - "show_in_items" => "", - "show_in_items_visibility" => "", - "show_in_receipt" => "", - "show_in_receivings" => "", - "show_in_receivings_visibility" => "", - "show_in_sales" => "", - "show_in_sales_visibility" => "", - "update" => "", + 'attribute_value_invalid_chars' => '', + 'confirm_delete' => '', + 'confirm_restore' => '', + 'definition_cannot_be_deleted' => '', + 'definition_invalid_group' => 'Die ausgewählte Gruppe existiert nicht oder ist ungültig.', + 'definition_error_adding_updating' => '', + 'definition_flags' => '', + 'definition_group' => '', + 'definition_id' => '', + 'definition_name' => '', + 'definition_name_required' => '', + 'definition_one_or_multiple' => '', + 'definition_successful_adding' => '', + 'definition_successful_deleted' => '', + 'definition_successful_updating' => '', + 'definition_type' => '', + 'definition_type_required' => '', + 'definition_unit' => '', + 'definition_values' => '', + 'new' => '', + 'no_attributes_to_display' => '', + 'receipt_visibility' => '', + 'show_in_items' => '', + 'show_in_items_visibility' => '', + 'show_in_receipt' => '', + 'show_in_receivings' => '', + 'show_in_receivings_visibility' => '', + 'show_in_sales' => '', + 'show_in_sales_visibility' => '', + 'show_in_search' => 'In Suche anzeigen', + 'show_in_search_visibility' => 'Suche', + 'update' => '', ]; diff --git a/app/Language/de-DE/Attributes.php b/app/Language/de-DE/Attributes.php index cf7bd5348..4afd86482 100644 --- a/app/Language/de-DE/Attributes.php +++ b/app/Language/de-DE/Attributes.php @@ -1,34 +1,36 @@ "Attributwert darf nicht ':' oder '|' enthalten", - "confirm_delete" => "Sind Sie sicher, dass Sie die ausgewählten Attribute löschen möchten?", - "confirm_restore" => "Sind Sie sicher, dass Sie die ausgewählten Attribute wiederherstellen möchten?", - "definition_cannot_be_deleted" => "Ausgewählte Attribute konnten nicht gelöscht werden", - "definition_invalid_group" => "Die ausgewählte Gruppe existiert nicht oder ist ungültig.", - "definition_error_adding_updating" => "Das Attribut {0} konnte nicht hinzugefügt oder aktualisiert werden. Bitte überprüfen Sie den Error-Log.", - "definition_flags" => "Attribut Sichtbarkeit", - "definition_group" => "Gruppe", - "definition_id" => "ID", - "definition_name" => "Attribut hinzufügen", - "definition_name_required" => "Attributname ist ein Pflichtfeld", - "definition_one_or_multiple" => "Attribut(e)", - "definition_successful_adding" => "Artikel erfolgreich hinzugefügt", - "definition_successful_deleted" => "Löschung erfolgreich", - "definition_successful_updating" => "Sie haben das Attributerfolgreich aktualisiert", - "definition_type" => "Attribut Typ", - "definition_type_required" => "Attribut ist ein Pflichtfeld", - "definition_unit" => "Maßeinheit", - "definition_values" => "Attribut Werte", - "new" => "Neues Attribut", - "no_attributes_to_display" => "Keine Elemente zum Anzeigen", - "receipt_visibility" => "Quittung", - "show_in_items" => "In Artikeln anzeigen", - "show_in_items_visibility" => "Artikel", - "show_in_receipt" => "In Quittung anzeigen", - "show_in_receivings" => "In Eingängen anzeigen", - "show_in_receivings_visibility" => "Eingänge", - "show_in_sales" => "In Verkäufen anzeigen", - "show_in_sales_visibility" => "Verkauf", - "update" => "Attribut aktualisieren", + 'attribute_value_invalid_chars' => 'Attributwert darf nicht \':\' oder \'|\' enthalten', + 'confirm_delete' => 'Sind Sie sicher, dass Sie die ausgewählten Attribute löschen möchten?', + 'confirm_restore' => 'Sind Sie sicher, dass Sie die ausgewählten Attribute wiederherstellen möchten?', + 'definition_cannot_be_deleted' => 'Ausgewählte Attribute konnten nicht gelöscht werden', + 'definition_invalid_group' => 'Die ausgewählte Gruppe existiert nicht oder ist ungültig.', + 'definition_error_adding_updating' => 'Das Attribut {0} konnte nicht hinzugefügt oder aktualisiert werden. Bitte überprüfen Sie den Error-Log.', + 'definition_flags' => 'Attribut Sichtbarkeit', + 'definition_group' => 'Gruppe', + 'definition_id' => 'ID', + 'definition_name' => 'Attribut hinzufügen', + 'definition_name_required' => 'Attributname ist ein Pflichtfeld', + 'definition_one_or_multiple' => 'Attribut(e)', + 'definition_successful_adding' => 'Artikel erfolgreich hinzugefügt', + 'definition_successful_deleted' => 'Löschung erfolgreich', + 'definition_successful_updating' => 'Sie haben das Attributerfolgreich aktualisiert', + 'definition_type' => 'Attribut Typ', + 'definition_type_required' => 'Attribut ist ein Pflichtfeld', + 'definition_unit' => 'Maßeinheit', + 'definition_values' => 'Attribut Werte', + 'new' => 'Neues Attribut', + 'no_attributes_to_display' => 'Keine Elemente zum Anzeigen', + 'receipt_visibility' => 'Quittung', + 'show_in_items' => 'In Artikeln anzeigen', + 'show_in_items_visibility' => 'Artikel', + 'show_in_receipt' => 'In Quittung anzeigen', + 'show_in_receivings' => 'In Eingängen anzeigen', + 'show_in_receivings_visibility' => 'Eingänge', + 'show_in_sales' => 'In Verkäufen anzeigen', + 'show_in_sales_visibility' => 'Verkauf', + 'show_in_search' => 'In Suche anzeigen', + 'show_in_search_visibility' => 'Suche', + 'update' => 'Attribut aktualisieren', ]; diff --git a/app/Language/el/Attributes.php b/app/Language/el/Attributes.php index 54a88f00e..f3d8f6792 100644 --- a/app/Language/el/Attributes.php +++ b/app/Language/el/Attributes.php @@ -1,34 +1,36 @@ "Η τιμή του χαρακτηριστικού δεν μπορεί να περιέχει ':' ή '|'", - "confirm_delete" => "Είστε βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα χαρακτηριστικά;", - "confirm_restore" => "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τα επιλεγμένα χαρακτηριστικά;", - "definition_cannot_be_deleted" => "Δεν ήταν δυνατή η διαγραφή των επιλεγμένων χαρακτηριστικών", - "definition_invalid_group" => "Η επιλεγμένη ομάδα δεν υπάρχει ή δεν είναι έγκυρη.", - "definition_error_adding_updating" => "Το χαρακτηριστικό {0} δεν ήταν δυνατό να προστεθεί ή να ενημερωθεί. Ελέγξτε το αρχείο καταγραφής σφαλμάτων.", - "definition_flags" => "Ορατότητα χαρακτηριστικών", - "definition_group" => "Ομάδα", - "definition_id" => "Id", - "definition_name" => "Προσθήκη χαρακτηριστικού", - "definition_name_required" => "Το όνομα του χαρακτηριστικού είναι υποχρεωτικό πεδίο", - "definition_one_or_multiple" => "Χαρακτηριστικό(ά)", - "definition_successful_adding" => "Έχετε προσθέσει με επιτυχία στοιχείο", - "definition_successful_deleted" => "", - "definition_successful_updating" => "Έχετε ενημερώσει με επιτυχία το χαρακτηριστικό", - "definition_type" => "Τύπος Χαρακτηριστικού", - "definition_type_required" => "Ο τύπος ιδιότητας είναι υποχρεωτικό πεδίο", - "definition_unit" => "Μονάδα μέτρησης", - "definition_values" => "Τιμές Χαρακτηριστικών", - "new" => "Νέο χαρακτηριστικό", - "no_attributes_to_display" => "Δεν υπάρχουν στοιχεία για εμφάνιση", - "receipt_visibility" => "", - "show_in_items" => "", - "show_in_items_visibility" => "", - "show_in_receipt" => "", - "show_in_receivings" => "", - "show_in_receivings_visibility" => "", - "show_in_sales" => "", - "show_in_sales_visibility" => "", - "update" => "", + 'attribute_value_invalid_chars' => 'Η τιμή του χαρακτηριστικού δεν μπορεί να περιέχει \':\' ή \'|\'', + 'confirm_delete' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα χαρακτηριστικά;', + 'confirm_restore' => 'Είστε βέβαιοι ότι θέλετε να επαναφέρετε τα επιλεγμένα χαρακτηριστικά;', + 'definition_cannot_be_deleted' => 'Δεν ήταν δυνατή η διαγραφή των επιλεγμένων χαρακτηριστικών', + 'definition_invalid_group' => 'Η επιλεγμένη ομάδα δεν υπάρχει ή δεν είναι έγκυρη.', + 'definition_error_adding_updating' => 'Το χαρακτηριστικό {0} δεν ήταν δυνατό να προστεθεί ή να ενημερωθεί. Ελέγξτε το αρχείο καταγραφής σφαλμάτων.', + 'definition_flags' => 'Ορατότητα χαρακτηριστικών', + 'definition_group' => 'Ομάδα', + 'definition_id' => 'Id', + 'definition_name' => 'Προσθήκη χαρακτηριστικού', + 'definition_name_required' => 'Το όνομα του χαρακτηριστικού είναι υποχρεωτικό πεδίο', + 'definition_one_or_multiple' => 'Χαρακτηριστικό(ά)', + 'definition_successful_adding' => 'Έχετε προσθέσει με επιτυχία στοιχείο', + 'definition_successful_deleted' => '', + 'definition_successful_updating' => 'Έχετε ενημερώσει με επιτυχία το χαρακτηριστικό', + 'definition_type' => 'Τύπος Χαρακτηριστικού', + 'definition_type_required' => 'Ο τύπος ιδιότητας είναι υποχρεωτικό πεδίο', + 'definition_unit' => 'Μονάδα μέτρησης', + 'definition_values' => 'Τιμές Χαρακτηριστικών', + 'new' => 'Νέο χαρακτηριστικό', + 'no_attributes_to_display' => 'Δεν υπάρχουν στοιχεία για εμφάνιση', + 'receipt_visibility' => '', + 'show_in_items' => '', + 'show_in_items_visibility' => '', + 'show_in_receipt' => '', + 'show_in_receivings' => '', + 'show_in_receivings_visibility' => '', + 'show_in_sales' => '', + 'show_in_sales_visibility' => '', + 'show_in_search' => 'Εμφάνιση στην αναζήτηση', + 'show_in_search_visibility' => 'Αναζήτηση', + 'update' => '', ]; diff --git a/app/Language/en-GB/Attributes.php b/app/Language/en-GB/Attributes.php index 0b4bf10cc..51775f7fe 100644 --- a/app/Language/en-GB/Attributes.php +++ b/app/Language/en-GB/Attributes.php @@ -1,34 +1,36 @@ "Attribute value cannot contain '_' or '|'", - "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", - "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", - "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", - "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", - "definition_invalid_group" => "The selected group does not exist or is invalid.", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Add Attribute", - "definition_name_required" => "Attribute name is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated attribute", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute type is a required field", - "definition_unit" => "Measurement Unit", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Items to display", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'Attribute value cannot contain \'_\' or \'|\'', + 'confirm_delete' => 'Are you sure you want to delete the selected attribute(s)?', + 'confirm_restore' => 'Are you sure you want to restore the selected attribute(s)?', + 'definition_cannot_be_deleted' => 'Could not delete selected attribute(s)', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_invalid_group' => 'The selected group does not exist or is invalid.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute name is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated attribute', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute type is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Attributes to display', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'Show in search', + 'show_in_search_visibility' => 'Search', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/en/Attributes.php b/app/Language/en/Attributes.php index b3ab1fde9..51775f7fe 100644 --- a/app/Language/en/Attributes.php +++ b/app/Language/en/Attributes.php @@ -1,34 +1,36 @@ "Attribute value cannot contain '_' or '|'", - "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", - "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", - "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", - "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", - "definition_invalid_group" => "The selected group does not exist or is invalid.", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Add Attribute", - "definition_name_required" => "Attribute name is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated attribute", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute type is a required field", - "definition_unit" => "Measurement Unit", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Attributes to display", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'Attribute value cannot contain \'_\' or \'|\'', + 'confirm_delete' => 'Are you sure you want to delete the selected attribute(s)?', + 'confirm_restore' => 'Are you sure you want to restore the selected attribute(s)?', + 'definition_cannot_be_deleted' => 'Could not delete selected attribute(s)', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_invalid_group' => 'The selected group does not exist or is invalid.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute name is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated attribute', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute type is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Attributes to display', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'Show in search', + 'show_in_search_visibility' => 'Search', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/es-ES/Attributes.php b/app/Language/es-ES/Attributes.php index 6b05b71df..16996bf0f 100644 --- a/app/Language/es-ES/Attributes.php +++ b/app/Language/es-ES/Attributes.php @@ -1,34 +1,36 @@ "El valor del atributo no puede contener ':' o '|'", - "confirm_delete" => "¿Está seguro de que desea borrar los atributos seleccionados?", - "confirm_restore" => "¿Está seguro de que desea restaurar los atributos seleccionados?", - "definition_cannot_be_deleted" => "No se han podido borrar los atributos seleccionados", - "definition_invalid_group" => "El grupo seleccionado no existe o no es válido.", - "definition_error_adding_updating" => "El atributo {0} no pudo ser agregado o actulizado. Por favor compruebe el registro de errores.", - "definition_flags" => "Visibilidad del atributo", - "definition_group" => "Grupo", - "definition_id" => "Id", - "definition_name" => "Agregar Atributo", - "definition_name_required" => "El nombre del Atributo es un campo obligatorio", - "definition_one_or_multiple" => "atributo(s)", - "definition_successful_adding" => "Ha agregado con éxito el atributo", - "definition_successful_deleted" => "Ha eliminado con éxito", - "definition_successful_updating" => "Ha actualizado con éxito el atributo", - "definition_type" => "Tipo de Atributo", - "definition_type_required" => "Tipo de Atributo es un campo obligatorio", - "definition_unit" => "Unidad de medida", - "definition_values" => "Valores del Atributo", - "new" => "Nuevo Atributo", - "no_attributes_to_display" => "No hay Atributos para mostrar", - "receipt_visibility" => "Recibo", - "show_in_items" => "Mostrar en ítems", - "show_in_items_visibility" => "Ítems", - "show_in_receipt" => "Mostrar en recibo", - "show_in_receivings" => "Mostrar en recibos", - "show_in_receivings_visibility" => "Recibos", - "show_in_sales" => "Mostrar en ventas", - "show_in_sales_visibility" => "Ventas", - "update" => "Actualizar Atributo", + 'attribute_value_invalid_chars' => 'El valor del atributo no puede contener \':\' o \'|\'', + 'confirm_delete' => '¿Está seguro de que desea borrar los atributos seleccionados?', + 'confirm_restore' => '¿Está seguro de que desea restaurar los atributos seleccionados?', + 'definition_cannot_be_deleted' => 'No se han podido borrar los atributos seleccionados', + 'definition_invalid_group' => 'El grupo seleccionado no existe o no es válido.', + 'definition_error_adding_updating' => 'El atributo {0} no pudo ser agregado o actulizado. Por favor compruebe el registro de errores.', + 'definition_flags' => 'Visibilidad del atributo', + 'definition_group' => 'Grupo', + 'definition_id' => 'Id', + 'definition_name' => 'Agregar Atributo', + 'definition_name_required' => 'El nombre del Atributo es un campo obligatorio', + 'definition_one_or_multiple' => 'atributo(s)', + 'definition_successful_adding' => 'Ha agregado con éxito el atributo', + 'definition_successful_deleted' => 'Ha eliminado con éxito', + 'definition_successful_updating' => 'Ha actualizado con éxito el atributo', + 'definition_type' => 'Tipo de Atributo', + 'definition_type_required' => 'Tipo de Atributo es un campo obligatorio', + 'definition_unit' => 'Unidad de medida', + 'definition_values' => 'Valores del Atributo', + 'new' => 'Nuevo Atributo', + 'no_attributes_to_display' => 'No hay Atributos para mostrar', + 'receipt_visibility' => 'Recibo', + 'show_in_items' => 'Mostrar en ítems', + 'show_in_items_visibility' => 'Ítems', + 'show_in_receipt' => 'Mostrar en recibo', + 'show_in_receivings' => 'Mostrar en recibos', + 'show_in_receivings_visibility' => 'Recibos', + 'show_in_sales' => 'Mostrar en ventas', + 'show_in_sales_visibility' => 'Ventas', + 'show_in_search' => 'Mostrar en búsqueda', + 'show_in_search_visibility' => 'Búsqueda', + 'update' => 'Actualizar Atributo', ]; diff --git a/app/Language/es-MX/Attributes.php b/app/Language/es-MX/Attributes.php index ff2619e73..86c5792dd 100644 --- a/app/Language/es-MX/Attributes.php +++ b/app/Language/es-MX/Attributes.php @@ -1,34 +1,36 @@ "El valor del atributo no puede contener ':' or '|'", - "confirm_delete" => "¿Está seguro de eliminar el/los atributo(s) seleccionado(s)?", - "confirm_restore" => "¿Está seguro que quiere restaurar los atributos seleccionados?", - "definition_cannot_be_deleted" => "No ha sido posible eliminar el/los atributo(s) seleccionado(s)", - "definition_invalid_group" => "El grupo seleccionado no existe o no es válido.", - "definition_error_adding_updating" => "El atributo {0} no pudo ser agregado o actualizado. Favor de revisar el registro de errorres.", - "definition_flags" => "Visibilidad del atributo", - "definition_group" => "Grupo", - "definition_id" => "Id", - "definition_name" => "Agregar Atributo", - "definition_name_required" => "El nombre del atributo es un campo requerido", - "definition_one_or_multiple" => "atributo(s)", - "definition_successful_adding" => "Has agregado un atributo correctamente", - "definition_successful_deleted" => "El atributo se ha eliminado correctamente", - "definition_successful_updating" => "El atributo se ha actualizado correctamente", - "definition_type" => "Tipo de atributo", - "definition_type_required" => "El tipo de atributo es un campo requerido", - "definition_unit" => "Unidad de Medida", - "definition_values" => "Valores del atributo", - "new" => "Nuevo atributo", - "no_attributes_to_display" => "Sin artículos para mostrar", - "receipt_visibility" => "Recibo", - "show_in_items" => "Mostrar en artículos", - "show_in_items_visibility" => "Artículos", - "show_in_receipt" => "Mostrar en recibo", - "show_in_receivings" => "Mostrar en recepciones", - "show_in_receivings_visibility" => "Recepciones", - "show_in_sales" => "Mostrar en Ventas", - "show_in_sales_visibility" => "Ventas", - "update" => "Actualizar atributo", + 'attribute_value_invalid_chars' => 'El valor del atributo no puede contener \':\' or \'|\'', + 'confirm_delete' => '¿Está seguro de eliminar el/los atributo(s) seleccionado(s)?', + 'confirm_restore' => '¿Está seguro que quiere restaurar los atributos seleccionados?', + 'definition_cannot_be_deleted' => 'No ha sido posible eliminar el/los atributo(s) seleccionado(s)', + 'definition_invalid_group' => 'El grupo seleccionado no existe o no es válido.', + 'definition_error_adding_updating' => 'El atributo {0} no pudo ser agregado o actualizado. Favor de revisar el registro de errorres.', + 'definition_flags' => 'Visibilidad del atributo', + 'definition_group' => 'Grupo', + 'definition_id' => 'Id', + 'definition_name' => 'Agregar Atributo', + 'definition_name_required' => 'El nombre del atributo es un campo requerido', + 'definition_one_or_multiple' => 'atributo(s)', + 'definition_successful_adding' => 'Has agregado un atributo correctamente', + 'definition_successful_deleted' => 'El atributo se ha eliminado correctamente', + 'definition_successful_updating' => 'El atributo se ha actualizado correctamente', + 'definition_type' => 'Tipo de atributo', + 'definition_type_required' => 'El tipo de atributo es un campo requerido', + 'definition_unit' => 'Unidad de Medida', + 'definition_values' => 'Valores del atributo', + 'new' => 'Nuevo atributo', + 'no_attributes_to_display' => 'Sin artículos para mostrar', + 'receipt_visibility' => 'Recibo', + 'show_in_items' => 'Mostrar en artículos', + 'show_in_items_visibility' => 'Artículos', + 'show_in_receipt' => 'Mostrar en recibo', + 'show_in_receivings' => 'Mostrar en recepciones', + 'show_in_receivings_visibility' => 'Recepciones', + 'show_in_sales' => 'Mostrar en Ventas', + 'show_in_sales_visibility' => 'Ventas', + 'show_in_search' => 'Mostrar en búsqueda', + 'show_in_search_visibility' => 'Búsqueda', + 'update' => 'Actualizar atributo', ]; diff --git a/app/Language/fa/Attributes.php b/app/Language/fa/Attributes.php index 260c48963..174ac67dc 100644 --- a/app/Language/fa/Attributes.php +++ b/app/Language/fa/Attributes.php @@ -1,34 +1,36 @@ "مقدار ویژگی نمی تواند حاوی | یا ـ باشد", - "confirm_delete" => "آیا مطمئن هستید که می خواهید ویژگی (های) انتخاب شده را حذف کنید؟", - "confirm_restore" => "آیا مطمئن هستید که می خواهید ویژگی (های) انتخاب شده را بازیابی کنید؟", - "definition_cannot_be_deleted" => "نمی توان ویژگی (های) انتخابی را حذف کرد", - "definition_invalid_group" => "گروه انتخاب شده وجود ندارد یا نامعتبر است.", - "definition_error_adding_updating" => "ویژگی{0} اضافه نشد یا به روز نمی شود. لطفا گزارش خطا را بررسی کنید.", - "definition_flags" => "قابلیت مشاهده ویژگی", - "definition_group" => "گروه", - "definition_id" => "شناسه", - "definition_name" => "افزودن ویژگی", - "definition_name_required" => "نام ویژگی یک فیلد ضروری است", - "definition_one_or_multiple" => "(ویژگی(ها", - "definition_successful_adding" => "شما مورد را با موفقیت اضافه کردید", - "definition_successful_deleted" => "شما با موفقیت حذف شده اید", - "definition_successful_updating" => "شما ویژگی را با موفقیت به روز کردید", - "definition_type" => "نوع ویژگی", - "definition_type_required" => "نوع ویژگی یک فیلد ضروری است", - "definition_unit" => "واحد اندازه گیری", - "definition_values" => "مقادیر مشخصه", - "new" => "ویژگی جدید", - "no_attributes_to_display" => "هیچ موردی برای نمایش", - "receipt_visibility" => "اعلام وصول", - "show_in_items" => "نمایش در موارد", - "show_in_items_visibility" => "موارد", - "show_in_receipt" => "نمایش در رسید", - "show_in_receivings" => "نمایش در دریافت ها", - "show_in_receivings_visibility" => "دریافت", - "show_in_sales" => "نمایش در فروش", - "show_in_sales_visibility" => "حراجی", - "update" => "به روز کردن ویژگی", + 'attribute_value_invalid_chars' => 'مقدار ویژگی نمی تواند حاوی | یا ـ باشد', + 'confirm_delete' => 'آیا مطمئن هستید که می خواهید ویژگی (های) انتخاب شده را حذف کنید؟', + 'confirm_restore' => 'آیا مطمئن هستید که می خواهید ویژگی (های) انتخاب شده را بازیابی کنید؟', + 'definition_cannot_be_deleted' => 'نمی توان ویژگی (های) انتخابی را حذف کرد', + 'definition_invalid_group' => 'گروه انتخاب شده وجود ندارد یا نامعتبر است.', + 'definition_error_adding_updating' => 'ویژگی{0} اضافه نشد یا به روز نمی شود. لطفا گزارش خطا را بررسی کنید.', + 'definition_flags' => 'قابلیت مشاهده ویژگی', + 'definition_group' => 'گروه', + 'definition_id' => 'شناسه', + 'definition_name' => 'افزودن ویژگی', + 'definition_name_required' => 'نام ویژگی یک فیلد ضروری است', + 'definition_one_or_multiple' => '(ویژگی(ها', + 'definition_successful_adding' => 'شما مورد را با موفقیت اضافه کردید', + 'definition_successful_deleted' => 'شما با موفقیت حذف شده اید', + 'definition_successful_updating' => 'شما ویژگی را با موفقیت به روز کردید', + 'definition_type' => 'نوع ویژگی', + 'definition_type_required' => 'نوع ویژگی یک فیلد ضروری است', + 'definition_unit' => 'واحد اندازه گیری', + 'definition_values' => 'مقادیر مشخصه', + 'new' => 'ویژگی جدید', + 'no_attributes_to_display' => 'هیچ موردی برای نمایش', + 'receipt_visibility' => 'اعلام وصول', + 'show_in_items' => 'نمایش در موارد', + 'show_in_items_visibility' => 'موارد', + 'show_in_receipt' => 'نمایش در رسید', + 'show_in_receivings' => 'نمایش در دریافت ها', + 'show_in_receivings_visibility' => 'دریافت', + 'show_in_sales' => 'نمایش در فروش', + 'show_in_sales_visibility' => 'حراجی', + 'show_in_search' => 'نمایش در جستجو', + 'show_in_search_visibility' => 'جستجو', + 'update' => 'به روز کردن ویژگی', ]; diff --git a/app/Language/fr/Attributes.php b/app/Language/fr/Attributes.php index 436273cef..f56bb63ef 100644 --- a/app/Language/fr/Attributes.php +++ b/app/Language/fr/Attributes.php @@ -1,34 +1,36 @@ "La valeur de l'attribut ne doit pas contenir '_' ou '|'", - "confirm_delete" => "Êtes-vous certain de vouloir supprimer le(s) attribut(s) sélectionné(s) ?", - "confirm_restore" => "Êtes-vous certain de vouloir restaurer le(s) attribut(s) sélectionné(s) ?", - "definition_cannot_be_deleted" => "Le(s) attribut(s) sélectionné(s) n'ont pas pu être supprimé(s)", - "definition_invalid_group" => "Le groupe sélectionné n'existe pas ou est invalide.", - "definition_error_adding_updating" => "L'attribut {0} n'a pas pu être ajouté ou mis à jour. Veuillez vérifier le journal d'erreurs.", - "definition_flags" => "Visibilité de l'attribut", - "definition_group" => "Groupe", - "definition_id" => "ID", - "definition_name" => "Ajouter un attribut", - "definition_name_required" => "Le nom de l'attribut est requis", - "definition_one_or_multiple" => "attribut(s)", - "definition_successful_adding" => "Vous avez ajouté l'article avec succès", - "definition_successful_deleted" => "Vous avez supprimé avec succès", - "definition_successful_updating" => "Vous avez mis-à-jour l'attribut avec succès", - "definition_type" => "Type d'attribut", - "definition_type_required" => "Le type d'attribut est requis", - "definition_unit" => "Unité de mesure", - "definition_values" => "Valeurs de l'attribut", - "new" => "Nouvel attribut", - "no_attributes_to_display" => "Aucun attribut à afficher", - "receipt_visibility" => "Reçu", - "show_in_items" => "Afficher dans les articles", - "show_in_items_visibility" => "Articles", - "show_in_receipt" => "Afficher sur le reçu", - "show_in_receivings" => "Afficher dans les réceptions", - "show_in_receivings_visibility" => "Réceptions", - "show_in_sales" => "Afficher dans les ventes", - "show_in_sales_visibility" => "Ventes", - "update" => "Mettre à jour l'attribut", + 'attribute_value_invalid_chars' => 'La valeur de l\'attribut ne doit pas contenir \'_\' ou \'|\'', + 'confirm_delete' => 'Êtes-vous certain de vouloir supprimer le(s) attribut(s) sélectionné(s) ?', + 'confirm_restore' => 'Êtes-vous certain de vouloir restaurer le(s) attribut(s) sélectionné(s) ?', + 'definition_cannot_be_deleted' => 'Le(s) attribut(s) sélectionné(s) n\'ont pas pu être supprimé(s)', + 'definition_invalid_group' => 'Le groupe sélectionné n\'existe pas ou est invalide.', + 'definition_error_adding_updating' => 'L\'attribut {0} n\'a pas pu être ajouté ou mis à jour. Veuillez vérifier le journal d\'erreurs.', + 'definition_flags' => 'Visibilité de l\'attribut', + 'definition_group' => 'Groupe', + 'definition_id' => 'ID', + 'definition_name' => 'Ajouter un attribut', + 'definition_name_required' => 'Le nom de l\'attribut est requis', + 'definition_one_or_multiple' => 'attribut(s)', + 'definition_successful_adding' => 'Vous avez ajouté l\'article avec succès', + 'definition_successful_deleted' => 'Vous avez supprimé avec succès', + 'definition_successful_updating' => 'Vous avez mis-à-jour l\'attribut avec succès', + 'definition_type' => 'Type d\'attribut', + 'definition_type_required' => 'Le type d\'attribut est requis', + 'definition_unit' => 'Unité de mesure', + 'definition_values' => 'Valeurs de l\'attribut', + 'new' => 'Nouvel attribut', + 'no_attributes_to_display' => 'Aucun attribut à afficher', + 'receipt_visibility' => 'Reçu', + 'show_in_items' => 'Afficher dans les articles', + 'show_in_items_visibility' => 'Articles', + 'show_in_receipt' => 'Afficher sur le reçu', + 'show_in_receivings' => 'Afficher dans les réceptions', + 'show_in_receivings_visibility' => 'Réceptions', + 'show_in_sales' => 'Afficher dans les ventes', + 'show_in_sales_visibility' => 'Ventes', + 'show_in_search' => 'Afficher dans la recherche', + 'show_in_search_visibility' => 'Recherche', + 'update' => 'Mettre à jour l\'attribut', ]; diff --git a/app/Language/he/Attributes.php b/app/Language/he/Attributes.php index 53980bc72..527d24ba7 100644 --- a/app/Language/he/Attributes.php +++ b/app/Language/he/Attributes.php @@ -1,34 +1,36 @@ "ערך השדה אינו יכול להכיל ':' או '|'", - "confirm_delete" => "האם אתה בטוח שברצונך למחוק את המאפיינים שנבחרו?", - "confirm_restore" => "האם אתה בטוח שברצונך לשחזר את המאפיינים שנבחרו?", - "definition_cannot_be_deleted" => "לא ניתן למחוק מאפיינים נבחר(ים)", - "definition_invalid_group" => "הקבוצה שנבחרה לא קיימת או אינה תקינה.", - "definition_error_adding_updating" => "לא ניתן להוסיף או לעדכן את הערך {0}. בדוק את יומן השגיאות.", - "definition_flags" => "מאפיין גלוי", - "definition_group" => "קבוצה", - "definition_id" => "מספר זיהוי", - "definition_name" => "הוסף מאפיין", - "definition_name_required" => "מאפיין שם הינו שדה חובה", - "definition_one_or_multiple" => "תכונה (תכונות)", - "definition_successful_adding" => "הוספת בהצלחה את הפריט", - "definition_successful_deleted" => "נמחק בהצלחה", - "definition_successful_updating" => "עדכנת בהצלחה את המאפיין", - "definition_type" => "סוג מאפיין", - "definition_type_required" => "שדה המאפיין הינו שדה חובה", - "definition_unit" => "יחידת מדידה", - "definition_values" => "ערכי המאפיין", - "new" => "מאפיין חדש", - "no_attributes_to_display" => "אין פריטים להצגה", - "receipt_visibility" => "קבלה", - "show_in_items" => "הצג בפריטים", - "show_in_items_visibility" => "פריטים", - "show_in_receipt" => "הצג בקבלה", - "show_in_receivings" => "הצג בקבלת סחורה", - "show_in_receivings_visibility" => "קבלת סחורה", - "show_in_sales" => "הצג במכירות", - "show_in_sales_visibility" => "מכירות", - "update" => "עדכן מאפיין", + 'attribute_value_invalid_chars' => 'ערך השדה אינו יכול להכיל \':\' או \'|\'', + 'confirm_delete' => 'האם אתה בטוח שברצונך למחוק את המאפיינים שנבחרו?', + 'confirm_restore' => 'האם אתה בטוח שברצונך לשחזר את המאפיינים שנבחרו?', + 'definition_cannot_be_deleted' => 'לא ניתן למחוק מאפיינים נבחר(ים)', + 'definition_invalid_group' => 'הקבוצה שנבחרה לא קיימת או אינה תקינה.', + 'definition_error_adding_updating' => 'לא ניתן להוסיף או לעדכן את הערך {0}. בדוק את יומן השגיאות.', + 'definition_flags' => 'מאפיין גלוי', + 'definition_group' => 'קבוצה', + 'definition_id' => 'מספר זיהוי', + 'definition_name' => 'הוסף מאפיין', + 'definition_name_required' => 'מאפיין שם הינו שדה חובה', + 'definition_one_or_multiple' => 'תכונה (תכונות)', + 'definition_successful_adding' => 'הוספת בהצלחה את הפריט', + 'definition_successful_deleted' => 'נמחק בהצלחה', + 'definition_successful_updating' => 'עדכנת בהצלחה את המאפיין', + 'definition_type' => 'סוג מאפיין', + 'definition_type_required' => 'שדה המאפיין הינו שדה חובה', + 'definition_unit' => 'יחידת מדידה', + 'definition_values' => 'ערכי המאפיין', + 'new' => 'מאפיין חדש', + 'no_attributes_to_display' => 'אין פריטים להצגה', + 'receipt_visibility' => 'קבלה', + 'show_in_items' => 'הצג בפריטים', + 'show_in_items_visibility' => 'פריטים', + 'show_in_receipt' => 'הצג בקבלה', + 'show_in_receivings' => 'הצג בקבלת סחורה', + 'show_in_receivings_visibility' => 'קבלת סחורה', + 'show_in_sales' => 'הצג במכירות', + 'show_in_sales_visibility' => 'מכירות', + 'show_in_search' => 'הצג בחיפוש', + 'show_in_search_visibility' => 'חיפוש', + 'update' => 'עדכן מאפיין', ]; diff --git a/app/Language/hr-HR/Attributes.php b/app/Language/hr-HR/Attributes.php index 3213b12e4..a328dd205 100644 --- a/app/Language/hr-HR/Attributes.php +++ b/app/Language/hr-HR/Attributes.php @@ -1,34 +1,36 @@ "", - "confirm_delete" => "", - "confirm_restore" => "", - "definition_cannot_be_deleted" => "", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "", - "definition_flags" => "", - "definition_group" => "", - "definition_id" => "", - "definition_name" => "", - "definition_name_required" => "", - "definition_one_or_multiple" => "", - "definition_successful_adding" => "", - "definition_successful_deleted" => "", - "definition_successful_updating" => "", - "definition_type" => "", - "definition_type_required" => "", - "definition_unit" => "", - "definition_values" => "", - "new" => "", - "no_attributes_to_display" => "", - "receipt_visibility" => "", - "show_in_items" => "", - "show_in_items_visibility" => "", - "show_in_receipt" => "", - "show_in_receivings" => "", - "show_in_receivings_visibility" => "", - "show_in_sales" => "", - "show_in_sales_visibility" => "", - "update" => "", + 'attribute_value_invalid_chars' => '', + 'confirm_delete' => '', + 'confirm_restore' => '', + 'definition_cannot_be_deleted' => '', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => '', + 'definition_flags' => '', + 'definition_group' => '', + 'definition_id' => '', + 'definition_name' => '', + 'definition_name_required' => '', + 'definition_one_or_multiple' => '', + 'definition_successful_adding' => '', + 'definition_successful_deleted' => '', + 'definition_successful_updating' => '', + 'definition_type' => '', + 'definition_type_required' => '', + 'definition_unit' => '', + 'definition_values' => '', + 'new' => '', + 'no_attributes_to_display' => '', + 'receipt_visibility' => '', + 'show_in_items' => '', + 'show_in_items_visibility' => '', + 'show_in_receipt' => '', + 'show_in_receivings' => '', + 'show_in_receivings_visibility' => '', + 'show_in_sales' => '', + 'show_in_sales_visibility' => '', + 'show_in_search' => 'Prikaži u pretrazi', + 'show_in_search_visibility' => 'Pretraga', + 'update' => '', ]; diff --git a/app/Language/hu/Attributes.php b/app/Language/hu/Attributes.php index 530aba7b4..e6fd036c9 100644 --- a/app/Language/hu/Attributes.php +++ b/app/Language/hu/Attributes.php @@ -1,34 +1,36 @@ "Tulajdonság értéke nem tartalmazhat '_' vagy '|' karaktert", - "confirm_delete" => "Biztosan törli szeretné a kijelölt tulajdonságokat?", - "confirm_restore" => "Biztosan visszaállítja a kijelölt tulajdonságokat?", - "definition_cannot_be_deleted" => "Nem sikerült törölni a kijelölt tulajdonságokat", - "definition_invalid_group" => "A kiválasztott csoport nem létezik vagy érvénytelen.", - "definition_error_adding_updating" => "{0} attribútum nem adható hozzá és nem frissíthető. Kérjük, ellenőrizze a hibanaplót.", - "definition_flags" => "Tulajdonság láthatósága", - "definition_group" => "Csoport", - "definition_id" => "Azonosító", - "definition_name" => "Tulajdonság hozzáadása", - "definition_name_required" => "Tulajdonság név kötelező mező", - "definition_one_or_multiple" => "tulajdonságok", - "definition_successful_adding" => "Sikeresen hozzáadta az elemet", - "definition_successful_deleted" => "Sikeresen törölte", - "definition_successful_updating" => "Sikeresen frissítette a tulajdonságot", - "definition_type" => "Tulajdonság típus", - "definition_type_required" => "Tulajdonság típusa kötelező mező", - "definition_unit" => "Mértkékegység", - "definition_values" => "Tulajdonság értékei", - "new" => "Új tulajdnoság", - "no_attributes_to_display" => "Nincs megjelenítendő elem", - "receipt_visibility" => "Nyugta", - "show_in_items" => "Megjelenítés a termékekben", - "show_in_items_visibility" => "Termékek", - "show_in_receipt" => "Nyugta megjelenítése", - "show_in_receivings" => "Meglenesítés árúátvételekben", - "show_in_receivings_visibility" => "Áruátvételek", - "show_in_sales" => "Megjelenítés az értékesítésekben", - "show_in_sales_visibility" => "Értékesítések", - "update" => "Tulajdonság frissítése", + 'attribute_value_invalid_chars' => 'Tulajdonság értéke nem tartalmazhat \'_\' vagy \'|\' karaktert', + 'confirm_delete' => 'Biztosan törli szeretné a kijelölt tulajdonságokat?', + 'confirm_restore' => 'Biztosan visszaállítja a kijelölt tulajdonságokat?', + 'definition_cannot_be_deleted' => 'Nem sikerült törölni a kijelölt tulajdonságokat', + 'definition_invalid_group' => 'A kiválasztott csoport nem létezik vagy érvénytelen.', + 'definition_error_adding_updating' => '{0} attribútum nem adható hozzá és nem frissíthető. Kérjük, ellenőrizze a hibanaplót.', + 'definition_flags' => 'Tulajdonság láthatósága', + 'definition_group' => 'Csoport', + 'definition_id' => 'Azonosító', + 'definition_name' => 'Tulajdonság hozzáadása', + 'definition_name_required' => 'Tulajdonság név kötelező mező', + 'definition_one_or_multiple' => 'tulajdonságok', + 'definition_successful_adding' => 'Sikeresen hozzáadta az elemet', + 'definition_successful_deleted' => 'Sikeresen törölte', + 'definition_successful_updating' => 'Sikeresen frissítette a tulajdonságot', + 'definition_type' => 'Tulajdonság típus', + 'definition_type_required' => 'Tulajdonság típusa kötelező mező', + 'definition_unit' => 'Mértkékegység', + 'definition_values' => 'Tulajdonság értékei', + 'new' => 'Új tulajdnoság', + 'no_attributes_to_display' => 'Nincs megjelenítendő elem', + 'receipt_visibility' => 'Nyugta', + 'show_in_items' => 'Megjelenítés a termékekben', + 'show_in_items_visibility' => 'Termékek', + 'show_in_receipt' => 'Nyugta megjelenítése', + 'show_in_receivings' => 'Meglenesítés árúátvételekben', + 'show_in_receivings_visibility' => 'Áruátvételek', + 'show_in_sales' => 'Megjelenítés az értékesítésekben', + 'show_in_sales_visibility' => 'Értékesítések', + 'show_in_search' => 'Megjelenítés a keresésben', + 'show_in_search_visibility' => 'Keresés', + 'update' => 'Tulajdonság frissítése', ]; diff --git a/app/Language/hy/Attributes.php b/app/Language/hy/Attributes.php index 377b84f4b..e52e89f11 100644 --- a/app/Language/hy/Attributes.php +++ b/app/Language/hy/Attributes.php @@ -1,34 +1,36 @@ "Attribute value cannot contain ':' or '|'", - "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", - "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", - "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Add Attribute", - "definition_name_required" => "Attribute name is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated attribute", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute type is a required field", - "definition_unit" => "Measurement Unit", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Items to display", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'Attribute value cannot contain \':\' or \'|\'', + 'confirm_delete' => 'Are you sure you want to delete the selected attribute(s)?', + 'confirm_restore' => 'Are you sure you want to restore the selected attribute(s)?', + 'definition_cannot_be_deleted' => 'Could not delete selected attribute(s)', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute name is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated attribute', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute type is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Items to display', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'Ցուցադրել որոնման մեջ', + 'show_in_search_visibility' => 'Որոնում', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/id/Attributes.php b/app/Language/id/Attributes.php index 0d94527a0..d23be2e08 100644 --- a/app/Language/id/Attributes.php +++ b/app/Language/id/Attributes.php @@ -1,34 +1,36 @@ "Nilai Atribut tidak boleh mengandung karakter '_' atau '|'", - "confirm_delete" => "Apakah Anda yakin ingin menghapus atribut tersebut?", - "confirm_restore" => "Apakah Anda yakin ingin mengembalikan atribut tersebut?", - "definition_cannot_be_deleted" => "Tidak bisa menghapus atribut terpilih", - "definition_invalid_group" => "Grup yang dipilih tidak ada atau tidak valid.", - "definition_error_adding_updating" => "Atribut {0} tidak dapat ditambah atau diperbaharui. Silahkan periksa log kesalahan.", - "definition_flags" => "Visibilitas Atribut", - "definition_group" => "Grup", - "definition_id" => "Nomor Id", - "definition_name" => "Tambah Atribut", - "definition_name_required" => "Nama atribut harus diisi", - "definition_one_or_multiple" => "atribut", - "definition_successful_adding" => "Anda telah berhasil menambahkan atribut", - "definition_successful_deleted" => "Anda telah berhasil menghapus", - "definition_successful_updating" => "Anda telah berhasil memperbaharui atribut", - "definition_type" => "Tipe Atribut", - "definition_type_required" => "Tipe Atribut harus diisi", - "definition_unit" => "Satuan Ukuran", - "definition_values" => "Nilai Atribut", - "new" => "Atribut baru", - "no_attributes_to_display" => "Tidak ada Item yang dapat ditampilkan", - "receipt_visibility" => "Struk", - "show_in_items" => "Tampilkan dalam item", - "show_in_items_visibility" => "Item", - "show_in_receipt" => "Tampilkan dalam struk", - "show_in_receivings" => "Tampilkan dalam penerimaan", - "show_in_receivings_visibility" => "Penerimaan", - "show_in_sales" => "Tampilkan dalam penjualan", - "show_in_sales_visibility" => "Penjualan", - "update" => "Perbarui Atribut", + 'attribute_value_invalid_chars' => 'Nilai Atribut tidak boleh mengandung karakter \'_\' atau \'|\'', + 'confirm_delete' => 'Apakah Anda yakin ingin menghapus atribut tersebut?', + 'confirm_restore' => 'Apakah Anda yakin ingin mengembalikan atribut tersebut?', + 'definition_cannot_be_deleted' => 'Tidak bisa menghapus atribut terpilih', + 'definition_invalid_group' => 'Grup yang dipilih tidak ada atau tidak valid.', + 'definition_error_adding_updating' => 'Atribut {0} tidak dapat ditambah atau diperbaharui. Silahkan periksa log kesalahan.', + 'definition_flags' => 'Visibilitas Atribut', + 'definition_group' => 'Grup', + 'definition_id' => 'Nomor Id', + 'definition_name' => 'Tambah Atribut', + 'definition_name_required' => 'Nama atribut harus diisi', + 'definition_one_or_multiple' => 'atribut', + 'definition_successful_adding' => 'Anda telah berhasil menambahkan atribut', + 'definition_successful_deleted' => 'Anda telah berhasil menghapus', + 'definition_successful_updating' => 'Anda telah berhasil memperbaharui atribut', + 'definition_type' => 'Tipe Atribut', + 'definition_type_required' => 'Tipe Atribut harus diisi', + 'definition_unit' => 'Satuan Ukuran', + 'definition_values' => 'Nilai Atribut', + 'new' => 'Atribut baru', + 'no_attributes_to_display' => 'Tidak ada Item yang dapat ditampilkan', + 'receipt_visibility' => 'Struk', + 'show_in_items' => 'Tampilkan dalam item', + 'show_in_items_visibility' => 'Item', + 'show_in_receipt' => 'Tampilkan dalam struk', + 'show_in_receivings' => 'Tampilkan dalam penerimaan', + 'show_in_receivings_visibility' => 'Penerimaan', + 'show_in_sales' => 'Tampilkan dalam penjualan', + 'show_in_sales_visibility' => 'Penjualan', + 'show_in_search' => 'Tampilkan dalam pencarian', + 'show_in_search_visibility' => 'Pencarian', + 'update' => 'Perbarui Atribut', ]; diff --git a/app/Language/it/Attributes.php b/app/Language/it/Attributes.php index d6c997eae..53e41620f 100644 --- a/app/Language/it/Attributes.php +++ b/app/Language/it/Attributes.php @@ -1,34 +1,36 @@ "Il valore dell'attributo non può contenere '_' o '|'", - "confirm_delete" => "Sei sicuro di voler eliminare gli attributi selezionati?", - "confirm_restore" => "Sei sicuro di voler ripristinare l'attributo selezionato?", - "definition_cannot_be_deleted" => "Non riesco a cancellare l'attributo selezionato", - "definition_invalid_group" => "Il gruppo selezionato non esiste o non è valido.", - "definition_error_adding_updating" => "Impossibile aggiungere o aggiornare l'attributo {0}. Si prega di controllare il registro degli errori.", - "definition_flags" => "Visibilità attributo", - "definition_group" => "Gruppo", - "definition_id" => "Id", - "definition_name" => "Aggiungi attributo", - "definition_name_required" => "Nome attributo è richiesto", - "definition_one_or_multiple" => "attributo(i)", - "definition_successful_adding" => "Hai aggiunto il prodotto con successo", - "definition_successful_deleted" => "Cancellato con successo", - "definition_successful_updating" => "Hai aggiornato correttamente l'attributo", - "definition_type" => "Tipo di attributo", - "definition_type_required" => "Il tipo di attribuito è richiesto", - "definition_unit" => "Unità di misura", - "definition_values" => "Valore attributo", - "new" => "Nuovo attributo", - "no_attributes_to_display" => "Nessun elemento da visualizzare", - "receipt_visibility" => "Scontrino", - "show_in_items" => "Visualizza in articoli", - "show_in_items_visibility" => "Articoli", - "show_in_receipt" => "Mostra in ricevuta", - "show_in_receivings" => "Mostra negli incassi", - "show_in_receivings_visibility" => "Ricezione", - "show_in_sales" => "Visualizza in vendite", - "show_in_sales_visibility" => "Vendite", - "update" => "Aggiorna attributo", + 'attribute_value_invalid_chars' => 'Il valore dell\'attributo non può contenere \'_\' o \'|\'', + 'confirm_delete' => 'Sei sicuro di voler eliminare gli attributi selezionati?', + 'confirm_restore' => 'Sei sicuro di voler ripristinare l\'attributo selezionato?', + 'definition_cannot_be_deleted' => 'Non riesco a cancellare l\'attributo selezionato', + 'definition_invalid_group' => 'Il gruppo selezionato non esiste o non è valido.', + 'definition_error_adding_updating' => 'Impossibile aggiungere o aggiornare l\'attributo {0}. Si prega di controllare il registro degli errori.', + 'definition_flags' => 'Visibilità attributo', + 'definition_group' => 'Gruppo', + 'definition_id' => 'Id', + 'definition_name' => 'Aggiungi attributo', + 'definition_name_required' => 'Nome attributo è richiesto', + 'definition_one_or_multiple' => 'attributo(i)', + 'definition_successful_adding' => 'Hai aggiunto il prodotto con successo', + 'definition_successful_deleted' => 'Cancellato con successo', + 'definition_successful_updating' => 'Hai aggiornato correttamente l\'attributo', + 'definition_type' => 'Tipo di attributo', + 'definition_type_required' => 'Il tipo di attribuito è richiesto', + 'definition_unit' => 'Unità di misura', + 'definition_values' => 'Valore attributo', + 'new' => 'Nuovo attributo', + 'no_attributes_to_display' => 'Nessun elemento da visualizzare', + 'receipt_visibility' => 'Scontrino', + 'show_in_items' => 'Visualizza in articoli', + 'show_in_items_visibility' => 'Articoli', + 'show_in_receipt' => 'Mostra in ricevuta', + 'show_in_receivings' => 'Mostra negli incassi', + 'show_in_receivings_visibility' => 'Ricezione', + 'show_in_sales' => 'Visualizza in vendite', + 'show_in_sales_visibility' => 'Vendite', + 'show_in_search' => 'Visualizza nella ricerca', + 'show_in_search_visibility' => 'Ricerca', + 'update' => 'Aggiorna attributo', ]; diff --git a/app/Language/km/Attributes.php b/app/Language/km/Attributes.php index 557e51522..41a6c78c5 100644 --- a/app/Language/km/Attributes.php +++ b/app/Language/km/Attributes.php @@ -1,34 +1,36 @@ "ព៌តមានបន្ថែម មិនអាចមានអក្សរ '_' រឺ '|'", - "confirm_delete" => "តើអ្នកពិតជាចង់លុប ព៌តមានបន្ថែម ដែលបានជ្រើសរើស?", - "confirm_restore" => "តើអ្នកពិតជាដាក់ឡើងវិញនៅ ព៌តមានបន្ថែម ដែលបានជ្រើសរើស?", - "definition_cannot_be_deleted" => "មិនអាចលុបព៌តមានបន្ថែមដែលបានជ្រើសរើស", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "ព៌តមានបន្ថែម {0} មិនអាចថែម រឺកែប្រែបានឡើយ។​ សូមចូលទៅឆែករបាយការណ៍កំហុស។", - "definition_flags" => "ដាក់បង្ហាញព៌តមានបន្ថែម", - "definition_group" => "ក្រុម", - "definition_id" => "លេខរៀង", - "definition_name" => "បន្ថែម ព៌តមាន", - "definition_name_required" => "ឈ្មោះនៃព៌តមានបន្ថែម​ គឺត្រូវការចាំបាច់ត្រូវបំពេញ", - "definition_one_or_multiple" => "ព៌តមានបន្ថែម", - "definition_successful_adding" => "", - "definition_successful_deleted" => "", - "definition_successful_updating" => "", - "definition_type" => "", - "definition_type_required" => "", - "definition_unit" => "", - "definition_values" => "", - "new" => "", - "no_attributes_to_display" => "", - "receipt_visibility" => "", - "show_in_items" => "", - "show_in_items_visibility" => "", - "show_in_receipt" => "", - "show_in_receivings" => "", - "show_in_receivings_visibility" => "", - "show_in_sales" => "", - "show_in_sales_visibility" => "", - "update" => "", + 'attribute_value_invalid_chars' => 'ព៌តមានបន្ថែម មិនអាចមានអក្សរ \'_\' រឺ \'|\'', + 'confirm_delete' => 'តើអ្នកពិតជាចង់លុប ព៌តមានបន្ថែម ដែលបានជ្រើសរើស?', + 'confirm_restore' => 'តើអ្នកពិតជាដាក់ឡើងវិញនៅ ព៌តមានបន្ថែម ដែលបានជ្រើសរើស?', + 'definition_cannot_be_deleted' => 'មិនអាចលុបព៌តមានបន្ថែមដែលបានជ្រើសរើស', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'ព៌តមានបន្ថែម {0} មិនអាចថែម រឺកែប្រែបានឡើយ។​ សូមចូលទៅឆែករបាយការណ៍កំហុស។', + 'definition_flags' => 'ដាក់បង្ហាញព៌តមានបន្ថែម', + 'definition_group' => 'ក្រុម', + 'definition_id' => 'លេខរៀង', + 'definition_name' => 'បន្ថែម ព៌តមាន', + 'definition_name_required' => 'ឈ្មោះនៃព៌តមានបន្ថែម​ គឺត្រូវការចាំបាច់ត្រូវបំពេញ', + 'definition_one_or_multiple' => 'ព៌តមានបន្ថែម', + 'definition_successful_adding' => '', + 'definition_successful_deleted' => '', + 'definition_successful_updating' => '', + 'definition_type' => '', + 'definition_type_required' => '', + 'definition_unit' => '', + 'definition_values' => '', + 'new' => '', + 'no_attributes_to_display' => '', + 'receipt_visibility' => '', + 'show_in_items' => '', + 'show_in_items_visibility' => '', + 'show_in_receipt' => '', + 'show_in_receivings' => '', + 'show_in_receivings_visibility' => '', + 'show_in_sales' => '', + 'show_in_sales_visibility' => '', + 'show_in_search' => 'បង្ហាញក្នុងការស្វែងរក', + 'show_in_search_visibility' => 'ស្វែងរក', + 'update' => '', ]; diff --git a/app/Language/lo/Attributes.php b/app/Language/lo/Attributes.php index e5bb66296..10bcfa392 100644 --- a/app/Language/lo/Attributes.php +++ b/app/Language/lo/Attributes.php @@ -1,34 +1,36 @@ "ຄ່າແອດທິບິວບໍ່ສາມາດມີ ':' ຫລື '|'", - "confirm_delete" => "ແນ່ໃຈຫຼືບໍທີ່ຈະລືບລາຍການທີ່ເລືອກ", - "confirm_restore" => "ແນ່ໃຈຫຼືບໍທີ່ຈະຄືນຄ່າແອັດທິບິ້ວດັ່ງກ່າວ?", - "definition_cannot_be_deleted" => "ບໍສາມາດລືບລາຍການທີ່ເລືອກໄດ້", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "ລາຍການ {0} ບໍສາມາດເພີ່ມ ຫຼື ແກ້ໄຂ. ກະລຸນາກວດສອບຢູ່ log ຂໍ້ຜິດຜາດ", - "definition_flags" => "ຄູນສົມບັດການເບິ່ງເຫັນ", - "definition_group" => "ກຸ່ມ", - "definition_id" => "ລະຫັດ", - "definition_name" => "ເພີ່ມລາຍການ", - "definition_name_required" => "ຕ້ອງໄດ້ລະບຸຊື່ລາຍການ", - "definition_one_or_multiple" => "ລາຍການ", - "definition_successful_adding" => "ເພີ່ມລາຍການສຳເລັດແລ້ວ", - "definition_successful_deleted" => "ລຶບລາຍການສຳເລັດແລ້ວ", - "definition_successful_updating" => "ແກ້ໄຂລາຍການສຳເລັດແລ້ວ", - "definition_type" => "ປະເພດລາຍການ", - "definition_type_required" => "ປະເພດແອດທີບິວ ຈຳເປັນຕ້ອງໃຊ້", - "definition_unit" => "", - "definition_values" => "", - "new" => "", - "no_attributes_to_display" => "", - "receipt_visibility" => "", - "show_in_items" => "", - "show_in_items_visibility" => "", - "show_in_receipt" => "", - "show_in_receivings" => "", - "show_in_receivings_visibility" => "", - "show_in_sales" => "", - "show_in_sales_visibility" => "", - "update" => "", + 'attribute_value_invalid_chars' => 'ຄ່າແອດທິບິວບໍ່ສາມາດມີ \':\' ຫລື \'|\'', + 'confirm_delete' => 'ແນ່ໃຈຫຼືບໍທີ່ຈະລືບລາຍການທີ່ເລືອກ', + 'confirm_restore' => 'ແນ່ໃຈຫຼືບໍທີ່ຈະຄືນຄ່າແອັດທິບິ້ວດັ່ງກ່າວ?', + 'definition_cannot_be_deleted' => 'ບໍສາມາດລືບລາຍການທີ່ເລືອກໄດ້', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'ລາຍການ {0} ບໍສາມາດເພີ່ມ ຫຼື ແກ້ໄຂ. ກະລຸນາກວດສອບຢູ່ log ຂໍ້ຜິດຜາດ', + 'definition_flags' => 'ຄູນສົມບັດການເບິ່ງເຫັນ', + 'definition_group' => 'ກຸ່ມ', + 'definition_id' => 'ລະຫັດ', + 'definition_name' => 'ເພີ່ມລາຍການ', + 'definition_name_required' => 'ຕ້ອງໄດ້ລະບຸຊື່ລາຍການ', + 'definition_one_or_multiple' => 'ລາຍການ', + 'definition_successful_adding' => 'ເພີ່ມລາຍການສຳເລັດແລ້ວ', + 'definition_successful_deleted' => 'ລຶບລາຍການສຳເລັດແລ້ວ', + 'definition_successful_updating' => 'ແກ້ໄຂລາຍການສຳເລັດແລ້ວ', + 'definition_type' => 'ປະເພດລາຍການ', + 'definition_type_required' => 'ປະເພດແອດທີບິວ ຈຳເປັນຕ້ອງໃຊ້', + 'definition_unit' => '', + 'definition_values' => '', + 'new' => '', + 'no_attributes_to_display' => '', + 'receipt_visibility' => '', + 'show_in_items' => '', + 'show_in_items_visibility' => '', + 'show_in_receipt' => '', + 'show_in_receivings' => '', + 'show_in_receivings_visibility' => '', + 'show_in_sales' => '', + 'show_in_sales_visibility' => '', + 'show_in_search' => 'ສະແດງໃນການຄົ້ນຫາ', + 'show_in_search_visibility' => 'ຄົ້ນຫາ', + 'update' => '', ]; diff --git a/app/Language/ml/Attributes.php b/app/Language/ml/Attributes.php index 82911ea55..37340d7b2 100644 --- a/app/Language/ml/Attributes.php +++ b/app/Language/ml/Attributes.php @@ -1,34 +1,36 @@ "Attribute value cannot contain ':' or '|'", - "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", - "confirm_restore" => "", - "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Attribute Name", - "definition_name_required" => "Attribute name is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated attribute", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute type is a required field", - "definition_unit" => "", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Items to display", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'Attribute value cannot contain \':\' or \'|\'', + 'confirm_delete' => 'Are you sure you want to restore the selected attribute(s)?', + 'confirm_restore' => 'Are you sure you want to delete the selected attribute(s)?', + 'definition_cannot_be_deleted' => 'Could not delete selected attribute(s)', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute type is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated Item Kit', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute name is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Items to display.', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'തിരയലിൽ കാണിക്കുക', + 'show_in_search_visibility' => 'തിരയൽ', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/nb/Attributes.php b/app/Language/nb/Attributes.php index 377b84f4b..d67266cb5 100644 --- a/app/Language/nb/Attributes.php +++ b/app/Language/nb/Attributes.php @@ -1,34 +1,36 @@ "Attribute value cannot contain ':' or '|'", - "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", - "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", - "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Add Attribute", - "definition_name_required" => "Attribute name is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated attribute", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute type is a required field", - "definition_unit" => "Measurement Unit", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Items to display", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'Attribute value cannot contain \':\' or \'|\'', + 'confirm_delete' => 'Are you sure you want to delete the selected attribute(s)?', + 'confirm_restore' => 'Are you sure you want to restore the selected attribute(s)?', + 'definition_cannot_be_deleted' => 'Could not delete selected attribute(s)', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute name is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated attribute', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute type is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Items to display', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'Vis i søk', + 'show_in_search_visibility' => 'Søk', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/nl-BE/Attributes.php b/app/Language/nl-BE/Attributes.php index 4d544a18d..409a29b36 100644 --- a/app/Language/nl-BE/Attributes.php +++ b/app/Language/nl-BE/Attributes.php @@ -1,34 +1,36 @@ "Attribuut waarde kan geen ':' of '|' bevatten", - "confirm_delete" => "Bent u zeker dat u de geselecteerde attributen wil verwijderen?", - "confirm_restore" => "Bent u zeker dat u de geselecteerde attributen wil herstellen?", - "definition_cannot_be_deleted" => "De geselecteerde attributen konden niet verwijderd worden", - "definition_invalid_group" => "De geselecteerde groep bestaat niet of is ongeldig.", - "definition_error_adding_updating" => "Attribuut {0} kon niet toegevoegd of gewijzigd worden. Kijk de error logs na.", - "definition_flags" => "Zichtbaarheid", - "definition_group" => "Groep", - "definition_id" => "Id", - "definition_name" => "Nieuw attribuut", - "definition_name_required" => "Attribuut naam is een verplicht veld", - "definition_one_or_multiple" => "Attribu(u)t(en)", - "definition_successful_adding" => "Attribuut succesvol toegevoegd", - "definition_successful_deleted" => "Attribu(u)t(en) succesvol verwijderd", - "definition_successful_updating" => "Wijzigingen bewaard voor", - "definition_type" => "Type", - "definition_type_required" => "Attribuut type is een verplicht veld", - "definition_unit" => "Meeteenheid", - "definition_values" => "Attribuut waardes", - "new" => "Nieuw Attribuut", - "no_attributes_to_display" => "Er werden geen attributen gevonden", - "receipt_visibility" => "Verkoop", - "show_in_items" => "Toon in producten", - "show_in_items_visibility" => "Producten", - "show_in_receipt" => "Toon in verkoop", - "show_in_receivings" => "Toon in orders", - "show_in_receivings_visibility" => "Orders", - "show_in_sales" => "Toon in verkoop", - "show_in_sales_visibility" => "Verkoop", - "update" => "Wijzig Attribuut", + 'attribute_value_invalid_chars' => 'Attribuut waarde kan geen \':\' of \'|\' bevatten', + 'confirm_delete' => 'Bent u zeker dat u de geselecteerde attributen wil verwijderen?', + 'confirm_restore' => 'Bent u zeker dat u de geselecteerde attributen wil herstellen?', + 'definition_cannot_be_deleted' => 'De geselecteerde attributen konden niet verwijderd worden', + 'definition_invalid_group' => 'De geselecteerde groep bestaat niet of is ongeldig.', + 'definition_error_adding_updating' => 'Attribuut {0} kon niet toegevoegd of gewijzigd worden. Kijk de error logs na.', + 'definition_flags' => 'Zichtbaarheid', + 'definition_group' => 'Groep', + 'definition_id' => 'Id', + 'definition_name' => 'Nieuw attribuut', + 'definition_name_required' => 'Attribuut naam is een verplicht veld', + 'definition_one_or_multiple' => 'Attribu(u)t(en)', + 'definition_successful_adding' => 'Attribuut succesvol toegevoegd', + 'definition_successful_deleted' => 'Attribu(u)t(en) succesvol verwijderd', + 'definition_successful_updating' => 'Wijzigingen bewaard voor', + 'definition_type' => 'Type', + 'definition_type_required' => 'Attribuut type is een verplicht veld', + 'definition_unit' => 'Meeteenheid', + 'definition_values' => 'Attribuut waardes', + 'new' => 'Nieuw Attribuut', + 'no_attributes_to_display' => 'Er werden geen attributen gevonden', + 'receipt_visibility' => 'Verkoop', + 'show_in_items' => 'Toon in producten', + 'show_in_items_visibility' => 'Producten', + 'show_in_receipt' => 'Toon in verkoop', + 'show_in_receivings' => 'Toon in orders', + 'show_in_receivings_visibility' => 'Orders', + 'show_in_sales' => 'Toon in verkoop', + 'show_in_sales_visibility' => 'Verkoop', + 'show_in_search' => 'Toon in zoeken', + 'show_in_search_visibility' => 'Zoeken', + 'update' => 'Wijzig Attribuut', ]; diff --git a/app/Language/nl-NL/Attributes.php b/app/Language/nl-NL/Attributes.php index 25acecf50..207fc4ac8 100644 --- a/app/Language/nl-NL/Attributes.php +++ b/app/Language/nl-NL/Attributes.php @@ -1,34 +1,36 @@ "Kenmerkwaarde mag niet '_' of '|' bevatten", - "confirm_delete" => "Weet u zeker dat u de geselecteerde kenmerken wilt verwijderen?", - "confirm_restore" => "Weet u zeker dat u de geselecteerde kenmerken wilt herstellen?", - "definition_cannot_be_deleted" => "Kan geselecteerde kenmerk(en) niet verwijderen", - "definition_invalid_group" => "De geselecteerde groep bestaat niet of is ongeldig.", - "definition_error_adding_updating" => "Kenmerk {0} kan niet worden toegevoegd of bijgewerkt. Bekijk het foutenlogboek.", - "definition_flags" => "Kenmerk zichtbaarheid", - "definition_group" => "Groep", - "definition_id" => "Id", - "definition_name" => "Kenmerk toevoegen", - "definition_name_required" => "Kenmerknaam is een vereist veld", - "definition_one_or_multiple" => "kenmerk(en)", - "definition_successful_adding" => "U heeft een artikel toegevoegd", - "definition_successful_deleted" => "U heeft verwijderd", - "definition_successful_updating" => "U heeft het kenmerk bijgewerkt", - "definition_type" => "Kenmerk soort", - "definition_type_required" => "Kenmerk soort is een vereist veld", - "definition_unit" => "Maateenheid", - "definition_values" => "Kenmerkwaarden", - "new" => "Nieuw kenmerk", - "no_attributes_to_display" => "Geen artikelen om te weergeven", - "receipt_visibility" => "Kassabon", - "show_in_items" => "Weergeven in artikelen", - "show_in_items_visibility" => "Artikelen", - "show_in_receipt" => "Weergeven op kassabon", - "show_in_receivings" => "Weergeven in leveringen", - "show_in_receivings_visibility" => "Leveringen", - "show_in_sales" => "Weergeven in verkopen", - "show_in_sales_visibility" => "Verkopen", - "update" => "Kenmerk bijwerken", + 'attribute_value_invalid_chars' => 'Kenmerkwaarde mag niet \'_\' of \'|\' bevatten', + 'confirm_delete' => 'Weet u zeker dat u de geselecteerde kenmerken wilt verwijderen?', + 'confirm_restore' => 'Weet u zeker dat u de geselecteerde kenmerken wilt herstellen?', + 'definition_cannot_be_deleted' => 'Kan geselecteerde kenmerk(en) niet verwijderen', + 'definition_invalid_group' => 'De geselecteerde groep bestaat niet of is ongeldig.', + 'definition_error_adding_updating' => 'Kenmerk {0} kan niet worden toegevoegd of bijgewerkt. Bekijk het foutenlogboek.', + 'definition_flags' => 'Kenmerk zichtbaarheid', + 'definition_group' => 'Groep', + 'definition_id' => 'Id', + 'definition_name' => 'Kenmerk toevoegen', + 'definition_name_required' => 'Kenmerknaam is een vereist veld', + 'definition_one_or_multiple' => 'kenmerk(en)', + 'definition_successful_adding' => 'U heeft een artikel toegevoegd', + 'definition_successful_deleted' => 'U heeft verwijderd', + 'definition_successful_updating' => 'U heeft het kenmerk bijgewerkt', + 'definition_type' => 'Kenmerk soort', + 'definition_type_required' => 'Kenmerk soort is een vereist veld', + 'definition_unit' => 'Maateenheid', + 'definition_values' => 'Kenmerkwaarden', + 'new' => 'Nieuw kenmerk', + 'no_attributes_to_display' => 'Geen artikelen om te weergeven', + 'receipt_visibility' => 'Kassabon', + 'show_in_items' => 'Weergeven in artikelen', + 'show_in_items_visibility' => 'Artikelen', + 'show_in_receipt' => 'Weergeven op kassabon', + 'show_in_receivings' => 'Weergeven in leveringen', + 'show_in_receivings_visibility' => 'Leveringen', + 'show_in_sales' => 'Weergeven in verkopen', + 'show_in_sales_visibility' => 'Verkopen', + 'show_in_search' => 'Weergeven in zoekopdrachten', + 'show_in_search_visibility' => 'Zoeken', + 'update' => 'Kenmerk bijwerken', ]; diff --git a/app/Language/pl/Attributes.php b/app/Language/pl/Attributes.php index 3edda3db5..cf184f01d 100644 --- a/app/Language/pl/Attributes.php +++ b/app/Language/pl/Attributes.php @@ -1,34 +1,36 @@ "Wartość atrybutu nie może zawierać'_' lub '|'", - "confirm_delete" => "Czy jesteś pewny, że chcesz usunąć wybrane atrybuty?", - "confirm_restore" => "Czy jesteś pewien, że chcesz przywrócić zaznaczone atrybuty?", - "definition_cannot_be_deleted" => "Nie można usunąć wybranych atrybutów", - "definition_invalid_group" => "Wybrana grupa nie istnieje lub jest nieprawidłowa.", - "definition_error_adding_updating" => "Atrybut 51 nie może zostać dodany lub zaktualizowany. Sprawdź dziennik błędów.", - "definition_flags" => "Widoczność atrybutu", - "definition_group" => "Grupa", - "definition_id" => "Id", - "definition_name" => "Dodaj atrybut", - "definition_name_required" => "Nazwa atrybutu jest wymagana", - "definition_one_or_multiple" => "atrybut(y)", - "definition_successful_adding" => "Pomyślnie dodano element", - "definition_successful_deleted" => "Pomyślnie usunięto", - "definition_successful_updating" => "Pomyślnie zaktualizowano atrybut", - "definition_type" => "Typ atrybutu", - "definition_type_required" => "Typ atrybutu jest wymagany", - "definition_unit" => "Jednostka miary", - "definition_values" => "Wartość atrybutu", - "new" => "Nowy atrybut", - "no_attributes_to_display" => "Brak elementów do wyświetlenia", - "receipt_visibility" => "Paragon", - "show_in_items" => "Pokaż w produktach", - "show_in_items_visibility" => "Produkty", - "show_in_receipt" => "Pokaż w paragonie", - "show_in_receivings" => "Pokaż w dostawach", - "show_in_receivings_visibility" => "Dostawy", - "show_in_sales" => "Pokaż w sprzedażach", - "show_in_sales_visibility" => "Sprzedaże", - "update" => "Zaktualizuj atrybut", + 'attribute_value_invalid_chars' => 'Wartość atrybutu nie może zawierać\'_\' lub \'|\'', + 'confirm_delete' => 'Czy jesteś pewny, że chcesz usunąć wybrane atrybuty?', + 'confirm_restore' => 'Czy jesteś pewien, że chcesz przywrócić zaznaczone atrybuty?', + 'definition_cannot_be_deleted' => 'Nie można usunąć wybranych atrybutów', + 'definition_invalid_group' => 'Wybrana grupa nie istnieje lub jest nieprawidłowa.', + 'definition_error_adding_updating' => 'Atrybut 51 nie może zostać dodany lub zaktualizowany. Sprawdź dziennik błędów.', + 'definition_flags' => 'Widoczność atrybutu', + 'definition_group' => 'Grupa', + 'definition_id' => 'Id', + 'definition_name' => 'Dodaj atrybut', + 'definition_name_required' => 'Nazwa atrybutu jest wymagana', + 'definition_one_or_multiple' => 'atrybut(y)', + 'definition_successful_adding' => 'Pomyślnie dodano element', + 'definition_successful_deleted' => 'Pomyślnie usunięto', + 'definition_successful_updating' => 'Pomyślnie zaktualizowano atrybut', + 'definition_type' => 'Typ atrybutu', + 'definition_type_required' => 'Typ atrybutu jest wymagany', + 'definition_unit' => 'Jednostka miary', + 'definition_values' => 'Wartość atrybutu', + 'new' => 'Nowy atrybut', + 'no_attributes_to_display' => 'Brak elementów do wyświetlenia', + 'receipt_visibility' => 'Paragon', + 'show_in_items' => 'Pokaż w produktach', + 'show_in_items_visibility' => 'Produkty', + 'show_in_receipt' => 'Pokaż w paragonie', + 'show_in_receivings' => 'Pokaż w dostawach', + 'show_in_receivings_visibility' => 'Dostawy', + 'show_in_sales' => 'Pokaż w sprzedażach', + 'show_in_sales_visibility' => 'Sprzedaże', + 'show_in_search' => 'Pokaż w wyszukiwaniu', + 'show_in_search_visibility' => 'Wyszukiwanie', + 'update' => 'Zaktualizuj atrybut', ]; diff --git a/app/Language/pt-BR/Attributes.php b/app/Language/pt-BR/Attributes.php index f71960da8..a69b5031f 100644 --- a/app/Language/pt-BR/Attributes.php +++ b/app/Language/pt-BR/Attributes.php @@ -1,34 +1,36 @@ "Valor do atributo não pode conter ':' ou '|'", - "confirm_delete" => "Tem certeza de que deseja excluir os atributos selecionados?", - "confirm_restore" => "Tem certeza de que deseja restaurar o(s) atributo(s) selecionado(s)?", - "definition_cannot_be_deleted" => "Não foi possível excluir atributo selecionado (s)", - "definition_invalid_group" => "O grupo selecionado não existe ou é inválido.", - "definition_error_adding_updating" => "Atributo {0} não pode ser adicionado ou atualizado. Por favor verifique o log de erros.", - "definition_flags" => "Visibilidade de atributo", - "definition_group" => "Grupo", - "definition_id" => "Id", - "definition_name" => "Adicionar Atributo", - "definition_name_required" => "Nome do atributo é um campo obrigatório", - "definition_one_or_multiple" => "Atributo(s)", - "definition_successful_adding" => "Você adicionou com êxito o item", - "definition_successful_deleted" => "Você excluiu com êxito", - "definition_successful_updating" => "Você atualizou com êxito o atributo", - "definition_type" => "Tipo de atributo", - "definition_type_required" => "Tipo de atributo é um campo obrigatório", - "definition_unit" => "Unidade de medida", - "definition_values" => "Valores de atributo", - "new" => "Novo Atributo", - "no_attributes_to_display" => "Não há itens para exibir", - "receipt_visibility" => "Recibo", - "show_in_items" => "Mostrar em itens", - "show_in_items_visibility" => "Itens", - "show_in_receipt" => "Mostrar no recibo", - "show_in_receivings" => "Mostrar em recebimentos", - "show_in_receivings_visibility" => "Recebimentos", - "show_in_sales" => "Mostrar em vendas", - "show_in_sales_visibility" => "Vendas", - "update" => "Atualizar atributo", + 'attribute_value_invalid_chars' => 'Valor do atributo não pode conter \':\' ou \'|\'', + 'confirm_delete' => 'Tem certeza de que deseja excluir os atributos selecionados?', + 'confirm_restore' => 'Tem certeza de que deseja restaurar o(s) atributo(s) selecionado(s)?', + 'definition_cannot_be_deleted' => 'Não foi possível excluir atributo selecionado (s)', + 'definition_invalid_group' => 'O grupo selecionado não existe ou é inválido.', + 'definition_error_adding_updating' => 'Atributo {0} não pode ser adicionado ou atualizado. Por favor verifique o log de erros.', + 'definition_flags' => 'Visibilidade de atributo', + 'definition_group' => 'Grupo', + 'definition_id' => 'Id', + 'definition_name' => 'Adicionar Atributo', + 'definition_name_required' => 'Nome do atributo é um campo obrigatório', + 'definition_one_or_multiple' => 'Atributo(s)', + 'definition_successful_adding' => 'Você adicionou com êxito o item', + 'definition_successful_deleted' => 'Você excluiu com êxito', + 'definition_successful_updating' => 'Você atualizou com êxito o atributo', + 'definition_type' => 'Tipo de atributo', + 'definition_type_required' => 'Tipo de atributo é um campo obrigatório', + 'definition_unit' => 'Unidade de medida', + 'definition_values' => 'Valores de atributo', + 'new' => 'Novo Atributo', + 'no_attributes_to_display' => 'Não há itens para exibir', + 'receipt_visibility' => 'Recibo', + 'show_in_items' => 'Mostrar em itens', + 'show_in_items_visibility' => 'Itens', + 'show_in_receipt' => 'Mostrar no recibo', + 'show_in_receivings' => 'Mostrar em recebimentos', + 'show_in_receivings_visibility' => 'Recebimentos', + 'show_in_sales' => 'Mostrar em vendas', + 'show_in_sales_visibility' => 'Vendas', + 'show_in_search' => 'Mostrar na busca', + 'show_in_search_visibility' => 'Busca', + 'update' => 'Atualizar atributo', ]; diff --git a/app/Language/ro/Attributes.php b/app/Language/ro/Attributes.php index 921b86361..7032d6bb2 100644 --- a/app/Language/ro/Attributes.php +++ b/app/Language/ro/Attributes.php @@ -1,34 +1,36 @@ "Valoare atribut nu poate contine ':' sau '|'", - "confirm_delete" => "Sigur doriti stergerea atributului/atributelor selectat(e)?", - "confirm_restore" => "", - "definition_cannot_be_deleted" => "Nu se poate sterge atributul/atributele selectat(e)", - "definition_invalid_group" => "Grupul selectat nu există sau este invalid.", - "definition_error_adding_updating" => "", - "definition_flags" => "Vizibilitate atribut", - "definition_group" => "Grup", - "definition_id" => "Id", - "definition_name" => "Adauga atribut", - "definition_name_required" => "Nume atribut este un camp obligatoriu", - "definition_one_or_multiple" => "atribut(e)", - "definition_successful_adding" => "Ati adaugat articolul cu succes", - "definition_successful_deleted" => "Ati sters cu succes", - "definition_successful_updating" => "Ati actualizat atributul cu succes", - "definition_type" => "Tip Atribut", - "definition_type_required" => "Tip Atribut este camp obligatoriu", - "definition_unit" => "", - "definition_values" => "Valori Atribut", - "new" => "Atribut nou", - "no_attributes_to_display" => "Nu sunt articole de afisat", - "receipt_visibility" => "Chitanta", - "show_in_items" => "Arata in articole", - "show_in_items_visibility" => "Articole", - "show_in_receipt" => "Arata in chitanta", - "show_in_receivings" => "Arata in receptii", - "show_in_receivings_visibility" => "Receptii", - "show_in_sales" => "Arata in vanzari", - "show_in_sales_visibility" => "Vanzari", - "update" => "Actualizare Atribut", + 'attribute_value_invalid_chars' => 'Valoare atribut nu poate contine \':\' sau \'|\'', + 'confirm_delete' => 'Sigur doriti stergerea atributului/atributelor selectat(e)?', + 'confirm_restore' => '', + 'definition_cannot_be_deleted' => 'Nu se poate sterge atributul/atributele selectat(e)', + 'definition_invalid_group' => 'Grupul selectat nu există sau este invalid.', + 'definition_error_adding_updating' => '', + 'definition_flags' => 'Vizibilitate atribut', + 'definition_group' => 'Grup', + 'definition_id' => 'Id', + 'definition_name' => 'Adauga atribut', + 'definition_name_required' => 'Nume atribut este un camp obligatoriu', + 'definition_one_or_multiple' => 'atribut(e)', + 'definition_successful_adding' => 'Ati adaugat articolul cu succes', + 'definition_successful_deleted' => 'Ati sters cu succes', + 'definition_successful_updating' => 'Ati actualizat atributul cu succes', + 'definition_type' => 'Tip Atribut', + 'definition_type_required' => 'Tip Atribut este camp obligatoriu', + 'definition_unit' => '', + 'definition_values' => 'Valori Atribut', + 'new' => 'Atribut nou', + 'no_attributes_to_display' => 'Nu sunt articole de afisat', + 'receipt_visibility' => 'Chitanta', + 'show_in_items' => 'Arata in articole', + 'show_in_items_visibility' => 'Articole', + 'show_in_receipt' => 'Arata in chitanta', + 'show_in_receivings' => 'Arata in receptii', + 'show_in_receivings_visibility' => 'Receptii', + 'show_in_sales' => 'Arata in vanzari', + 'show_in_sales_visibility' => 'Vanzari', + 'show_in_search' => 'Arata in cautare', + 'show_in_search_visibility' => 'Cautare', + 'update' => 'Actualizare Atribut', ]; diff --git a/app/Language/ru/Attributes.php b/app/Language/ru/Attributes.php index 08822fa57..f77199be3 100644 --- a/app/Language/ru/Attributes.php +++ b/app/Language/ru/Attributes.php @@ -1,34 +1,36 @@ "Значение атрибута не может содержать ':' или '|'", - "confirm_delete" => "Вы уверены, что хотите удалить выбранные атрибут(ы)?", - "confirm_restore" => "Вы уверены, что хотите восстановить выбранные атрибут(ы)?", - "definition_cannot_be_deleted" => "Не удалось удалить выбранные атрибут(ы)", - "definition_invalid_group" => "Выбранная группа не существует или недействительна.", - "definition_error_adding_updating" => "Атрибут {0} не может быть добавлен или обновлен. Пожалуйста, проверьте журнал ошибок.", - "definition_flags" => "Видимость атрибута", - "definition_group" => "Группа", - "definition_id" => "№", - "definition_name" => "Добавить атрибут", - "definition_name_required" => "Название атрибута - обязательное поле", - "definition_one_or_multiple" => "атрибут(ы)", - "definition_successful_adding" => "Вы успешно добавили товар", - "definition_successful_deleted" => "Успешно удалено", - "definition_successful_updating" => "Обновлено успешно", - "definition_type" => "Тип атрибута", - "definition_type_required" => "Название атрибута - обязательное поле", - "definition_unit" => "Единица измерения", - "definition_values" => "Значения атрибута", - "new" => "Новый атрибут", - "no_attributes_to_display" => "Нет товаров для отображения", - "receipt_visibility" => "Чек", - "show_in_items" => "Показать в товарах", - "show_in_items_visibility" => "Товары", - "show_in_receipt" => "Показать в квитанции", - "show_in_receivings" => "Показать в закупках", - "show_in_receivings_visibility" => "Закупки", - "show_in_sales" => "Показать в продажах", - "show_in_sales_visibility" => "Продажи", - "update" => "Обновить атрибут", + 'attribute_value_invalid_chars' => 'Значение атрибута не может содержать \':\' или \'|\'', + 'confirm_delete' => 'Вы уверены, что хотите удалить выбранные атрибут(ы)?', + 'confirm_restore' => 'Вы уверены, что хотите восстановить выбранные атрибут(ы)?', + 'definition_cannot_be_deleted' => 'Не удалось удалить выбранные атрибут(ы)', + 'definition_invalid_group' => 'Выбранная группа не существует или недействительна.', + 'definition_error_adding_updating' => 'Атрибут {0} не может быть добавлен или обновлен. Пожалуйста, проверьте журнал ошибок.', + 'definition_flags' => 'Видимость атрибута', + 'definition_group' => 'Группа', + 'definition_id' => '№', + 'definition_name' => 'Добавить атрибут', + 'definition_name_required' => 'Название атрибута - обязательное поле', + 'definition_one_or_multiple' => 'атрибут(ы)', + 'definition_successful_adding' => 'Вы успешно добавили товар', + 'definition_successful_deleted' => 'Успешно удалено', + 'definition_successful_updating' => 'Обновлено успешно', + 'definition_type' => 'Тип атрибута', + 'definition_type_required' => 'Название атрибута - обязательное поле', + 'definition_unit' => 'Единица измерения', + 'definition_values' => 'Значения атрибута', + 'new' => 'Новый атрибут', + 'no_attributes_to_display' => 'Нет товаров для отображения', + 'receipt_visibility' => 'Чек', + 'show_in_items' => 'Показать в товарах', + 'show_in_items_visibility' => 'Товары', + 'show_in_receipt' => 'Показать в квитанции', + 'show_in_receivings' => 'Показать в закупках', + 'show_in_receivings_visibility' => 'Закупки', + 'show_in_sales' => 'Показать в продажах', + 'show_in_sales_visibility' => 'Продажи', + 'show_in_search' => 'Показать в поиске', + 'show_in_search_visibility' => 'Поиск', + 'update' => 'Обновить атрибут', ]; diff --git a/app/Language/sv/Attributes.php b/app/Language/sv/Attributes.php index 8efad3d00..3d9dac43c 100644 --- a/app/Language/sv/Attributes.php +++ b/app/Language/sv/Attributes.php @@ -1,34 +1,36 @@ "Attributvärdet får inte innehålla '_' eller '|'", - "confirm_delete" => "Är du säker på att du vill ta bort de valda attributen?", - "confirm_restore" => "Är du säker på att du vill återställa de valda attributen?", - "definition_cannot_be_deleted" => "Det gick inte att ta bort valda attribut", - "definition_invalid_group" => "Den valda gruppen finns inte eller är ogiltig.", - "definition_error_adding_updating" => "Attribut{0} kunde inte läggas till eller uppdateras. Kontrollera felloggen.", - "definition_flags" => "Attribut synlighet", - "definition_group" => "Grupp", - "definition_id" => "Id", - "definition_name" => "Lägg till attribut", - "definition_name_required" => "Attributnamn är ett obligatoriskt fält", - "definition_one_or_multiple" => "attribut", - "definition_successful_adding" => "Du har lagt till artikeln", - "definition_successful_deleted" => "Du har tagit bort", - "definition_successful_updating" => "Du har uppdaterat attributet", - "definition_type" => "Attributtyp", - "definition_type_required" => "Attributtyp är ett obligatoriskt fält", - "definition_unit" => "Måttenhet", - "definition_values" => "Attributvärden", - "new" => "Nytt attribut", - "no_attributes_to_display" => "Inga artiklar att visa", - "receipt_visibility" => "Kvitto", - "show_in_items" => "Visa i artiklar", - "show_in_items_visibility" => "Artiklar", - "show_in_receipt" => "Visa i kvitto", - "show_in_receivings" => "Visa i mottagande", - "show_in_receivings_visibility" => "Inleveranser", - "show_in_sales" => "Visa i försäljning", - "show_in_sales_visibility" => "Försäljning", - "update" => "Uppdatera attribut", + 'attribute_value_invalid_chars' => 'Attributvärdet får inte innehålla \'_\' eller \'|\'', + 'confirm_delete' => 'Är du säker på att du vill ta bort de valda attributen?', + 'confirm_restore' => 'Är du säker på att du vill återställa de valda attributen?', + 'definition_cannot_be_deleted' => 'Det gick inte att ta bort valda attribut', + 'definition_invalid_group' => 'Den valda gruppen finns inte eller är ogiltig.', + 'definition_error_adding_updating' => 'Attribut{0} kunde inte läggas till eller uppdateras. Kontrollera felloggen.', + 'definition_flags' => 'Attribut synlighet', + 'definition_group' => 'Grupp', + 'definition_id' => 'Id', + 'definition_name' => 'Lägg till attribut', + 'definition_name_required' => 'Attributnamn är ett obligatoriskt fält', + 'definition_one_or_multiple' => 'attribut', + 'definition_successful_adding' => 'Du har lagt till artikeln', + 'definition_successful_deleted' => 'Du har tagit bort', + 'definition_successful_updating' => 'Du har uppdaterat attributet', + 'definition_type' => 'Attributtyp', + 'definition_type_required' => 'Attributtyp är ett obligatoriskt fält', + 'definition_unit' => 'Måttenhet', + 'definition_values' => 'Attributvärden', + 'new' => 'Nytt attribut', + 'no_attributes_to_display' => 'Inga artiklar att visa', + 'receipt_visibility' => 'Kvitto', + 'show_in_items' => 'Visa i artiklar', + 'show_in_items_visibility' => 'Artiklar', + 'show_in_receipt' => 'Visa i kvitto', + 'show_in_receivings' => 'Visa i mottagande', + 'show_in_receivings_visibility' => 'Inleveranser', + 'show_in_sales' => 'Visa i försäljning', + 'show_in_sales_visibility' => 'Försäljning', + 'show_in_search' => 'Visa i sökning', + 'show_in_search_visibility' => 'Sökning', + 'update' => 'Uppdatera attribut', ]; diff --git a/app/Language/sw-KE/Attributes.php b/app/Language/sw-KE/Attributes.php index 241521565..07927944d 100644 --- a/app/Language/sw-KE/Attributes.php +++ b/app/Language/sw-KE/Attributes.php @@ -1,34 +1,36 @@ "Thamani ya sifa haiwezi kuwa na '_' au '|'", - "confirm_delete" => "Una uhakika unataka kufuta sifa iliyochaguliwa/zilizochaguliwa?", - "confirm_restore" => "Una uhakika unataka kurejesha sifa iliyochaguliwa/zilizochaguliwa?", - "definition_cannot_be_deleted" => "Haiwezekani kufuta sifa iliyochaguliwa/zilizochaguliwa", - "definition_invalid_group" => "Kikundi ulichochagua hakipo au hakitoshi.", - "definition_error_adding_updating" => "Sifa {0} haiwezekani kuongezwa au kusasishwa. Tafadhali angalia logi ya makosa.", - "definition_flags" => "Uonekano wa Sifa", - "definition_group" => "Kundi", - "definition_id" => "Id", - "definition_name" => "Ongeza Sifa", - "definition_name_required" => "Jina la sifa ni kiashiria kinachohitajika", - "definition_one_or_multiple" => "Sifa", - "definition_successful_adding" => "Umefanikiwa kuongeza kipengee(Item)", - "definition_successful_deleted" => "Umefanikiwa kufuta", - "definition_successful_updating" => "Umefanikiwa kusasisha sifa", - "definition_type" => "Aina ya Sifa", - "definition_type_required" => "Aina ya sifa ni kiashiria kinachohitajika", - "definition_unit" => "Kipimo", - "definition_values" => "Thamani za Sifa", - "new" => "Sifa Mpya", - "no_attributes_to_display" => "Hakuna Sifa za kuonyesha", - "receipt_visibility" => "Risiti", - "show_in_items" => "Onyesha kwenye bidhaa", - "show_in_items_visibility" => "Bidhaa", - "show_in_receipt" => "Onyesha kwenye risiti", - "show_in_receivings" => "Onyesha kwenye Manunuzi", - "show_in_receivings_visibility" => "Manunuzi", - "show_in_sales" => "Onyesha kwenye Mauzo", - "show_in_sales_visibility" => "Mauzo", - "update" => "Sasisha Sifa", -]; \ No newline at end of file + 'attribute_value_invalid_chars' => 'Thamani ya sifa haiwezi kuwa na \'_\' au \'|\'', + 'confirm_delete' => 'Una uhakika unataka kufuta sifa iliyochaguliwa/zilizochaguliwa?', + 'confirm_restore' => 'Una uhakika unataka kurejesha sifa iliyochaguliwa/zilizochaguliwa?', + 'definition_cannot_be_deleted' => 'Haiwezekani kufuta sifa iliyochaguliwa/zilizochaguliwa', + 'definition_invalid_group' => 'Kikundi ulichochagua hakipo au hakitoshi.', + 'definition_error_adding_updating' => 'Sifa {0} haiwezekani kuongezwa au kusasishwa. Tafadhali angalia logi ya makosa.', + 'definition_flags' => 'Uonekano wa Sifa', + 'definition_group' => 'Kundi', + 'definition_id' => 'Id', + 'definition_name' => 'Ongeza Sifa', + 'definition_name_required' => 'Jina la sifa ni kiashiria kinachohitajika', + 'definition_one_or_multiple' => 'Sifa', + 'definition_successful_adding' => 'Umefanikiwa kuongeza kipengee(Item)', + 'definition_successful_deleted' => 'Umefanikiwa kufuta', + 'definition_successful_updating' => 'Umefanikiwa kusasisha sifa', + 'definition_type' => 'Aina ya Sifa', + 'definition_type_required' => 'Aina ya sifa ni kiashiria kinachohitajika', + 'definition_unit' => 'Kipimo', + 'definition_values' => 'Thamani za Sifa', + 'new' => 'Sifa Mpya', + 'no_attributes_to_display' => 'Hakuna Sifa za kuonyesha', + 'receipt_visibility' => 'Risiti', + 'show_in_items' => 'Onyesha kwenye bidhaa', + 'show_in_items_visibility' => 'Bidhaa', + 'show_in_receipt' => 'Onyesha kwenye risiti', + 'show_in_receivings' => 'Onyesha kwenye Manunuzi', + 'show_in_receivings_visibility' => 'Manunuzi', + 'show_in_sales' => 'Onyesha kwenye Mauzo', + 'show_in_sales_visibility' => 'Mauzo', + 'show_in_search' => 'Onyesha kwenye Utafutaji', + 'show_in_search_visibility' => 'Utafutaji', + 'update' => 'Sasisha Sifa', +]; diff --git a/app/Language/sw-TZ/Attributes.php b/app/Language/sw-TZ/Attributes.php index 241521565..07927944d 100644 --- a/app/Language/sw-TZ/Attributes.php +++ b/app/Language/sw-TZ/Attributes.php @@ -1,34 +1,36 @@ "Thamani ya sifa haiwezi kuwa na '_' au '|'", - "confirm_delete" => "Una uhakika unataka kufuta sifa iliyochaguliwa/zilizochaguliwa?", - "confirm_restore" => "Una uhakika unataka kurejesha sifa iliyochaguliwa/zilizochaguliwa?", - "definition_cannot_be_deleted" => "Haiwezekani kufuta sifa iliyochaguliwa/zilizochaguliwa", - "definition_invalid_group" => "Kikundi ulichochagua hakipo au hakitoshi.", - "definition_error_adding_updating" => "Sifa {0} haiwezekani kuongezwa au kusasishwa. Tafadhali angalia logi ya makosa.", - "definition_flags" => "Uonekano wa Sifa", - "definition_group" => "Kundi", - "definition_id" => "Id", - "definition_name" => "Ongeza Sifa", - "definition_name_required" => "Jina la sifa ni kiashiria kinachohitajika", - "definition_one_or_multiple" => "Sifa", - "definition_successful_adding" => "Umefanikiwa kuongeza kipengee(Item)", - "definition_successful_deleted" => "Umefanikiwa kufuta", - "definition_successful_updating" => "Umefanikiwa kusasisha sifa", - "definition_type" => "Aina ya Sifa", - "definition_type_required" => "Aina ya sifa ni kiashiria kinachohitajika", - "definition_unit" => "Kipimo", - "definition_values" => "Thamani za Sifa", - "new" => "Sifa Mpya", - "no_attributes_to_display" => "Hakuna Sifa za kuonyesha", - "receipt_visibility" => "Risiti", - "show_in_items" => "Onyesha kwenye bidhaa", - "show_in_items_visibility" => "Bidhaa", - "show_in_receipt" => "Onyesha kwenye risiti", - "show_in_receivings" => "Onyesha kwenye Manunuzi", - "show_in_receivings_visibility" => "Manunuzi", - "show_in_sales" => "Onyesha kwenye Mauzo", - "show_in_sales_visibility" => "Mauzo", - "update" => "Sasisha Sifa", -]; \ No newline at end of file + 'attribute_value_invalid_chars' => 'Thamani ya sifa haiwezi kuwa na \'_\' au \'|\'', + 'confirm_delete' => 'Una uhakika unataka kufuta sifa iliyochaguliwa/zilizochaguliwa?', + 'confirm_restore' => 'Una uhakika unataka kurejesha sifa iliyochaguliwa/zilizochaguliwa?', + 'definition_cannot_be_deleted' => 'Haiwezekani kufuta sifa iliyochaguliwa/zilizochaguliwa', + 'definition_invalid_group' => 'Kikundi ulichochagua hakipo au hakitoshi.', + 'definition_error_adding_updating' => 'Sifa {0} haiwezekani kuongezwa au kusasishwa. Tafadhali angalia logi ya makosa.', + 'definition_flags' => 'Uonekano wa Sifa', + 'definition_group' => 'Kundi', + 'definition_id' => 'Id', + 'definition_name' => 'Ongeza Sifa', + 'definition_name_required' => 'Jina la sifa ni kiashiria kinachohitajika', + 'definition_one_or_multiple' => 'Sifa', + 'definition_successful_adding' => 'Umefanikiwa kuongeza kipengee(Item)', + 'definition_successful_deleted' => 'Umefanikiwa kufuta', + 'definition_successful_updating' => 'Umefanikiwa kusasisha sifa', + 'definition_type' => 'Aina ya Sifa', + 'definition_type_required' => 'Aina ya sifa ni kiashiria kinachohitajika', + 'definition_unit' => 'Kipimo', + 'definition_values' => 'Thamani za Sifa', + 'new' => 'Sifa Mpya', + 'no_attributes_to_display' => 'Hakuna Sifa za kuonyesha', + 'receipt_visibility' => 'Risiti', + 'show_in_items' => 'Onyesha kwenye bidhaa', + 'show_in_items_visibility' => 'Bidhaa', + 'show_in_receipt' => 'Onyesha kwenye risiti', + 'show_in_receivings' => 'Onyesha kwenye Manunuzi', + 'show_in_receivings_visibility' => 'Manunuzi', + 'show_in_sales' => 'Onyesha kwenye Mauzo', + 'show_in_sales_visibility' => 'Mauzo', + 'show_in_search' => 'Onyesha kwenye Utafutaji', + 'show_in_search_visibility' => 'Utafutaji', + 'update' => 'Sasisha Sifa', +]; diff --git a/app/Language/ta/Attributes.php b/app/Language/ta/Attributes.php index 9c278989d..c944cc3ea 100644 --- a/app/Language/ta/Attributes.php +++ b/app/Language/ta/Attributes.php @@ -1,34 +1,36 @@ "பண்புக்கூறு மதிப்பு '_' அல்லது '|' கொண்டிருக்கக்கூடாது", - "confirm_delete" => "தேர்ந்தெடுக்கப்பட்ட பண்புக்கூறு (களை) நீக்க விரும்புகிறீர்களா?", - "confirm_restore" => "தேர்ந்தெடுக்கப்பட்ட பண்புக்கூறுகளை (களை) மீட்டெடுக்க விரும்புகிறீர்களா?", - "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Add Attribute", - "definition_name_required" => "Attribute name is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated attribute", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute type is a required field", - "definition_unit" => "Measurement Unit", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Items to display", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'பண்புக்கூறு மதிப்பு \'_\' அல்லது \'|\' கொண்டிருக்கக்கூடாது', + 'confirm_delete' => 'தேர்ந்தெடுக்கப்பட்ட பண்புக்கூறு (களை) நீக்க விரும்புகிறீர்களா?', + 'confirm_restore' => 'தேர்ந்தெடுக்கப்பட்ட பண்புக்கூறுகளை (களை) மீட்டெடுக்க விரும்புகிறீர்களா?', + 'definition_cannot_be_deleted' => 'Could not delete selected attribute(s)', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute name is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated attribute', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute type is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Items to display', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'தேடலில் காட்டு', + 'show_in_search_visibility' => 'தேடல்', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/th/Attributes.php b/app/Language/th/Attributes.php index 4c1e161b3..3d10767f0 100644 --- a/app/Language/th/Attributes.php +++ b/app/Language/th/Attributes.php @@ -1,34 +1,36 @@ "คุณลักษณะไม่สามารถมีเครื่องหมาย ':' หรือเครื่องหมาย '|' ได้", - "confirm_delete" => "ต้องการลบคุณลักษณะที่เลือกหรือไม่ ?", - "confirm_restore" => "ต้องการคืนค่าคุณลักษณะที่เลือกหรือไม่ ?", - "definition_cannot_be_deleted" => "ไม่สามารถลบคุณลักษณะที่เลือก", - "definition_invalid_group" => "กลุ่มที่เลือกไม่มีอยู่หรือไม่ถูกต้อง", - "definition_error_adding_updating" => "ไม่สามารถเพิ่มหรือแก้ไขคุณลักษณะ {0}, โปรดตรวจสอบความผิดพลาดในบันทึก", - "definition_flags" => "การมองเห็นคุณลักษณะ", - "definition_group" => "กลุ่ม", - "definition_id" => "ID", - "definition_name" => "เพิ่มแอตทริบิวต์", - "definition_name_required" => "ชื่อแอตทริบิวต์ จำเป็นต้องป้อน", - "definition_one_or_multiple" => "แอตทริบิวต์", - "definition_successful_adding" => "เพิ่มรายการสำเร็จแล้ว", - "definition_successful_deleted" => "ลบรายการสำเร็จแล้ว", - "definition_successful_updating" => "อัปเดตแอตทริบิวต์สำเร็จแล้ว", - "definition_type" => "ประเภทแอตทริบิวต์", - "definition_type_required" => "ประเภทแอตทริบิวต์ จำเป็นต้องป้อน", - "definition_unit" => "หน่วยวัด", - "definition_values" => "ค่าแอตทริบิวต์", - "new" => "สร้าง แอตทริบิวต์", - "no_attributes_to_display" => "ไม่มีรายการที่จะแสดง", - "receipt_visibility" => "ใบเสร็จ", - "show_in_items" => "แสดงใน รายการสินค้า", - "show_in_items_visibility" => "รายการสินค้า", - "show_in_receipt" => "แสดงใน ใบเสร็จ", - "show_in_receivings" => "แสดงใน สินค้าขาเข้า", - "show_in_receivings_visibility" => "สินค้าขาเข้า", - "show_in_sales" => "แสดงใน การขาย", - "show_in_sales_visibility" => "การขาย", - "update" => "ปรับปรุงแอตทริบิวต์", + 'attribute_value_invalid_chars' => 'คุณลักษณะไม่สามารถมีเครื่องหมาย \':\' หรือเครื่องหมาย \'|\' ได้', + 'confirm_delete' => 'ต้องการลบคุณลักษณะที่เลือกหรือไม่ ?', + 'confirm_restore' => 'ต้องการคืนค่าคุณลักษณะที่เลือกหรือไม่ ?', + 'definition_cannot_be_deleted' => 'ไม่สามารถลบคุณลักษณะที่เลือก', + 'definition_invalid_group' => 'กลุ่มที่เลือกไม่มีอยู่หรือไม่ถูกต้อง', + 'definition_error_adding_updating' => 'ไม่สามารถเพิ่มหรือแก้ไขคุณลักษณะ {0}, โปรดตรวจสอบความผิดพลาดในบันทึก', + 'definition_flags' => 'การมองเห็นคุณลักษณะ', + 'definition_group' => 'กลุ่ม', + 'definition_id' => 'ID', + 'definition_name' => 'เพิ่มแอตทริบิวต์', + 'definition_name_required' => 'ชื่อแอตทริบิวต์ จำเป็นต้องป้อน', + 'definition_one_or_multiple' => 'แอตทริบิวต์', + 'definition_successful_adding' => 'เพิ่มรายการสำเร็จแล้ว', + 'definition_successful_deleted' => 'ลบรายการสำเร็จแล้ว', + 'definition_successful_updating' => 'อัปเดตแอตทริบิวต์สำเร็จแล้ว', + 'definition_type' => 'ประเภทแอตทริบิวต์', + 'definition_type_required' => 'ประเภทแอตทริบิวต์ จำเป็นต้องป้อน', + 'definition_unit' => 'หน่วยวัด', + 'definition_values' => 'ค่าแอตทริบิวต์', + 'new' => 'สร้าง แอตทริบิวต์', + 'no_attributes_to_display' => 'ไม่มีรายการที่จะแสดง', + 'receipt_visibility' => 'ใบเสร็จ', + 'show_in_items' => 'แสดงใน รายการสินค้า', + 'show_in_items_visibility' => 'รายการสินค้า', + 'show_in_receipt' => 'แสดงใน ใบเสร็จ', + 'show_in_receivings' => 'แสดงใน สินค้าขาเข้า', + 'show_in_receivings_visibility' => 'สินค้าขาเข้า', + 'show_in_sales' => 'แสดงใน การขาย', + 'show_in_sales_visibility' => 'การขาย', + 'show_in_search' => 'แสดงใน การค้นหา', + 'show_in_search_visibility' => 'การค้นหา', + 'update' => 'ปรับปรุงแอตทริบิวต์', ]; diff --git a/app/Language/tl/Attributes.php b/app/Language/tl/Attributes.php index e163b8835..cfa63c1d0 100644 --- a/app/Language/tl/Attributes.php +++ b/app/Language/tl/Attributes.php @@ -1,34 +1,36 @@ "Attribute value cannot contain ':' or '|'", - "confirm_delete" => "Are you sure you want to restore the selected attribute(s)?", - "confirm_restore" => "Are you sure you want to delete the selected attribute(s)?", - "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Add Attribute", - "definition_name_required" => "Attribute type is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated Item Kit", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute name is a required field", - "definition_unit" => "Measurement Unit", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Items to display.", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'Attribute value cannot contain \':\' or \'|\'', + 'confirm_delete' => 'Are you sure you want to restore the selected attribute(s)?', + 'confirm_restore' => 'Are you sure you want to delete the selected attribute(s)?', + 'definition_cannot_be_deleted' => 'Could not delete selected attribute(s)', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute type is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated Item Kit', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute name is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Items to display.', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'Ipakita sa paghahanap', + 'show_in_search_visibility' => 'Paghahanap', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/tr/Attributes.php b/app/Language/tr/Attributes.php index 877496fc7..570426e32 100644 --- a/app/Language/tr/Attributes.php +++ b/app/Language/tr/Attributes.php @@ -1,34 +1,36 @@ "Nitelik değeri ':' ve ya '|' karakterlerini bulunduramaz", - "confirm_delete" => "Seçili niteliği ya da nitelikleri silmek istediğinize emin misiniz?", - "confirm_restore" => "Seçili nitelik ya da nitelikleri kurtarmak istediğinize emin misiniz?", - "definition_cannot_be_deleted" => "Seçili nitelik ya da nitelikler silinemedi", - "definition_invalid_group" => "Seçilen grup mevcut değil veya geçersiz.", - "definition_error_adding_updating" => "Nitelik {0} eklenemedi ya da güncellenemedi. Lütfen hata kaydını gözden geçirin.", - "definition_flags" => "Nitelik Görünebilirliği", - "definition_group" => "Küme", - "definition_id" => "Kimlik", - "definition_name" => "Nitelik Ekle", - "definition_name_required" => "Nitelik adı girilmesi gerekli alandır", - "definition_one_or_multiple" => "Nitelik/Nitelikler", - "definition_successful_adding" => "Başarıyla öge eklediniz", - "definition_successful_deleted" => "Başarıyla sildiniz", - "definition_successful_updating" => "Başarılı biçimde niteliği güncellediniz", - "definition_type" => "Nitelik Türü", - "definition_type_required" => "Nitelik türü alanı gereklidir", - "definition_unit" => "Ölçü Birimi", - "definition_values" => "Nitelik Değerleri", - "new" => "Yeni Nitelik", - "no_attributes_to_display" => "Gösterecek ürün yok", - "receipt_visibility" => "Fiş", - "show_in_items" => "Ürünlerde göster", - "show_in_items_visibility" => "Ürünler", - "show_in_receipt" => "Fişlerde göster", - "show_in_receivings" => "Alacaklarda göster", - "show_in_receivings_visibility" => "Alacaklar", - "show_in_sales" => "Satışlarda göster", - "show_in_sales_visibility" => "Satışlar", - "update" => "Nitelik Güncelle", + 'attribute_value_invalid_chars' => 'Nitelik değeri \':\' ve ya \'|\' karakterlerini bulunduramaz', + 'confirm_delete' => 'Seçili niteliği ya da nitelikleri silmek istediğinize emin misiniz?', + 'confirm_restore' => 'Seçili nitelik ya da nitelikleri kurtarmak istediğinize emin misiniz?', + 'definition_cannot_be_deleted' => 'Seçili nitelik ya da nitelikler silinemedi', + 'definition_invalid_group' => 'Seçilen grup mevcut değil veya geçersiz.', + 'definition_error_adding_updating' => 'Nitelik {0} eklenemedi ya da güncellenemedi. Lütfen hata kaydını gözden geçirin.', + 'definition_flags' => 'Nitelik Görünebilirliği', + 'definition_group' => 'Küme', + 'definition_id' => 'Kimlik', + 'definition_name' => 'Nitelik Ekle', + 'definition_name_required' => 'Nitelik adı girilmesi gerekli alandır', + 'definition_one_or_multiple' => 'Nitelik/Nitelikler', + 'definition_successful_adding' => 'Başarıyla öge eklediniz', + 'definition_successful_deleted' => 'Başarıyla sildiniz', + 'definition_successful_updating' => 'Başarılı biçimde niteliği güncellediniz', + 'definition_type' => 'Nitelik Türü', + 'definition_type_required' => 'Nitelik türü alanı gereklidir', + 'definition_unit' => 'Ölçü Birimi', + 'definition_values' => 'Nitelik Değerleri', + 'new' => 'Yeni Nitelik', + 'no_attributes_to_display' => 'Gösterecek ürün yok', + 'receipt_visibility' => 'Fiş', + 'show_in_items' => 'Ürünlerde göster', + 'show_in_items_visibility' => 'Ürünler', + 'show_in_receipt' => 'Fişlerde göster', + 'show_in_receivings' => 'Alacaklarda göster', + 'show_in_receivings_visibility' => 'Alacaklar', + 'show_in_sales' => 'Satışlarda göster', + 'show_in_sales_visibility' => 'Satışlar', + 'show_in_search' => 'Aramada göster', + 'show_in_search_visibility' => 'Arama', + 'update' => 'Nitelik Güncelle', ]; diff --git a/app/Language/uk/Attributes.php b/app/Language/uk/Attributes.php index f9302f861..d0fa55e8a 100644 --- a/app/Language/uk/Attributes.php +++ b/app/Language/uk/Attributes.php @@ -1,34 +1,36 @@ "Значення атрибуту не може містити ':' або'|'", - "confirm_delete" => "Ви впевнені, що хочете видалити вибрані атрибут(и)?", - "confirm_restore" => "Ви впевнені, що хочете відновити вибрані атрибут(и)?", - "definition_cannot_be_deleted" => "Не вдалося видалити вибрані атрибут(и)", - "definition_invalid_group" => "Вибрана група не існує або недійсна.", - "definition_error_adding_updating" => "Атрибут {0} не може бути доданий або оновлений. Будь ласка, перевірте журнал помилок.", - "definition_flags" => "Видимість атрибуту", - "definition_group" => "Група", - "definition_id" => "№", - "definition_name" => "Додати атрибут", - "definition_name_required" => "Назва атрибуту - обов'язкове поле", - "definition_one_or_multiple" => "Атрибут(и)", - "definition_successful_adding" => "Ви успішно додали товар", - "definition_successful_deleted" => "Успішно видалено", - "definition_successful_updating" => "Оновлено успішно", - "definition_type" => "Тип атрибуту", - "definition_type_required" => "Назва атрибуту - обов'язкове поле", - "definition_unit" => "Одиниця виміру", - "definition_values" => "Значення атрибуту", - "new" => "Новий атрибут", - "no_attributes_to_display" => "Немає об'єктів для відображення", - "receipt_visibility" => "Чек", - "show_in_items" => "Показати в товарах", - "show_in_items_visibility" => "Товари", - "show_in_receipt" => "Показати в квитанції", - "show_in_receivings" => "Показати в надходженнях", - "show_in_receivings_visibility" => "Надходження", - "show_in_sales" => "Показати в продажах", - "show_in_sales_visibility" => "Продажі", - "update" => "Оновити атрибут", + 'attribute_value_invalid_chars' => 'Значення атрибуту не може містити \':\' або\'|\'', + 'confirm_delete' => 'Ви впевнені, що хочете видалити вибрані атрибут(и)?', + 'confirm_restore' => 'Ви впевнені, що хочете відновити вибрані атрибут(и)?', + 'definition_cannot_be_deleted' => 'Не вдалося видалити вибрані атрибут(и)', + 'definition_invalid_group' => 'Вибрана група не існує або недійсна.', + 'definition_error_adding_updating' => 'Атрибут {0} не може бути доданий або оновлений. Будь ласка, перевірте журнал помилок.', + 'definition_flags' => 'Видимість атрибуту', + 'definition_group' => 'Група', + 'definition_id' => '№', + 'definition_name' => 'Додати атрибут', + 'definition_name_required' => 'Назва атрибуту - обов\'язкове поле', + 'definition_one_or_multiple' => 'Атрибут(и)', + 'definition_successful_adding' => 'Ви успішно додали товар', + 'definition_successful_deleted' => 'Успішно видалено', + 'definition_successful_updating' => 'Оновлено успішно', + 'definition_type' => 'Тип атрибуту', + 'definition_type_required' => 'Назва атрибуту - обов\'язкове поле', + 'definition_unit' => 'Одиниця виміру', + 'definition_values' => 'Значення атрибуту', + 'new' => 'Новий атрибут', + 'no_attributes_to_display' => 'Немає об\'єктів для відображення', + 'receipt_visibility' => 'Чек', + 'show_in_items' => 'Показати в товарах', + 'show_in_items_visibility' => 'Товари', + 'show_in_receipt' => 'Показати в квитанції', + 'show_in_receivings' => 'Показати в надходженнях', + 'show_in_receivings_visibility' => 'Надходження', + 'show_in_sales' => 'Показати в продажах', + 'show_in_sales_visibility' => 'Продажі', + 'show_in_search' => 'Показати в пошуку', + 'show_in_search_visibility' => 'Пошук', + 'update' => 'Оновити атрибут', ]; diff --git a/app/Language/ur/Attributes.php b/app/Language/ur/Attributes.php index ce02d9f2c..8b46fb4f6 100644 --- a/app/Language/ur/Attributes.php +++ b/app/Language/ur/Attributes.php @@ -1,34 +1,36 @@ "وصف کے اندراج میں ':' یا '|' ممنوع ہیں", - "confirm_delete" => "کیا آپ منتخب شدہ کو حذف کرنا چاہتے ہیں ؟", - "confirm_restore" => "کیا آپ منتخب شدہ کو بحال کرنا چاہتے ہیں ؟", - "definition_cannot_be_deleted" => "منتخب شدہ کو حذف نہیں کیا جا سکتا", - "definition_invalid_group" => "", - "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", - "definition_flags" => "Attribute Visibility", - "definition_group" => "Group", - "definition_id" => "Id", - "definition_name" => "Add Attribute", - "definition_name_required" => "Attribute name is a required field", - "definition_one_or_multiple" => "attribute(s)", - "definition_successful_adding" => "You have successfully added item", - "definition_successful_deleted" => "You have successfully deleted", - "definition_successful_updating" => "You have successfully updated attribute", - "definition_type" => "Attribute Type", - "definition_type_required" => "Attribute type is a required field", - "definition_unit" => "Measurement Unit", - "definition_values" => "Attribute Values", - "new" => "New Attribute", - "no_attributes_to_display" => "No Items to display", - "receipt_visibility" => "Receipt", - "show_in_items" => "Show in items", - "show_in_items_visibility" => "Items", - "show_in_receipt" => "Show in receipt", - "show_in_receivings" => "Show in receivings", - "show_in_receivings_visibility" => "Receivings", - "show_in_sales" => "Show in sales", - "show_in_sales_visibility" => "Sales", - "update" => "Update Attribute", + 'attribute_value_invalid_chars' => 'وصف کے اندراج میں \':\' یا \'|\' ممنوع ہیں', + 'confirm_delete' => 'کیا آپ منتخب شدہ کو حذف کرنا چاہتے ہیں ؟', + 'confirm_restore' => 'کیا آپ منتخب شدہ کو بحال کرنا چاہتے ہیں ؟', + 'definition_cannot_be_deleted' => 'منتخب شدہ کو حذف نہیں کیا جا سکتا', + 'definition_invalid_group' => '', + 'definition_error_adding_updating' => 'Attribute {0} could not be added or updated. Please check the error log.', + 'definition_flags' => 'Attribute Visibility', + 'definition_group' => 'Group', + 'definition_id' => 'Id', + 'definition_name' => 'Add Attribute', + 'definition_name_required' => 'Attribute name is a required field', + 'definition_one_or_multiple' => 'attribute(s)', + 'definition_successful_adding' => 'You have successfully added item', + 'definition_successful_deleted' => 'You have successfully deleted', + 'definition_successful_updating' => 'You have successfully updated attribute', + 'definition_type' => 'Attribute Type', + 'definition_type_required' => 'Attribute type is a required field', + 'definition_unit' => 'Measurement Unit', + 'definition_values' => 'Attribute Values', + 'new' => 'New Attribute', + 'no_attributes_to_display' => 'No Items to display', + 'receipt_visibility' => 'Receipt', + 'show_in_items' => 'Show in items', + 'show_in_items_visibility' => 'Items', + 'show_in_receipt' => 'Show in receipt', + 'show_in_receivings' => 'Show in receivings', + 'show_in_receivings_visibility' => 'Receivings', + 'show_in_sales' => 'Show in sales', + 'show_in_sales_visibility' => 'Sales', + 'show_in_search' => 'تلاش میں دکھائیں', + 'show_in_search_visibility' => 'تلاش', + 'update' => 'Update Attribute', ]; diff --git a/app/Language/vi/Attributes.php b/app/Language/vi/Attributes.php index 90bd2245e..ce35181e7 100644 --- a/app/Language/vi/Attributes.php +++ b/app/Language/vi/Attributes.php @@ -1,34 +1,36 @@ "Giá trị thuộc tính không thể chứa ':' hay '|'", - "confirm_delete" => "Bạn có chắc chắn muốn xóa (các) thuộc tính đã chọn không?", - "confirm_restore" => "Bạn có chắc chắn muốn khôi phục (các) thuộc tính đã chọn không?", - "definition_cannot_be_deleted" => "Không thể xóa (các) thuộc tính được chọn", - "definition_invalid_group" => "Nhóm đã chọn không tồn tại hoặc không hợp lệ.", - "definition_error_adding_updating" => "Thuộc tính {0} không thể thêm hoặc cập nhật. Vui lòng kiểm tra nhật ký lỗi.", - "definition_flags" => "Hiển thị thuộc tính", - "definition_group" => "Nhóm", - "definition_id" => "Mã số", - "definition_name" => "Thêm thuộc tính", - "definition_name_required" => "Tên thuộc tính là trường bắt buộc", - "definition_one_or_multiple" => "thuộc tính", - "definition_successful_adding" => "Bạn vừa mới thêm mục tin thành công", - "definition_successful_deleted" => "Bạn đã xóa thành công", - "definition_successful_updating" => "Bạn đã cập nhật thành công thuộc tính", - "definition_type" => "Loại thuộc tính", - "definition_type_required" => "Loại thuộc tính là trường bắt buộc", - "definition_unit" => "Đơn vị đo lường", - "definition_values" => "Giá trị thuộc tính", - "new" => "Thêm thuộc tính mới", - "no_attributes_to_display" => "Không có mặt hàng nào để hiển thị", - "receipt_visibility" => "Biên lai", - "show_in_items" => "Hiển thị trong các mặt hàng", - "show_in_items_visibility" => "Hàng hóa", - "show_in_receipt" => "Hiển thị trong biên lai", - "show_in_receivings" => "Hiển thị trong nhập hàng", - "show_in_receivings_visibility" => "Nhập hàng", - "show_in_sales" => "Hiển thị trong bán hàng", - "show_in_sales_visibility" => "Bán hàng", - "update" => "Cập nhật thuộc tính", + 'attribute_value_invalid_chars' => 'Giá trị thuộc tính không thể chứa \':\' hay \'|\'', + 'confirm_delete' => 'Bạn có chắc chắn muốn xóa (các) thuộc tính đã chọn không?', + 'confirm_restore' => 'Bạn có chắc chắn muốn khôi phục (các) thuộc tính đã chọn không?', + 'definition_cannot_be_deleted' => 'Không thể xóa (các) thuộc tính được chọn', + 'definition_invalid_group' => 'Nhóm đã chọn không tồn tại hoặc không hợp lệ.', + 'definition_error_adding_updating' => 'Thuộc tính {0} không thể thêm hoặc cập nhật. Vui lòng kiểm tra nhật ký lỗi.', + 'definition_flags' => 'Hiển thị thuộc tính', + 'definition_group' => 'Nhóm', + 'definition_id' => 'Mã số', + 'definition_name' => 'Thêm thuộc tính', + 'definition_name_required' => 'Tên thuộc tính là trường bắt buộc', + 'definition_one_or_multiple' => 'thuộc tính', + 'definition_successful_adding' => 'Bạn vừa mới thêm mục tin thành công', + 'definition_successful_deleted' => 'Bạn đã xóa thành công', + 'definition_successful_updating' => 'Bạn đã cập nhật thành công thuộc tính', + 'definition_type' => 'Loại thuộc tính', + 'definition_type_required' => 'Loại thuộc tính là trường bắt buộc', + 'definition_unit' => 'Đơn vị đo lường', + 'definition_values' => 'Giá trị thuộc tính', + 'new' => 'Thêm thuộc tính mới', + 'no_attributes_to_display' => 'Không có mặt hàng nào để hiển thị', + 'receipt_visibility' => 'Biên lai', + 'show_in_items' => 'Hiển thị trong các mặt hàng', + 'show_in_items_visibility' => 'Hàng hóa', + 'show_in_receipt' => 'Hiển thị trong biên lai', + 'show_in_receivings' => 'Hiển thị trong nhập hàng', + 'show_in_receivings_visibility' => 'Nhập hàng', + 'show_in_sales' => 'Hiển thị trong bán hàng', + 'show_in_sales_visibility' => 'Bán hàng', + 'show_in_search' => 'Hiển thị trong tìm kiếm', + 'show_in_search_visibility' => 'Tìm kiếm', + 'update' => 'Cập nhật thuộc tính', ]; diff --git a/app/Language/zh-Hans/Attributes.php b/app/Language/zh-Hans/Attributes.php index 883d91935..ff971d38c 100644 --- a/app/Language/zh-Hans/Attributes.php +++ b/app/Language/zh-Hans/Attributes.php @@ -1,34 +1,36 @@ "属性特征不能包含':' or '|'", - "confirm_delete" => "确定要删除所选属性吗", - "confirm_restore" => "您确定要还原所选属性吗?", - "definition_cannot_be_deleted" => "不能删除该特征属性", - "definition_invalid_group" => "所选组不存在或无效。", - "definition_error_adding_updating" => "无法添加或更新属性{0}。 请检查错误日志。", - "definition_flags" => "属性可见性", - "definition_group" => "组", - "definition_id" => "ID卡", - "definition_name" => "添加特征属性", - "definition_name_required" => "属性必须填写", - "definition_one_or_multiple" => "属性特征", - "definition_successful_adding" => "你成功添加物品", - "definition_successful_deleted" => "已经成功删除", - "definition_successful_updating" => "更新属性成功", - "definition_type" => "属性类别", - "definition_type_required" => "属性必填", - "definition_unit" => "计量单位", - "definition_values" => "属性特征值", - "new" => "新属性", - "no_attributes_to_display" => "没有物品需要显示", - "receipt_visibility" => "小票", - "show_in_items" => "在项目中显示", - "show_in_items_visibility" => "物品", - "show_in_receipt" => "在收据中显示", - "show_in_receivings" => "在收据中显示", - "show_in_receivings_visibility" => "收据", - "show_in_sales" => "在销售中显示", - "show_in_sales_visibility" => "销售", - "update" => "更新属性", + 'attribute_value_invalid_chars' => '属性特征不能包含\':\' or \'|\'', + 'confirm_delete' => '确定要删除所选属性吗', + 'confirm_restore' => '您确定要还原所选属性吗?', + 'definition_cannot_be_deleted' => '不能删除该特征属性', + 'definition_invalid_group' => '所选组不存在或无效。', + 'definition_error_adding_updating' => '无法添加或更新属性{0}。 请检查错误日志。', + 'definition_flags' => '属性可见性', + 'definition_group' => '组', + 'definition_id' => 'ID卡', + 'definition_name' => '添加特征属性', + 'definition_name_required' => '属性必须填写', + 'definition_one_or_multiple' => '属性特征', + 'definition_successful_adding' => '你成功添加物品', + 'definition_successful_deleted' => '已经成功删除', + 'definition_successful_updating' => '更新属性成功', + 'definition_type' => '属性类别', + 'definition_type_required' => '属性必填', + 'definition_unit' => '计量单位', + 'definition_values' => '属性特征值', + 'new' => '新属性', + 'no_attributes_to_display' => '没有物品需要显示', + 'receipt_visibility' => '小票', + 'show_in_items' => '在项目中显示', + 'show_in_items_visibility' => '物品', + 'show_in_receipt' => '在收据中显示', + 'show_in_receivings' => '在收据中显示', + 'show_in_receivings_visibility' => '收据', + 'show_in_sales' => '在销售中显示', + 'show_in_sales_visibility' => '销售', + 'show_in_search' => '在搜索中显示', + 'show_in_search_visibility' => '搜索', + 'update' => '更新属性', ]; diff --git a/app/Language/zh-Hant/Attributes.php b/app/Language/zh-Hant/Attributes.php index 66a3b19fa..723e709ce 100644 --- a/app/Language/zh-Hant/Attributes.php +++ b/app/Language/zh-Hant/Attributes.php @@ -1,34 +1,36 @@ "屬性設定值中不可含有「_」或「|」", - "confirm_delete" => "您確定要刪除此屬性?", - "confirm_restore" => "您確定要還原所選屬性嗎?", - "definition_cannot_be_deleted" => "無法刪除所選屬性", - "definition_invalid_group" => "所選擇的群組不存在或無效。", - "definition_error_adding_updating" => "無法添加或更新屬性 {0}。 請檢查錯誤日誌。", - "definition_flags" => "屬性可見性", - "definition_group" => "群組", - "definition_id" => "編號", - "definition_name" => "添加屬性", - "definition_name_required" => "屬性名稱必需填寫", - "definition_one_or_multiple" => "屬性", - "definition_successful_adding" => "您已成功添加項目", - "definition_successful_deleted" => "您已成功刪除", - "definition_successful_updating" => "您已成功更新屬性", - "definition_type" => "屬性類型", - "definition_type_required" => "屬性類型必需填寫", - "definition_unit" => "測量單位", - "definition_values" => "屬性值", - "new" => "新屬性", - "no_attributes_to_display" => "沒有項目可顯示", - "receipt_visibility" => "收據", - "show_in_items" => "在項目中顯示", - "show_in_items_visibility" => "物品", - "show_in_receipt" => "在收據中顯示", - "show_in_receivings" => "在收貨中顯示", - "show_in_receivings_visibility" => "收貨", - "show_in_sales" => "在銷售中顯示", - "show_in_sales_visibility" => "銷售", - "update" => "更新屬性", + 'attribute_value_invalid_chars' => '屬性設定值中不可含有「_」或「|」', + 'confirm_delete' => '您確定要刪除此屬性?', + 'confirm_restore' => '您確定要還原所選屬性嗎?', + 'definition_cannot_be_deleted' => '無法刪除所選屬性', + 'definition_invalid_group' => '所選擇的群組不存在或無效。', + 'definition_error_adding_updating' => '無法添加或更新屬性 {0}。 請檢查錯誤日誌。', + 'definition_flags' => '屬性可見性', + 'definition_group' => '群組', + 'definition_id' => '編號', + 'definition_name' => '添加屬性', + 'definition_name_required' => '屬性名稱必需填寫', + 'definition_one_or_multiple' => '屬性', + 'definition_successful_adding' => '您已成功添加項目', + 'definition_successful_deleted' => '您已成功刪除', + 'definition_successful_updating' => '您已成功更新屬性', + 'definition_type' => '屬性類型', + 'definition_type_required' => '屬性類型必需填寫', + 'definition_unit' => '測量單位', + 'definition_values' => '屬性值', + 'new' => '新屬性', + 'no_attributes_to_display' => '沒有項目可顯示', + 'receipt_visibility' => '收據', + 'show_in_items' => '在項目中顯示', + 'show_in_items_visibility' => '物品', + 'show_in_receipt' => '在收據中顯示', + 'show_in_receivings' => '在收貨中顯示', + 'show_in_receivings_visibility' => '收貨', + 'show_in_sales' => '在銷售中顯示', + 'show_in_sales_visibility' => '銷售', + 'show_in_search' => '在搜尋中顯示', + 'show_in_search_visibility' => '搜尋', + 'update' => '更新屬性', ]; diff --git a/app/Models/Attribute.php b/app/Models/Attribute.php index 5b43a9bf0..79a021ffd 100644 --- a/app/Models/Attribute.php +++ b/app/Models/Attribute.php @@ -38,9 +38,10 @@ class Attribute extends Model 'attribute_decimal' ]; - public const SHOW_IN_ITEMS = 1; // TODO: These need to be moved to constants.php + public const SHOW_IN_ITEMS = 1; public const SHOW_IN_SALES = 2; public const SHOW_IN_RECEIVINGS = 4; + public const SHOW_IN_SEARCH = 8; public function deleteDropdownAttributeValue(string $attribute_value, int $definition_id): bool { $attribute_id = $this->getAttributeIdByValue($attribute_value); diff --git a/app/Models/Item.php b/app/Models/Item.php index f8cd99175..3eba73183 100644 --- a/app/Models/Item.php +++ b/app/Models/Item.php @@ -2,9 +2,11 @@ namespace App\Models; +use CodeIgniter\Database\RawSql; use CodeIgniter\Database\ResultInterface; use CodeIgniter\Model; use Config\OSPOS; +use DateTime; use ReflectionException; use stdClass; @@ -38,6 +40,7 @@ class Item extends Model 'allow_alt_description', 'is_serialized' ]; + protected $table = 'items'; protected $primaryKey = 'item_id'; protected $useAutoIncrement = true; @@ -65,7 +68,6 @@ class Item extends Model 'hsn_code' ]; - /** * Determines if a given item_id is an item */ @@ -140,16 +142,183 @@ class Item extends Model } /** - * Perform a search on items + * Parse search string for attribute-specific queries + * Supports syntax like "color: blue size: large" or "color:blue AND size:large" + * + * @param string $search The raw search string + * @return array{terms: array, attributes: array} Parsed terms and attribute queries */ - public function search(string $search, array $filters, ?int $rows = 0, ?int $limit_from = 0, ?string $sort = 'items.name', ?string $order = 'asc', ?bool $count_only = false) + public function parseAttributeSearch(string $search): array + { + $result = [ + 'terms' => [], + 'attributes' => [] + ]; + + if ($search === '') { + return $result; + } + + $pattern = '/([[:alpha:]][[:alnum:] _-]*?)\s*:\s*([0-9]+,[0-9]+|[^\s,]+)(?:\s*,\s*|\s+(?:AND|OR)\s+)?/iu'; + $remaining = preg_replace($pattern, '', $search); + + if (preg_match_all($pattern, $search, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $attrName = strtolower(trim($match[1])); + $attrValue = trim($match[2]); + $result['attributes'][$attrName][] = $attrValue; + } + } + + $remaining = trim(preg_replace('/\s+/', ' ', $remaining)); + if ($remaining !== '') { + $result['terms'][] = $remaining; + } + + return $result; + } + + /** + * Joins rather than correlated EXISTS per name: EXISTS made MySQL materialize one + * subquery as a full attribute_links scan instead of using attribute_links_uq2 (~400ms vs ~150ms). + * + * $definitionInfo must be resolved by the caller before $builder exists - a query here + * would reset CodeIgniter's table-alias tracking and corrupt $builder's "items" alias. + * + * @param array $definitionInfo definition_id => info, from getDefinitionsByFlags(..., true) + * @param array $parsedAttributes Attribute name => list of search values + * @param int[] $allowedDefinitionIds Definition ids this search is scoped to + * @return string[] Attribute names that resolved to a known, allowed definition and were joined into $builder + */ + private function applyNamedAttributeSearch($builder, array $definitionInfo, array $parsedAttributes, array $allowedDefinitionIds): array + { + $definitionIdByName = []; + foreach ($definitionInfo as $id => $info) { + $name = is_array($info) ? $info['name'] : $info; + $definitionIdByName[strtolower($name)] = (int) $id; + } + + $consumedNames = []; + $index = 0; + foreach ($parsedAttributes as $attrName => $values) { + if (!isset($definitionIdByName[$attrName])) { + continue; + } + + $definitionId = $definitionIdByName[$attrName]; + + if (!in_array($definitionId, $allowedDefinitionIds, true)) { + continue; + } + + $consumedNames[] = $attrName; + + $defType = is_array($definitionInfo[$definitionId]) ? ($definitionInfo[$definitionId]['type'] ?? TEXT) : TEXT; + + $linksAlias = "named_attr_links_{$index}"; + $valuesAlias = "named_attr_values_{$index}"; + $index++; + + $builder->join( + "attribute_links AS {$linksAlias}", + "{$linksAlias}.item_id = items.item_id AND {$linksAlias}.definition_id = {$definitionId} AND {$linksAlias}.receiving_id IS NULL AND {$linksAlias}.sale_id IS NULL" + ); + $builder->join( + "attribute_values AS {$valuesAlias}", + "{$valuesAlias}.attribute_id = {$linksAlias}.attribute_id" + ); + + $builder->groupStart(); + $matched = false; + foreach ($values as $value) { + if ($defType === DECIMAL) { + $parsedValue = parse_decimals($value); + if ($parsedValue === false) { + continue; + } + $builder->orWhere("{$valuesAlias}.attribute_decimal", $parsedValue); + $matched = true; + } elseif ($defType === DATE) { + $config = config(OSPOS::class)->settings; + $date = DateTime::createFromFormat($config['dateformat'], $value); + if ($date === false) { + continue; + } + $builder->orWhere("{$valuesAlias}.attribute_date", $date->format('Y-m-d')); + $matched = true; + } else { + $builder->orWhere("{$valuesAlias}.attribute_value", $value); + $matched = true; + } + } + $builder->groupEnd(); + + if (!$matched) { + $builder->where('1 = 0', null, false); + } + } + + return $consumedNames; + } + + /** + * Get attribute definition ID from column name for sorting + * + * @param string $sortColumn The sort column name + * @return int|null The definition ID or null if not an attribute column + */ + private function getAttributeSortDefinitionId(string $sortColumn): ?int + { + if (!ctype_digit($sortColumn)) { + return null; + } + + return (int) $sortColumn; + } + + /** + * Left-joins the attribute tables needed to sort by a given attribute definition, + * and applies the order-by using the type-appropriate value column. + * + * $definitionInfo must be resolved by the caller before any joins are added to $builder — + * see the note on applyNamedAttributeSearch() for why a query here would corrupt $builder. + * + * @param array $definitionInfo definition_id => info, from getDefinitionsByFlags(..., true) + */ + private function applyAttributeSort($builder, array $definitionInfo, int $sortDefinitionId, string $order): void + { + $sortAlias = "sort_attr_{$sortDefinitionId}"; + $builder->join("attribute_links AS {$sortAlias}", "{$sortAlias}.item_id = items.item_id AND {$sortAlias}.definition_id = {$sortDefinitionId} AND {$sortAlias}.sale_id IS NULL AND {$sortAlias}.receiving_id IS NULL", 'left'); + $builder->join("attribute_values AS {$sortAlias}_val", "{$sortAlias}_val.attribute_id = {$sortAlias}.attribute_id", 'left'); + + $sortColumn = "{$sortAlias}_val.attribute_value"; + + if (isset($definitionInfo[$sortDefinitionId])) { + $defType = is_array($definitionInfo[$sortDefinitionId]) ? ($definitionInfo[$sortDefinitionId]['type'] ?? TEXT) : TEXT; + if ($defType === DECIMAL) { + $sortColumn = "{$sortAlias}_val.attribute_decimal"; + } elseif ($defType === DATE) { + $sortColumn = "{$sortAlias}_val.attribute_date"; + } + } + + $builder->orderBy("MAX($sortColumn)", $order); + } + + /** + * Perform a search on items + * + * Resolves qualifying item_ids first (Phase A), then joins the expensive display-only + * tables scoped to just those ids (Phase B) instead of the whole matching set. + */ + public function search(string $search, array $filters, ?int $rows = 0, ?int $limitFrom = 0, ?string $sort = 'items.name', ?string $order = 'asc', ?bool $countOnly = false) { // Set default values if ($rows == null) { $rows = 0; } - if ($limit_from == null) { - $limit_from = 0; + if ($limitFrom == null) { + $limitFrom = 0; } if ($sort == null) { $sort = 'items.name'; @@ -157,53 +326,196 @@ class Item extends Model if ($order == null) { $order = 'asc'; } - if ($count_only == null) { - $count_only = false; + if ($countOnly == null) { + $countOnly = false; } $config = config(OSPOS::class)->settings; - $builder = $this->db->table('items AS items'); // TODO: I'm not sure if it's needed to write items AS items... I think you can just get away with items + + $dateFormatEnabled = empty($config['date_or_time_format']); + $hasTransDateRange = !empty($filters['start_date']) && !empty($filters['end_date']); + $rangeStart = $hasTransDateRange ? ($dateFormatEnabled ? $filters['start_date'] : rawurldecode($filters['start_date'])) : null; + $rangeEnd = $hasTransDateRange ? ($dateFormatEnabled ? $filters['end_date'] : rawurldecode($filters['end_date'])) : null; + $applyTransDateRange = function ($builder) use ($hasTransDateRange, $dateFormatEnabled, $rangeStart, $rangeEnd) { + if (!$hasTransDateRange) { + return; + } + $column = $dateFormatEnabled ? 'DATE_FORMAT(trans_date, "%Y-%m-%d")' : 'trans_date'; + $builder->groupStart(); + $builder->where("$column >=", $rangeStart); + $builder->where("$column <=", $rangeEnd); + $builder->groupEnd(); + }; + + $definitionIds = array_map('intval', $filters['definition_ids']); + $attributesEnabled = count($filters['definition_ids']) > 0; + $customAttributeSearch = $attributesEnabled && $filters['search_custom'] && !empty($search); + + // Resolved before $idBuilder exists - see applyNamedAttributeSearch() for why. + $attribute = model(Attribute::class); + $definitionInfo = $attribute->getDefinitionsByFlags(Attribute::SHOW_IN_ITEMS | Attribute::SHOW_IN_SEARCH, true); + + if ($attributesEnabled) { + $this->db->simpleQuery('SET SESSION group_concat_max_len=49152'); + } + + $idBuilder = $this->db->table('items AS items'); + + if ($customAttributeSearch) { + // Matching is per attribute row (WHERE, pre-GROUP BY), not against a GROUP_CONCAT + // blob (HAVING, post-GROUP BY), so a match can't bleed across definitions. + $idBuilder->select('items.item_id'); + $idBuilder->join('attribute_links', 'attribute_links.item_id = items.item_id AND attribute_links.receiving_id IS NULL AND attribute_links.sale_id IS NULL AND definition_id IN (' . implode(',', $definitionIds) . ')', 'left'); + $idBuilder->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id', 'left'); + } else { + $idBuilder->select('items.item_id'); + } + + $idBuilder->join('suppliers AS suppliers', 'suppliers.person_id = items.supplier_id', 'left'); + $idBuilder->join('inventory AS inventory', 'inventory.trans_items = items.item_id'); + + if ($filters['stock_location_id'] > -1) { + $idBuilder->join('item_quantities AS item_quantities', 'item_quantities.item_id = items.item_id'); + $idBuilder->where('location_id', $filters['stock_location_id']); + } + + $applyTransDateRange($idBuilder); + + $parsedAttributeSearch = $customAttributeSearch ? $this->parseAttributeSearch($search) : null; + $freeTextSearch = $search; + + if ($parsedAttributeSearch !== null && !empty($parsedAttributeSearch['attributes'])) { + $consumedNames = $this->applyNamedAttributeSearch($idBuilder, $definitionInfo, $parsedAttributeSearch['attributes'], $definitionIds); + + $unconsumedTerms = $parsedAttributeSearch['terms']; + foreach ($parsedAttributeSearch['attributes'] as $attrName => $values) { + if (in_array($attrName, $consumedNames, true)) { + continue; + } + foreach ($values as $value) { + $unconsumedTerms[] = $value; + } + } + + $freeTextSearch = implode(' ', $unconsumedTerms); + } + + if (!empty($freeTextSearch)) { + if ($customAttributeSearch) { + $format = $this->db->escape(dateformat_mysql()); + $attributeValuesTable = $this->db->prefixTable('attribute_values'); + $idBuilder->groupStart(); + $idBuilder->like('attribute_values.attribute_value', $freeTextSearch); + $idBuilder->orLike(new RawSql("DATE_FORMAT($attributeValuesTable.attribute_date, $format)"), $freeTextSearch); + $idBuilder->orLike('attribute_values.attribute_decimal', $freeTextSearch); + $idBuilder->groupEnd(); + } else { + $idBuilder->groupStart(); + $idBuilder->like('name', $search); + $idBuilder->orLike('item_number', $search); + $idBuilder->orLike('items.item_id', $search); + $idBuilder->orLike('company_name', $search); + $idBuilder->orLike('items.category', $search); + $idBuilder->groupEnd(); + } + } + + $idBuilder->where('items.deleted', $filters['is_deleted']); + + if ($filters['empty_upc']) { + $idBuilder->where('item_number', null); + } + if ($filters['low_inventory'] && $filters['stock_location_id'] > -1) { + $idBuilder->where('item_quantities.quantity <=', new RawSql('items.reorder_level')); + } + if ($filters['is_serialized']) { + $idBuilder->where('is_serialized', 1); + } + if ($filters['no_description']) { + $idBuilder->where('items.description', ''); + } + if ($filters['temporary']) { + $idBuilder->where('items.item_type', ITEM_TEMP); + } else { + $nonTemp = [ITEM, ITEM_KIT, ITEM_AMOUNT_ENTRY]; + $idBuilder->whereIn('items.item_type', $nonTemp); + } + + // Avoid duplicated entries with same name because of inventory reporting multiple changes on the same item in the same date range + $idBuilder->groupBy('items.item_id'); // get_found_rows case - if ($count_only) { - $builder->select('COUNT(DISTINCT items.item_id) AS count'); + if ($countOnly) { + return $idBuilder->countAllResults(); + } + + // Order by name of item by default + $sortDefinitionId = $this->getAttributeSortDefinitionId($sort); + if ($sort === 'quantity' && $filters['stock_location_id'] <= -1) { + $itemQuantitiesTable = $this->db->prefixTable('item_quantities'); + $idBuilder->join( + "(SELECT item_id, SUM(quantity) AS total_quantity FROM $itemQuantitiesTable GROUP BY item_id) AS item_quantity_totals", + 'item_quantity_totals.item_id = items.item_id', + 'left' + ); + $idBuilder->orderBy('MAX(item_quantity_totals.total_quantity)', $order); + } elseif ($sortDefinitionId !== null) { + $this->applyAttributeSort($idBuilder, $definitionInfo, $sortDefinitionId, $order); } else { - $builder->select('MAX(items.item_id) AS item_id'); - $builder->select('MAX(items.name) AS name'); - $builder->select('MAX(items.category) AS category'); - $builder->select('MAX(items.supplier_id) AS supplier_id'); - $builder->select('MAX(items.item_number) AS item_number'); - $builder->select('MAX(items.description) AS description'); - $builder->select('MAX(items.cost_price) AS cost_price'); - $builder->select('MAX(items.unit_price) AS unit_price'); - $builder->select('MAX(items.reorder_level) AS reorder_level'); - $builder->select('MAX(items.receiving_quantity) AS receiving_quantity'); - $builder->select('MAX(items.pic_filename) AS pic_filename'); - $builder->select('MAX(items.allow_alt_description) AS allow_alt_description'); - $builder->select('MAX(items.is_serialized) AS is_serialized'); - $builder->select('MAX(items.pack_name) AS pack_name'); - $builder->select('MAX(items.tax_category_id) AS tax_category_id'); - $builder->select('MAX(items.deleted) AS deleted'); + $idBuilder->orderBy($sort, $order); + } - $builder->select('MAX(suppliers.person_id) AS person_id'); - $builder->select('MAX(suppliers.company_name) AS company_name'); - $builder->select('MAX(suppliers.agency_name) AS agency_name'); - $builder->select('MAX(suppliers.account_number) AS account_number'); - $builder->select('MAX(suppliers.deleted) AS deleted'); + if ($rows > 0) { + $idBuilder->limit($rows, $limitFrom); + } - $builder->select('MAX(inventory.trans_id) AS trans_id'); - $builder->select('MAX(inventory.trans_items) AS trans_items'); - $builder->select('MAX(inventory.trans_user) AS trans_user'); - $builder->select('MAX(inventory.trans_date) AS trans_date'); - $builder->select('MAX(inventory.trans_comment) AS trans_comment'); - $builder->select('MAX(inventory.trans_location) AS trans_location'); - $builder->select('MAX(inventory.trans_inventory) AS trans_inventory'); + $itemIds = array_column($idBuilder->get()->getResultArray(), 'item_id'); - if ($filters['stock_location_id'] > -1) { - $builder->select('MAX(item_quantities.item_id) AS qty_item_id'); - $builder->select('MAX(item_quantities.location_id) AS location_id'); - $builder->select('MAX(item_quantities.quantity) AS quantity'); - } + if (empty($itemIds)) { + return $this->db->table('items AS items')->where('1 = 0')->get(); + } + + $builder = $this->db->table('items AS items'); + + $builder->select('MAX(items.item_id) AS item_id'); + $builder->select('MAX(items.name) AS name'); + $builder->select('MAX(items.category) AS category'); + $builder->select('MAX(items.supplier_id) AS supplier_id'); + $builder->select('MAX(items.item_number) AS item_number'); + $builder->select('MAX(items.description) AS description'); + $builder->select('MAX(items.cost_price) AS cost_price'); + $builder->select('MAX(items.unit_price) AS unit_price'); + $builder->select('MAX(items.reorder_level) AS reorder_level'); + $builder->select('MAX(items.receiving_quantity) AS receiving_quantity'); + $builder->select('MAX(items.pic_filename) AS pic_filename'); + $builder->select('MAX(items.allow_alt_description) AS allow_alt_description'); + $builder->select('MAX(items.is_serialized) AS is_serialized'); + $builder->select('MAX(items.pack_name) AS pack_name'); + $builder->select('MAX(items.tax_category_id) AS tax_category_id'); + $builder->select('MAX(items.deleted) AS deleted'); + + $builder->select('MAX(suppliers.person_id) AS person_id'); + $builder->select('MAX(suppliers.company_name) AS company_name'); + $builder->select('MAX(suppliers.agency_name) AS agency_name'); + $builder->select('MAX(suppliers.account_number) AS account_number'); + $builder->select('MAX(suppliers.deleted) AS supplier_deleted'); + + $builder->select('MAX(inventory.trans_id) AS trans_id'); + $builder->select('MAX(inventory.trans_items) AS trans_items'); + $builder->select('MAX(inventory.trans_user) AS trans_user'); + $builder->select('MAX(inventory.trans_date) AS trans_date'); + $builder->select('MAX(inventory.trans_comment) AS trans_comment'); + $builder->select('MAX(inventory.trans_location) AS trans_location'); + $builder->select('MAX(inventory.trans_inventory) AS trans_inventory'); + + $sortByQuantityAllLocations = $sort === 'quantity' && $filters['stock_location_id'] <= -1; + + if ($filters['stock_location_id'] > -1) { + $builder->select('MAX(item_quantities.item_id) AS qty_item_id'); + $builder->select('MAX(item_quantities.location_id) AS location_id'); + $builder->select('MAX(item_quantities.quantity) AS quantity'); + } elseif ($sortByQuantityAllLocations) { + $builder->select('MAX(item_quantity_totals.total_quantity) AS quantity'); } $builder->join('suppliers AS suppliers', 'suppliers.person_id = items.supplier_id', 'left'); @@ -212,75 +524,39 @@ class Item extends Model if ($filters['stock_location_id'] > -1) { $builder->join('item_quantities AS item_quantities', 'item_quantities.item_id = items.item_id'); $builder->where('location_id', $filters['stock_location_id']); + } elseif ($sortByQuantityAllLocations) { + $itemQuantitiesTable = $this->db->prefixTable('item_quantities'); + $builder->join( + "(SELECT item_id, SUM(quantity) AS total_quantity FROM $itemQuantitiesTable GROUP BY item_id) AS item_quantity_totals", + 'item_quantity_totals.item_id = items.item_id', + 'left' + ); } - $where = empty($config['date_or_time_format']) - ? 'DATE_FORMAT(trans_date, "%Y-%m-%d") BETWEEN ' . $this->db->escape($filters['start_date']) . ' AND ' . $this->db->escape($filters['end_date']) - : 'trans_date BETWEEN ' . $this->db->escape(rawurldecode($filters['start_date'])) . ' AND ' . $this->db->escape(rawurldecode($filters['end_date'])); - $builder->where($where); + $applyTransDateRange($builder); - $attributes_enabled = count($filters['definition_ids']) > 0; - - if (!empty($search)) { - if ($attributes_enabled && $filters['search_custom']) { - $builder->havingLike('attribute_values', $search); - $builder->orHavingLike('attribute_dtvalues', $search); - $builder->orHavingLike('attribute_dvalues', $search); - } else { - $builder->groupStart(); - $builder->like('name', $search); - $builder->orLike('item_number', $search); - $builder->orLike('items.item_id', $search); - $builder->orLike('company_name', $search); - $builder->orLike('items.category', $search); - $builder->groupEnd(); - } - } - - if ($attributes_enabled) { + if ($attributesEnabled) { $format = $this->db->escape(dateformat_mysql()); - $this->db->simpleQuery('SET SESSION group_concat_max_len=49152'); - $builder->select('GROUP_CONCAT(DISTINCT CONCAT_WS(\'_\', definition_id, attribute_value) ORDER BY definition_id SEPARATOR \'|\') AS attribute_values'); - $builder->select("GROUP_CONCAT(DISTINCT CONCAT_WS('_', definition_id, DATE_FORMAT(attribute_date, $format)) SEPARATOR '|') AS attribute_dtvalues"); - $builder->select('GROUP_CONCAT(DISTINCT CONCAT_WS(\'_\', definition_id, attribute_decimal) SEPARATOR \'|\') AS attribute_dvalues'); - $builder->join('attribute_links', 'attribute_links.item_id = items.item_id AND attribute_links.receiving_id IS NULL AND attribute_links.sale_id IS NULL AND definition_id IN (' . implode(',', $filters['definition_ids']) . ')', 'left'); + $attributeLinksTable = $this->db->prefixTable('attribute_links'); + $attributeValuesTable = $this->db->prefixTable('attribute_values'); + $builder->select("GROUP_CONCAT(DISTINCT CONCAT_WS('_', $attributeLinksTable.definition_id, $attributeValuesTable.attribute_value) ORDER BY $attributeLinksTable.definition_id SEPARATOR '|') AS attribute_values"); + $builder->select("GROUP_CONCAT(DISTINCT CONCAT_WS('_', $attributeLinksTable.definition_id, DATE_FORMAT($attributeValuesTable.attribute_date, $format)) SEPARATOR '|') AS attribute_dtvalues"); + $builder->select("GROUP_CONCAT(DISTINCT CONCAT_WS('_', $attributeLinksTable.definition_id, $attributeValuesTable.attribute_decimal) SEPARATOR '|') AS attribute_dvalues"); + $builder->join('attribute_links', 'attribute_links.item_id = items.item_id AND attribute_links.receiving_id IS NULL AND attribute_links.sale_id IS NULL AND attribute_links.definition_id IN (' . implode(',', $definitionIds) . ')', 'left'); $builder->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id', 'left'); } - $builder->where('items.deleted', $filters['is_deleted']); + $builder->whereIn('items.item_id', $itemIds); - if ($filters['empty_upc']) { - $builder->where('item_number', null); - } - if ($filters['low_inventory']) { - $builder->where('quantity <=', 'reorder_level'); - } - if ($filters['is_serialized']) { - $builder->where('is_serialized', 1); - } - if ($filters['no_description']) { - $builder->where('items.description', ''); - } - if ($filters['temporary']) { - $builder->where('items.item_type', ITEM_TEMP); - } else { - $non_temp = [ITEM, ITEM_KIT, ITEM_AMOUNT_ENTRY]; - $builder->whereIn('items.item_type', $non_temp); - } - - // get_found_rows case - if ($count_only) { - return $builder->get()->getRow()->count; - } - - // Avoid duplicated entries with same name because of inventory reporting multiple changes on the same item in the same date range $builder->groupBy('items.item_id'); - // Order by name of item by default - $builder->orderBy($sort, $order); - - if ($rows > 0) { - $builder->limit($rows, $limit_from); + // Re-apply order: WHERE...IN + GROUP BY do not preserve Phase A's row order + if ($sortByQuantityAllLocations) { + $builder->orderBy('MAX(item_quantity_totals.total_quantity)', $order); + } elseif ($sortDefinitionId !== null) { + $this->applyAttributeSort($builder, $definitionInfo, $sortDefinitionId, $order); + } else { + $builder->orderBy($sort, $order); } return $builder->get(); diff --git a/app/Models/Item_taxes.php b/app/Models/Item_taxes.php index 08b8fb845..bfb07b36a 100644 --- a/app/Models/Item_taxes.php +++ b/app/Models/Item_taxes.php @@ -30,6 +30,26 @@ class Item_taxes extends Model return $builder->get()->getResultArray(); } + /** + * @return array item_id => array of taxes for that item + */ + public function getInfoMultiple(array $itemIds): array + { + if (empty($itemIds)) { + return []; + } + + $builder = $this->db->table('items_taxes'); + $builder->whereIn('item_id', $itemIds); + + $taxesByItemId = []; + foreach ($builder->get()->getResultArray() as $tax) { + $taxesByItemId[$tax['item_id']][] = $tax; + } + + return $taxesByItemId; + } + /** * Inserts or updates an item's taxes */ diff --git a/tests/Models/ItemSearchTest.php b/tests/Models/ItemSearchTest.php new file mode 100644 index 000000000..fdf20bd10 --- /dev/null +++ b/tests/Models/ItemSearchTest.php @@ -0,0 +1,468 @@ +call('TestDatabaseBootstrapSeeder'); + } + + protected function setUp(): void + { + parent::setUp(); + + $this->item = model(Item::class); + + // OSPOS's app_config cache can go stale mid-suite and fall back to defaults with + // no 'dateformat' key, so set it directly rather than depending on that cache. + config(OSPOS::class)->settings['dateformat'] = 'm/d/Y'; + config(OSPOS::class)->settings['number_locale'] = 'en_US'; + config(OSPOS::class)->settings['currency_decimals'] = 2; + } + + protected function tearDown(): void + { + parent::tearDown(); + } + + public function testSearchReturnsMatchingItemByName(): void + { + $uniqueName = 'Findable Widget ' . uniqid(); + $this->createSearchableItem([ + 'name' => $uniqueName, + 'cost_price' => 12.50, + 'unit_price' => 24.99, + ]); + + $results = $this->item->search($uniqueName, $this->defaultSearchFilters())->getResult(); + + $this->assertCount(1, $results); + $this->assertEquals($uniqueName, $results[0]->name); + $this->assertEquals(12.50, (float) $results[0]->cost_price); + $this->assertEquals(24.99, (float) $results[0]->unit_price); + } + + public function testSearchExcludesNonMatchingItems(): void + { + $matchingName = 'Matching Gadget ' . uniqid(); + $this->createSearchableItem(['name' => $matchingName]); + $this->createSearchableItem(['name' => 'Unrelated Thing ' . uniqid()]); + + $results = $this->item->search($matchingName, $this->defaultSearchFilters())->getResult(); + + $this->assertCount(1, $results); + $this->assertEquals($matchingName, $results[0]->name); + } + + public function testGetFoundRowsMatchesActualCount(): void + { + $sharedCategory = 'Shared Category ' . uniqid(); + $this->createSearchableItem(['category' => $sharedCategory]); + $this->createSearchableItem(['category' => $sharedCategory]); + $this->createSearchableItem(['category' => $sharedCategory]); + + $filters = $this->defaultSearchFilters(); + + $foundRows = $this->item->get_found_rows($sharedCategory, $filters); + $actualRows = $this->item->search($sharedCategory, $filters)->getResultArray(); + + $this->assertEquals(3, $foundRows); + $this->assertCount($foundRows, $actualRows); + } + + public function testSearchPaginationRowsAndLimitFrom(): void + { + $sharedCategory = 'Paginated Category ' . uniqid(); + $this->createSearchableItem(['name' => 'A Item ' . uniqid(), 'category' => $sharedCategory]); + $this->createSearchableItem(['name' => 'B Item ' . uniqid(), 'category' => $sharedCategory]); + $this->createSearchableItem(['name' => 'C Item ' . uniqid(), 'category' => $sharedCategory]); + + $results = $this->item->search( + $sharedCategory, + $this->defaultSearchFilters(), + 1, + 1, + 'items.name', + 'asc' + )->getResult(); + + $this->assertCount(1, $results); + $this->assertStringStartsWith('B Item', $results[0]->name); + } + + public function testSearchOrderPreservedAfterPhaseBJoin(): void + { + $sharedCategory = 'Ordered Category ' . uniqid(); + $this->createSearchableItem(['name' => 'Alpha Item ' . uniqid(), 'category' => $sharedCategory]); + $this->createSearchableItem(['name' => 'Beta Item ' . uniqid(), 'category' => $sharedCategory]); + $this->createSearchableItem(['name' => 'Gamma Item ' . uniqid(), 'category' => $sharedCategory]); + + $results = $this->item->search( + $sharedCategory, + $this->defaultSearchFilters(), + 0, + 0, + 'items.name', + 'desc' + )->getResult(); + + $names = array_map(static fn ($item) => $item->name, $results); + $sorted = $names; + rsort($sorted); + + $this->assertSame($sorted, $names); + } + + public function testSearchNoMatchesReturnsEmptyResultNotError(): void + { + $results = $this->item->search('no-such-item-' . uniqid(), $this->defaultSearchFilters())->getResult(); + + $this->assertIsArray($results); + $this->assertCount(0, $results); + } + + public function testSearchExcludesDeletedItemsByDefault(): void + { + $deletedName = 'Deleted Item ' . uniqid(); + $this->createSearchableItem(['name' => $deletedName, 'deleted' => 1]); + + $results = $this->item->search($deletedName, $this->defaultSearchFilters(['is_deleted' => false]))->getResult(); + + $this->assertCount(0, $results); + } + + public function testSearchIncludesDeletedWhenFilterSet(): void + { + $deletedName = 'Deleted Item ' . uniqid(); + $this->createSearchableItem(['name' => $deletedName, 'deleted' => 1]); + + $results = $this->item->search($deletedName, $this->defaultSearchFilters(['is_deleted' => true]))->getResult(); + + $this->assertCount(1, $results); + $this->assertEquals($deletedName, $results[0]->name); + } + + public function testSearchStockLocationFilter(): void + { + $locationAName = 'Location A Item ' . uniqid(); + $itemId = $this->createSearchableItem(['name' => $locationAName]); + $this->addItemQuantity($itemId, 1, 10); + + $resultsAtLocation1 = $this->item->search( + $locationAName, + $this->defaultSearchFilters(['stock_location_id' => 1]) + )->getResult(); + + $resultsAtLocation2 = $this->item->search( + $locationAName, + $this->defaultSearchFilters(['stock_location_id' => 2]) + )->getResult(); + + $this->assertCount(1, $resultsAtLocation1); + $this->assertCount(0, $resultsAtLocation2); + } + + public function testSearchTemporaryFilter(): void + { + $tempName = 'Temp Item ' . uniqid(); + $this->createSearchableItem(['name' => $tempName, 'item_type' => ITEM_TEMP]); + + $resultsWhenTemporary = $this->item->search( + $tempName, + $this->defaultSearchFilters(['temporary' => true]) + )->getResult(); + + $resultsWhenNotTemporary = $this->item->search( + $tempName, + $this->defaultSearchFilters(['temporary' => false]) + )->getResult(); + + $this->assertCount(1, $resultsWhenTemporary); + $this->assertCount(0, $resultsWhenNotTemporary); + } + + public function testSearchSortByQuantitySumsAcrossLocationsWithoutMultiplication(): void + { + $itemId = $this->createSearchableItem(['name' => 'Multi Location Item ' . uniqid()]); + + // createSearchableItem already inserts one inventory row; add two more + // inventory transactions so a naive SUM-after-join (which multiplies + // item_quantities rows by the inventory join) would triple-count. + $this->addInventoryRecord($itemId, 1); + $this->addInventoryRecord($itemId, 1); + + $this->addItemQuantity($itemId, 1, 10); + $this->addItemQuantity($itemId, 2, 5); + + $results = $this->item->search( + '', + $this->defaultSearchFilters(), + 0, + 0, + 'quantity', + 'desc' + )->getResult(); + + $match = array_values(array_filter($results, static fn ($r) => (int) $r->item_id === $itemId)); + + $this->assertCount(1, $match); + $this->assertEquals(15, (float) $match[0]->quantity); + } + + public function testSearchByNamedAttributeSyntax(): void + { + $colorDefinitionId = $this->createAttributeDefinition('Color ' . uniqid()); + $sizeDefinitionId = $this->createAttributeDefinition('Size ' . uniqid()); + $blueValue = 'Blue' . uniqid(); + $redValue = 'Red' . uniqid(); + $largeValue = 'Large' . uniqid(); + + $matchingId = $this->createSearchableItem(['name' => 'Named Attr Match ' . uniqid()]); + $this->linkAttributeValue($matchingId, $colorDefinitionId, $blueValue); + $this->linkAttributeValue($matchingId, $sizeDefinitionId, $largeValue); + + $wrongColorId = $this->createSearchableItem(['name' => 'Named Attr WrongColor ' . uniqid()]); + $this->linkAttributeValue($wrongColorId, $colorDefinitionId, $redValue); + $this->linkAttributeValue($wrongColorId, $sizeDefinitionId, $largeValue); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$colorDefinitionId, $sizeDefinitionId], + ]); + + $colorAttrName = $this->getDefinitionName($colorDefinitionId); + $sizeAttrName = $this->getDefinitionName($sizeDefinitionId); + + $results = $this->item->search("{$colorAttrName}:{$blueValue} {$sizeAttrName}:{$largeValue}", $filters)->getResult(); + $ids = array_map(static fn ($item) => (int) $item->item_id, $results); + + $this->assertContains($matchingId, $ids); + $this->assertNotContains($wrongColorId, $ids); + } + + public function testSearchByNamedAttributeSyntaxWithCommaSeparator(): void + { + // parseAttributeSearch() treats a bare comma between name:value pairs as an implicit + // separator (like AND/OR), so "color:blue, size:large" must parse both attributes. + $colorDefinitionId = $this->createAttributeDefinition('Color ' . uniqid()); + $sizeDefinitionId = $this->createAttributeDefinition('Size ' . uniqid()); + $blueValue = 'Blue' . uniqid(); + $largeValue = 'Large' . uniqid(); + + $matchingId = $this->createSearchableItem(['name' => 'Comma Sep Match ' . uniqid()]); + $this->linkAttributeValue($matchingId, $colorDefinitionId, $blueValue); + $this->linkAttributeValue($matchingId, $sizeDefinitionId, $largeValue); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$colorDefinitionId, $sizeDefinitionId], + ]); + + $colorAttrName = $this->getDefinitionName($colorDefinitionId); + $sizeAttrName = $this->getDefinitionName($sizeDefinitionId); + + $results = $this->item->search("{$colorAttrName}:{$blueValue}, {$sizeAttrName}:{$largeValue}", $filters)->getResult(); + $ids = array_map(static fn ($item) => (int) $item->item_id, $results); + + $this->assertContains($matchingId, $ids); + } + + public function testSearchByNamedAttributeCombinedWithFreeText(): void + { + // When search_custom is on, the free-text remainder matches attribute values + // (not item name/category/etc) - see the customAttributeSearch branch of search(). + // An item can only have one attribute_links row per definition_id (attribute_links_uq3), + // so the name:value attribute and the free-text-matched attribute must be different + // definitions. + $colorDefinitionId = $this->createAttributeDefinition('Color ' . uniqid()); + $materialDefinitionId = $this->createAttributeDefinition('Material ' . uniqid()); + $greenValue = 'Green' . uniqid(); + $freeTextValue = 'Cotton' . uniqid(); + + $matchingId = $this->createSearchableItem(['name' => 'Combo Search Widget ' . uniqid()]); + $this->linkAttributeValue($matchingId, $colorDefinitionId, $greenValue); + $this->linkAttributeValue($matchingId, $materialDefinitionId, $freeTextValue); + + $wrongFreeTextId = $this->createSearchableItem(['name' => 'Combo Search Other ' . uniqid()]); + $this->linkAttributeValue($wrongFreeTextId, $colorDefinitionId, $greenValue); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$colorDefinitionId, $materialDefinitionId], + ]); + + $colorAttrName = $this->getDefinitionName($colorDefinitionId); + + $results = $this->item->search("{$colorAttrName}:{$greenValue} {$freeTextValue}", $filters)->getResult(); + $ids = array_map(static fn ($item) => (int) $item->item_id, $results); + + $this->assertContains($matchingId, $ids); + $this->assertNotContains($wrongFreeTextId, $ids); + } + + public function testPlainFreeTextSearchUnaffectedByAttributeParsing(): void + { + // search_custom is off here, so this exercises the plain by-name search path - + // parseAttributeSearch() is never even called in this branch of search(). + $uniqueName = 'Plain Search Widget ' . uniqid(); + $this->createSearchableItem(['name' => $uniqueName]); + + $results = $this->item->search($uniqueName, $this->defaultSearchFilters())->getResult(); + + $this->assertCount(1, $results); + $this->assertEquals($uniqueName, $results[0]->name); + } + + public function testSearchCustomWithoutNamedAttributeSyntaxMatchesAttributeValueAsBefore(): void + { + // No "name:value" syntax present, so parseAttributeSearch() finds no attributes and + // $freeTextSearch falls back to the raw $search - this is the pre-Feature-C behavior + // for search_custom, unaffected by the new named-attribute join. + $definitionId = $this->createAttributeDefinition('Material ' . uniqid()); + $searchValue = 'Cotton' . uniqid(); + + $matchingId = $this->createSearchableItem(['name' => 'Search Custom Widget ' . uniqid()]); + $this->linkAttributeValue($matchingId, $definitionId, $searchValue); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$definitionId], + ]); + + $results = $this->item->search($searchValue, $filters)->getResult(); + $ids = array_map(static fn ($item) => (int) $item->item_id, $results); + + $this->assertContains($matchingId, $ids); + } + + public function testSearchByNamedAttributeMatchesDecimalAttribute(): void + { + $priceDefinitionId = $this->createAttributeDefinition('Price ' . uniqid(), DECIMAL); + + $matchingId = $this->createSearchableItem(['name' => 'Decimal Attr Match ' . uniqid()]); + $this->linkTypedAttributeValue($matchingId, $priceDefinitionId, '19.99', DECIMAL); + + $otherId = $this->createSearchableItem(['name' => 'Decimal Attr Other ' . uniqid()]); + $this->linkTypedAttributeValue($otherId, $priceDefinitionId, '5.00', DECIMAL); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$priceDefinitionId], + ]); + + $priceAttrName = $this->getDefinitionName($priceDefinitionId); + + $results = $this->item->search("{$priceAttrName}:19.99", $filters)->getResult(); + $ids = array_map(static fn ($item) => (int) $item->item_id, $results); + + $this->assertContains($matchingId, $ids); + $this->assertNotContains($otherId, $ids); + } + + public function testSearchByNamedAttributeMatchesDateAttribute(): void + { + config(OSPOS::class)->settings['dateformat'] = 'm/d/Y'; + + $expiryDefinitionId = $this->createAttributeDefinition('Expiry ' . uniqid(), DATE); + + $matchingId = $this->createSearchableItem(['name' => 'Date Attr Match ' . uniqid()]); + $this->linkTypedAttributeValue($matchingId, $expiryDefinitionId, '01/15/2027', DATE); + + $otherId = $this->createSearchableItem(['name' => 'Date Attr Other ' . uniqid()]); + $this->linkTypedAttributeValue($otherId, $expiryDefinitionId, '02/20/2027', DATE); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$expiryDefinitionId], + ]); + + $expiryAttrName = $this->getDefinitionName($expiryDefinitionId); + + $results = $this->item->search("{$expiryAttrName}:01/15/2027", $filters)->getResult(); + $ids = array_map(static fn ($item) => (int) $item->item_id, $results); + + $this->assertContains($matchingId, $ids); + $this->assertNotContains($otherId, $ids); + } + + public function testSearchByNamedAttributeDecimalRespectsLocaleDecimalSeparator(): void + { + $config = config(OSPOS::class); + $originalLocale = $config->settings['number_locale']; + $originalDecimals = $config->settings['currency_decimals']; + $config->settings['number_locale'] = 'de_DE'; + $config->settings['currency_decimals'] = 2; + + try { + $priceDefinitionId = $this->createAttributeDefinition('LocalePrice ' . uniqid(), DECIMAL); + + $matchingId = $this->createSearchableItem(['name' => 'Locale Decimal Match ' . uniqid()]); + $this->linkTypedAttributeValue($matchingId, $priceDefinitionId, '19.99', DECIMAL); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$priceDefinitionId], + ]); + + $priceAttrName = $this->getDefinitionName($priceDefinitionId); + + // Comma decimal separator, matching the de_DE locale, should parse and match. + $commaResults = $this->item->search("{$priceAttrName}:19,99", $filters)->getResult(); + $commaIds = array_map(static fn ($item) => (int) $item->item_id, $commaResults); + $this->assertContains($matchingId, $commaIds); + } finally { + $config->settings['number_locale'] = $originalLocale; + $config->settings['currency_decimals'] = $originalDecimals; + } + } + + public function testSearchByUnknownNamedAttributeDoesNotReturnAllItems(): void + { + $definitionId = $this->createAttributeDefinition('Known ' . uniqid()); + $knownAttrName = $this->getDefinitionName($definitionId); + + $this->createSearchableItem(['name' => 'Unrelated Item ' . uniqid()]); + $this->createSearchableItem(['name' => 'Another Unrelated Item ' . uniqid()]); + + $filters = $this->defaultSearchFilters([ + 'search_custom' => true, + 'definition_ids' => [$definitionId], + ]); + + $results = $this->item->search("{$knownAttrName}:nomatch nosuchattr:{$knownAttrName}", $filters)->getResult(); + + $this->assertCount(0, $results); + } + + private function getDefinitionName(int $definitionId): string + { + return db_connect()->table('attribute_definitions') + ->select('definition_name') + ->where('definition_id', $definitionId) + ->get() + ->getRow() + ->definition_name; + } +} diff --git a/tests/Models/ItemTaxesMultipleTest.php b/tests/Models/ItemTaxesMultipleTest.php new file mode 100644 index 000000000..e820d005f --- /dev/null +++ b/tests/Models/ItemTaxesMultipleTest.php @@ -0,0 +1,79 @@ +call('TestDatabaseBootstrapSeeder'); + } + + protected function setUp(): void + { + parent::setUp(); + + $this->item_taxes = model(Item_taxes::class); + } + + public function testGetInfoMultipleReturnsTaxesGroupedByItemId(): void + { + $itemOneId = $this->createSearchableItem(); + $itemTwoId = $this->createSearchableItem(); + + $itemOneTaxes = [['name' => 'VAT', 'percent' => 20]]; + $itemTwoTaxes = [['name' => 'GST', 'percent' => 10]]; + + $this->item_taxes->save_value($itemOneTaxes, $itemOneId); + $this->item_taxes->save_value($itemTwoTaxes, $itemTwoId); + + $result = $this->item_taxes->getInfoMultiple([$itemOneId, $itemTwoId]); + + $this->assertArrayHasKey($itemOneId, $result); + $this->assertArrayHasKey($itemTwoId, $result); + $this->assertCount(1, $result[$itemOneId]); + $this->assertCount(1, $result[$itemTwoId]); + $this->assertEquals('VAT', $result[$itemOneId][0]['name']); + $this->assertEquals('GST', $result[$itemTwoId][0]['name']); + } + + public function testGetInfoMultipleItemWithNoTaxesOmittedFromResult(): void + { + $itemWithTaxesId = $this->createSearchableItem(); + $itemWithoutTaxesId = $this->createSearchableItem(); + + $taxes = [['name' => 'VAT', 'percent' => 20]]; + $this->item_taxes->save_value($taxes, $itemWithTaxesId); + + $result = $this->item_taxes->getInfoMultiple([$itemWithTaxesId, $itemWithoutTaxesId]); + + $this->assertArrayHasKey($itemWithTaxesId, $result); + $this->assertArrayNotHasKey($itemWithoutTaxesId, $result); + } + + public function testGetInfoMultipleEmptyItemIdsReturnsEmptyArray(): void + { + $result = $this->item_taxes->getInfoMultiple([]); + + $this->assertSame([], $result); + } +} diff --git a/tests/Support/ItemSearchFixtureTrait.php b/tests/Support/ItemSearchFixtureTrait.php new file mode 100644 index 000000000..b8a5e6b33 --- /dev/null +++ b/tests/Support/ItemSearchFixtureTrait.php @@ -0,0 +1,133 @@ + null, + 'name' => 'Searchable Item ' . uniqid(), + 'category' => 'Test Category', + 'cost_price' => 1.00, + 'unit_price' => 5.00, + 'reorder_level' => 0, + 'item_number' => 'SEARCH-' . uniqid(), + 'allow_alt_description' => 0, + 'is_serialized' => 0, + 'item_type' => ITEM, + 'deleted' => 0, + ], $overrides); + + $itemModel = model(Item::class); + $itemModel->save_value($itemData); + + $itemId = (int) $itemData['item_id']; + + $this->addInventoryRecord($itemId); + + return $itemId; + } + + protected function addInventoryRecord(int $itemId, int $locationId = 1): void + { + $inventoryModel = model(Inventory::class); + $inventoryModel->insert([ + 'trans_items' => $itemId, + 'trans_user' => 1, + 'trans_comment' => 'Test fixture', + 'trans_inventory' => 0, + 'trans_location' => $locationId, + ]); + } + + protected function ensureStockLocation(int $locationId): void + { + $db = db_connect(); + $exists = $db->table('stock_locations')->where('location_id', $locationId)->get()->getRow(); + if ($exists === null) { + $db->query( + 'INSERT INTO ' . $db->prefixTable('stock_locations') . ' (location_id, location_name, deleted) VALUES (?, ?, 0)', + [$locationId, 'Test Location ' . $locationId] + ); + } + } + + protected function addItemQuantity(int $itemId, int $locationId, float $quantity): void + { + $this->ensureStockLocation($locationId); + + $itemQuantityModel = model(Item_quantity::class); + $itemQuantityModel->save_value( + [ + 'item_id' => $itemId, + 'location_id' => $locationId, + 'quantity' => $quantity, + ], + $itemId, + $locationId + ); + } + + protected function defaultSearchFilters(array $overrides = []): array + { + return array_merge([ + 'start_date' => '2000-01-01', + 'end_date' => '2100-01-01', + 'stock_location_id' => -1, + 'empty_upc' => false, + 'low_inventory' => false, + 'is_serialized' => false, + 'no_description' => false, + 'search_custom' => false, + 'is_deleted' => false, + 'temporary' => false, + 'definition_ids' => [], + ], $overrides); + } + + protected function createAttributeDefinition(string $name, string $type = TEXT, int $flags = 1): int + { + $db = db_connect(); + $db->table('attribute_definitions')->insert([ + 'definition_name' => $name, + 'definition_type' => $type, + 'definition_flags' => $flags, + 'deleted' => 0, + ]); + + return (int) $db->insertID(); + } + + protected function linkAttributeValue(int $itemId, int $definitionId, string $value): void + { + $db = db_connect(); + + // attribute_value is unique: reuse the existing attribute_id if this value already exists + $existing = $db->table('attribute_values')->select('attribute_id')->where('attribute_value', $value)->get()->getRow(); + if ($existing !== null) { + $attributeId = (int) $existing->attribute_id; + } else { + $db->table('attribute_values')->insert(['attribute_value' => $value]); + $attributeId = (int) $db->insertID(); + } + + $db->table('attribute_links')->insert([ + 'definition_id' => $definitionId, + 'attribute_id' => $attributeId, + 'item_id' => $itemId, + ]); + } + + protected function linkTypedAttributeValue(int $itemId, int $definitionId, string $value, string $definitionType): void + { + $attributeModel = model(Attribute::class); + $attributeModel->saveAttributeValue($value, $definitionId, $itemId, false, $definitionType); + } +} diff --git a/tests/helpers/GetItemDataRowTest.php b/tests/helpers/GetItemDataRowTest.php new file mode 100644 index 000000000..89ae14729 --- /dev/null +++ b/tests/helpers/GetItemDataRowTest.php @@ -0,0 +1,107 @@ +injectSettings(); + } + + protected function injectSettings(array $overrides = []): void + { + $config = new OSPOS(); + $config->settings = array_merge([ + 'multi_pack_enabled' => 0, + 'use_destination_based_tax' => 0, + 'number_locale' => 'en_US', + 'currency_decimals' => 2, + 'quantity_decimals' => 0, + 'thousands_separator' => 1, + 'currency_symbol' => '$', + ], $overrides); + + Factories::injectMock('config', OSPOS::class, $config); + } + + protected function makeItem(array $overrides = []): stdClass + { + $item = new stdClass(); + + $defaults = [ + 'item_id' => 1, + 'item_number' => 'ITEM-001', + 'name' => 'Test Item', + 'category' => 'Test Category', + 'company_name' => 'Test Supplier', + 'cost_price' => 10.00, + 'unit_price' => 20.00, + 'quantity' => 5, + 'pic_filename' => null, + 'pack_name' => null, + 'tax_category_id' => null, + ]; + + foreach (array_merge($defaults, $overrides) as $key => $value) { + $item->$key = $value; + } + + return $item; + } + + public function testTaxPercentsPulledFromPassedMapNotQueried(): void + { + $item = $this->makeItem(['item_id' => 42]); + + $columns = getItemDataRow($item, [], [42 => '20.00%']); + + $this->assertEquals('20.00%', $columns['tax_percents']); + } + + public function testTaxPercentsDefaultsToDashWhenItemIdMissingFromMap(): void + { + $item = $this->makeItem(['item_id' => 99]); + + $columns = getItemDataRow($item, [], []); + + $this->assertEquals('-', $columns['tax_percents']); + } + + public function testDefinitionNamesPassedThroughToExpandAttributeValues(): void + { + $item = $this->makeItem(['item_id' => 7]); + $item->attribute_values = '3_Red'; + $item->attribute_dtvalues = ''; + $item->attribute_dvalues = ''; + + $definitionNames = [ + 3 => ['name' => 'Color', 'type' => TEXT], + ]; + + $columns = getItemDataRow($item, $definitionNames, []); + + $this->assertArrayHasKey(3, $columns); + $this->assertEquals('Red', $columns[3]); + } + + public function testPackNameAppendedToItemName(): void + { + $this->injectSettings(['multi_pack_enabled' => 1]); + + $item = $this->makeItem(['name' => 'Base Item', 'pack_name' => 'Pack of 6']); + + $columns = getItemDataRow($item, [], []); + + $this->assertEquals('Base Item' . NAME_SEPARATOR . 'Pack of 6', $columns['name']); + } +}