mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-10-29 03:28:53 -04:00
* 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>
126 lines
10 KiB
PHP
126 lines
10 KiB
PHP
<?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_import_invalid_location' => '',
|
|
'csv_import_nodata_wrongformat' => 'پرونده سیاسوی آپلود شده داده ای ندارد یا به طور نادرست قالب بندی شده است.',
|
|
'csv_import_partially_failed' => 'در خط (ها){0} شکست واردات کالا وجود دارد:{1}. هیچ سطر وارد نشده است.',
|
|
'csv_import_success' => 'وارد کردن سیاسوی مورد موفقیت آمیز است.',
|
|
'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' => 'وارد کردن مورد از سیاسوی',
|
|
'info_provided_by' => 'اطلاعات ارائه شده توسط',
|
|
'inventory' => 'فهرست',
|
|
'inventory_CSV_import_quantity' => 'مقدار وارد شده از سیاسوی',
|
|
'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' => 'مالیات بر فروش 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' => 'مالیات 1',
|
|
'tax_2' => 'مالیات 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' => 'استفاده از فهرست موجودی',
|
|
];
|