mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-10-03 08:05:13 -04:00
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>
37 lines
3.3 KiB
PHP
37 lines
3.3 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' => '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' => 'ปรับปรุงแอตทริบิวต์',
|
|
];
|