Files
opensourcepos/app/Language/az/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
2.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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',
'show_in_search' => 'Axtarışda göstər',
'show_in_search_visibility' => 'Axtarış',
'update' => 'Atributları yenilə',
];