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 <ollama@steganos.dev>
This commit is contained in:
objecttothisandOllama authored and GitHub committed 2026-10-02 14:56:20 +04:00
1 parent 9e06a231a7
commit 1b8ee2e3c1
57 files changed
+2765 -1517

No files matched your search

+1 -1
View File
@@ -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`.
+10 -10
View File
@@ -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);
}
+77 -17
View File
@@ -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);
+11 -1
View File
@@ -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;
}
/**
+37 -33
View File
@@ -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 .= '<a class="rollover" href="' . base_url(implode('/', array_map('rawurlencode', explode('/', $image_path)))) . '"><img alt="Image thumbnail" src="' . site_url('items/PicThumb/' . rawurlencode(pathinfo($images[0], PATHINFO_BASENAME))) . '"></a>';
$imagePath = ltrim($images[0], './');
$image .= '<a class="rollover" href="' . base_url(implode('/', array_map('rawurlencode', explode('/', $imagePath)))) . '"><img alt="Image thumbnail" src="' . site_url('items/PicThumb/' . rawurlencode(pathinfo($images[0], PATHINFO_BASENAME))) . '"></a>';
}
}
@@ -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
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "البيع",
"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' => 'تحديث الميزات',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "البيع",
"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' => 'تحديث الميزات',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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ə',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "",
"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' => '',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "فرۆشتن",
"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' => 'تایبەتمەندی نوێ بکەرەوە',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "",
"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' => '',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "",
"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' => '',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "",
"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' => '',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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 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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "حراجی",
"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' => 'به روز کردن ویژگی',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "מכירות",
"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' => 'עדכן מאפיין',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "",
"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' => '',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "",
"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' => '',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "",
"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' => '',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"attribute_value_invalid_chars" => "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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "Продажи",
"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' => 'Обновить атрибут',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+33 -31
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"update" => "Sasisha Sifa",
];
'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',
];
+33 -31
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"update" => "Sasisha Sifa",
];
'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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "การขาย",
"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' => 'ปรับปรุงแอตทริบิวต์',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "Продажі",
"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' => 'Оновити атрибут',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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",
"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',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "销售",
"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' => '更新属性',
];
+32 -30
View File
@@ -1,34 +1,36 @@
<?php
return [
"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" => "銷售",
"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' => '更新屬性',
];
+2 -1
View File
@@ -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);
+378 -102
View File
@@ -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<int, array{name: string, type: string}> $definitionInfo definition_id => info, from getDefinitionsByFlags(..., true)
* @param array<string, string[]> $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<int, array{name: string, type: string}> $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();
+20
View File
@@ -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
*/
+468
View File
@@ -0,0 +1,468 @@
<?php
namespace Tests\Models;
use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;
use App\Models\Item;
use Config\Database;
use Config\OSPOS;
use Tests\Support\ItemSearchFixtureTrait;
class ItemSearchTest extends CIUnitTestCase
{
use DatabaseTestTrait;
use ItemSearchFixtureTrait;
protected $migrate = true;
protected $migrateOnce = true;
protected $seed = '';
protected $seedOnce = true;
protected $refresh = true;
protected $namespace = null;
protected $item;
public static function setUpBeforeClass(): void
{
$seeder = Database::seeder('tests');
$seeder->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;
}
}
+79
View File
@@ -0,0 +1,79 @@
<?php
namespace Tests\Models;
use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;
use App\Models\Item_taxes;
use Config\Database;
use Tests\Support\ItemSearchFixtureTrait;
class ItemTaxesMultipleTest extends CIUnitTestCase
{
use DatabaseTestTrait;
use ItemSearchFixtureTrait;
protected $migrate = true;
protected $migrateOnce = true;
protected $seed = '';
protected $seedOnce = true;
protected $refresh = true;
protected $namespace = null;
protected $item_taxes;
public static function setUpBeforeClass(): void
{
$seeder = Database::seeder('tests');
$seeder->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);
}
}
+133
View File
@@ -0,0 +1,133 @@
<?php
namespace Tests\Support;
use App\Models\Attribute;
use App\Models\Inventory;
use App\Models\Item;
use App\Models\Item_quantity;
trait ItemSearchFixtureTrait
{
protected function createSearchableItem(array $overrides = []): int
{
$itemData = array_merge([
'item_id' => 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);
}
}
+107
View File
@@ -0,0 +1,107 @@
<?php
namespace Tests\Helpers;
use CodeIgniter\Config\Factories;
use CodeIgniter\Test\CIUnitTestCase;
use Config\OSPOS;
use stdClass;
class GetItemDataRowTest extends CIUnitTestCase
{
protected function setUp(): void
{
parent::setUp();
helper('tabular');
$this->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']);
}
}