Files
opensourcepos/app/Language/ckb/Attributes.php
T
objecttothisandOllama 1b8ee2e3c1 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>
2026-10-02 14:56:20 +04:00

37 lines
3.0 KiB
PHP

<?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' => 'فرۆشتن',
'show_in_search' => 'لە گەڕاندا نیشانی بدە',
'show_in_search_visibility' => 'گەڕان',
'update' => 'تایبەتمەندی نوێ بکەرەوە',
];