Files
opensourcepos/app/Language/ckb/Items.php
T
jekkosandobjecttothis 625bb3536a fix(taxes): reject negative tax rates and percentages (#4730)
* fix(taxes): reject negative tax rates and percentages

Reject negative tax values across all tax entry points so they can
never be persisted and produce inverted sales totals:

- Items::postSave / postBulkUpdate: validate tax_percents.* as
  nonNegativeDecimal (was unvalidated, persisted raw).
- Items::save_tax_data (CSV import): fail the row on a negative
  Tax N Percent instead of silently dropping the tax.
- Taxes::postSave: reject negative tax_rate before saving.
- Config::postSaveTax: reject negative default tax rates.

Adds non-negative regression tests for Items, Taxes and Config, plus
boundary tests proving a zero tax rate/percent is still accepted. New
language strings for the rejection messages.

* test: adopt test{Method}_{Purpose} naming convention for new tests

Align the negative-tax test method names with the convention established
in ConfigTest (testPostSave_RejectsNegativeTaxPercent, etc.), per review.

* fix(config): add language entries to all locales, extract TaxFixtureTrait

* fix(i18n): place tax_rate_non_negative in alphabetical order

Move the new tax_rate_non_negative entry to its correct alphabetical
position (after tax_rate_error_adding_updating) in all locale files.

---------

Co-authored-by: objecttothis <17935339+objecttothis@users.noreply.github.com>
2026-10-09 08:58:00 +02:00

126 lines
8.1 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 [
'add_minus' => 'زیادکردن یان کەمکردنی جەرد.',
'allow_alt_description' => 'ڕێگە بدە بە دەربارەی جێگرەوە',
'amount_entry' => 'داخڵکردنی بڕی پارە',
'bulk_edit' => 'دەستکاریکردنی بە کۆمەڵ',
'buy_price_required' => 'نرخی کڕین خانەیەکی پێویستە.',
'cannot_be_deleted' => 'نەتوانرا بابەتی هەڵبژێردراو بسڕدرێتەوە، یەکێک یان زیاتر لە بابەتە هەڵبژێردراوەکان فرۆشتنیان هەیە.',
'cannot_find_item' => 'ئایتم نەدۆزرایەوە.',
'categories' => '',
'category' => 'پۆلێن',
'category_new' => '',
'category_required' => 'پۆل خانەیەکی پێویستە.',
'change_all_to_allow_alt_desc' => 'ڕێگە بە وەسفێکی جێگرەوە بدە بۆ هەمووان.',
'change_all_to_not_allow_allow_desc' => 'ڕێگە مەدە بە وەسفی جێگرەوە بۆ هەمووان.',
'change_all_to_serialized' => 'هەمووی بگۆڕە بۆ بەزنجیرەکراو',
'change_all_to_unserialized' => 'هەمووی بگۆڕە بۆ بەزنجیرەنەکراوە',
'change_image' => 'وێنەکە بگۆڕە',
'confirm_bulk_edit' => 'ئایا دڵنیای کە دەتەوێت دەستکاری ئایتم(ەکان)ی هەڵبژێردراو بکەیت؟',
'confirm_bulk_edit_wipe_taxes' => 'هەموو زانیارییەکانی باجی ئایتم شوێنیان دەگیرێتەوە.',
'confirm_delete' => 'ئایا دڵنیای کە دەتەوێت ئایتم(ەکان)ی هەڵبژێردراو بسڕیتەوە؟',
'confirm_restore' => 'ئایا دڵنیای کە دەتەوێت ئایتم(ەکان)ی هەڵبژێردراو بگەڕێنیتەوە؟',
'cost_price' => 'نرخی جوملە',
'cost_price_number' => 'نرخی جوملە دەبێت ژمارە بێت.',
'cost_price_required' => 'نرخی جوملە خانەیەکی پێویستە.',
'count' => 'جەرد نوێ بکەوە',
'csv_import_failed' => 'هاوردەکردنی CSV سەرکەوتوو نەبوو',
'csv_import_invalid_location' => '',
'csv_import_nodata_wrongformat' => 'پەڕگەی CSV بارکراو هیچ داتایەکی نییە یان بە هەڵە فۆرمات کراوە.',
'csv_import_partially_failed' => '{0} شکستی هاوردەکردنی بابەتی لەسەر هێڵەکان هەبوو: {1}. هیچ ڕیزێک هاوردە نەکرا.',
'csv_import_success' => 'بابەتی هاوردەکردنی CSV سەرکەوتوو بوو.',
'current_quantity' => 'چەندێتی ئێستە',
'default_pack_name' => 'هەریەک',
'description' => 'دەربارە',
'details_count' => 'وردەکاری ژمارەی جەرد',
'do_nothing' => 'هیچ مەکە',
'edit' => '',
'edit_fields_you_want_to_update' => 'دەستکاری خانەی دڵخوازت بکە بۆ ئایتمی هەڵبژێردراو.',
'edit_multiple_items' => 'دەسکاریکردنی چەندین ئایتم',
'empty_upc_items' => 'ئایتمی باڕکۆدی بەتاڵ',
'error_adding_updating' => 'لە زیادکردنی/نوێکردنەوەی ئایتم هەڵە هەیە',
'error_updating_multiple' => 'لە نوێکردنەوەی ئایتم هەڵە هەیە',
'generate_barcodes' => 'دروستکردنی بارکۆدەکان',
'hsn_code' => 'ناونانی سیستەمی هاوسەنگکراو',
'image' => 'وێنە',
'import_items_csv' => 'هاوردەکردنی ئایتم لە CSV',
'info_provided_by' => 'زانیاری دراوە لەلایەن',
'inventory' => 'جەرد',
'inventory_CSV_import_quantity' => 'چەندێتی هاوردەکراو لە CSV',
'inventory_comments' => 'کۆمێنتەکان',
'inventory_data_tracking' => 'بەدواداچوون بۆ داتاکانی جەرد',
'inventory_date' => 'بەرورار',
'inventory_employee' => 'فەرمانبەر',
'inventory_in_out_quantity' => 'چەندێتی هاتوو/ڕۆیشتوو',
'inventory_remarks' => 'تێبینییەکان',
'is_deleted' => 'سڕاوەتەوە',
'is_printed' => '',
'is_serialized' => 'ئایتم ژمارەی زنجیرەیی هەیە',
'item' => 'ئایتم',
'item_id' => '',
'item_number' => 'باڕکۆد',
'item_number_duplicate' => 'ژمارەی ئایتم پێشتر لە داتابەیسدا ئامادەبووە.',
'item_number_invalid' => 'ژمارەی ئایتم پیتی ڕێگەپێنەدراوی تێدایە.',
'kit' => 'کیت',
'location' => 'شوێن',
'low_inventory_items' => 'ئایتمەکانی لە کۆگادا نەماون',
'low_sell_item' => 'ئایتمی فرۆش کەم',
'manually_editing_of_quantity' => 'دەستکاریکردنی دەستی چەندێتی',
'markup' => '',
'name' => 'ناوی ئایتم',
'name_required' => 'ناوی ئایتم خانەیەکی پێویستە.',
'new' => 'ئایتمی نوێ',
'no_description_items' => 'ئایتمەکانی دەربارە(وەسف)یان نییە',
'no_items_to_display' => 'هیچ ئایتمێک نییە بۆ نیشاندان.',
'none' => 'هیچیان',
'none_selected' => 'تۆ هیچ ئایتمێکت هەڵنەبژاردووە بۆ دەستکاریکردن',
'nonstock' => 'لە کۆگادانەنراو',
'number_information' => 'ژمارەی ئایتم',
'number_required' => 'خانەی باڕکۆد پێویستە.',
'one_or_multiple' => 'ئایتم(ەکان)',
'pack_name' => 'ناوی پاکەت',
'qty_per_pack' => 'چەندێتی(ژمارە-بڕ) بۆ هەر پاکەتێک',
'quantity' => 'بڕ',
'quantity_number' => 'چەندێتی دەبێت ژمارە بێت.',
'quantity_required' => 'چەندێتی خانەیەکی پێویستە.',
'receiving_quantity' => 'وەرگرتنی چەندێتی',
'remove_image' => 'لابردنی وێنە',
'reorder_level' => 'ئاست ڕێکخستنەوە',
'reorder_level_number' => 'ئاست ڕێکخستنەوە دەبێت ژمارە بێت.',
'reorder_level_required' => 'ئاست ڕێکخستنەوە خانەیەکی پێویستە.',
'retrive_item_info' => 'گەڕاندنەوەی زانیاری ئایتم',
'sales_tax_1' => 'باجی فرۆشتن',
'sales_tax_2' => 'باجی فرۆشتن ٢',
'search_attributes' => 'تایبەتمەندی گەڕان',
'select_image' => 'وێنە هەڵبژێرە',
'serialized_items' => 'ئایتمە بەزنجیرەکراوەکان',
'standard' => 'ستاندارد',
'stock' => 'کۆگا',
'stock_location' => 'شوێنی کۆگا',
'stock_type' => 'جۆری کۆگا',
'successful_adding' => 'بەسەرکەوتوویی ئایتمت زیادکردوە',
'successful_bulk_edit' => 'بەسەرکەوتوویی ئایتم(ەکان)ی هەڵبژێردراوت نوێ کردەوە',
'successful_deleted' => 'بەسەرکەوتووی سڕیتەوە',
'successful_updating' => 'بەسەرکەوتووی ئایتمت نوێ کردەوە',
'supplier' => 'دابینکار',
'tax_1' => 'باج ١',
'tax_2' => 'باج ٢',
'tax_3' => '',
'tax_category' => 'پۆلێنی باج',
'tax_name_invalid' => 'ناوی باج پیتی ڕێگە پێنەدراوی تێدایە.',
'tax_percent' => '',
'tax_percent_number' => 'ڕێژەی سەدی باج دەبێت بەهایەکی ژمارەیی بێت',
'tax_percent_non_negative' => '',
'tax_percent_required' => 'ڕێژەی سەدی باج خانەیەکی پێویستە.',
'tax_percents' => 'ڕێژەی سەدی(یەکان)ی باج',
'temp' => 'کاتیی',
'type' => 'جۆری ئایتم',
'unit_price' => 'نرخی وردە فرۆشی',
'unit_price_number' => 'نرخی یەکە دەبێت ژمارە بێت.',
'unit_price_required' => 'نرخی تاکفرۆشی خانەیەکی پێویستە.',
'upc_database' => 'داتابەیسی باڕکۆد',
'update' => 'نوێکردنەوەی ئایتم',
'use_inventory_menu' => 'لیستەی جەرد بەکاربهێنە',
];