Files
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.0 KiB
PHP

<?php
return [
'add_minus' => 'Mennyiség hozzáadása/elvétele',
'allow_alt_description' => 'Alternativ leirás eng.',
'amount_entry' => '',
'bulk_edit' => 'Tömeges módosítás',
'buy_price_required' => 'Vételár kötelező mező',
'cannot_be_deleted' => 'Nem törölhető a kiválasztott termék, mert van folyamatban lévő eladás!',
'cannot_find_item' => 'Nem található információ a termékről',
'categories' => '',
'category' => 'Kategória',
'category_new' => '',
'category_required' => 'Kategória kötelező mező',
'change_all_to_allow_alt_desc' => 'Alternativ leirás eng. mindenhol',
'change_all_to_not_allow_allow_desc' => 'Alternativ leirás tiltása',
'change_all_to_serialized' => 'Change All To Serialized',
'change_all_to_unserialized' => 'Change All To Unserialized',
'change_image' => 'Kép cseréje',
'confirm_bulk_edit' => 'Biztosan módosítani kívánja a kiválasztott termékeket?',
'confirm_bulk_edit_wipe_taxes' => 'Minden termék adó információja cserélve lesz!',
'confirm_delete' => 'Biztosan törölni kívánja a kijelölt termékeket?',
'confirm_restore' => '',
'cost_price' => 'Beker. Ár',
'cost_price_number' => 'Bekerülési árnak számnak kell lennie',
'cost_price_required' => 'Bekerülési ár kötelező mező',
'count' => 'Raktárkészlet módosítása',
'csv_import_failed' => 'CSV import sikertelen',
'csv_import_invalid_location' => '',
'csv_import_nodata_wrongformat' => 'A feltöltött fájlban nincs adat, vagy rossz formátum.',
'csv_import_partially_failed' => 'Most Items imported. But some were not, here is the list',
'csv_import_success' => 'Import of Items successful',
'current_quantity' => 'Jelenlegi mennyiség',
'default_pack_name' => '',
'description' => 'Leírás',
'details_count' => 'Raktárkészlet információk',
'do_nothing' => 'Ne csináljon semmit',
'edit' => '',
'edit_fields_you_want_to_update' => 'Edit the fields you want to edit for ALL selected items',
'edit_multiple_items' => 'Editing Multiple Items',
'empty_upc_items' => 'Üres UPC term.',
'error_adding_updating' => 'Termék módositása/hozzáadása sikertelen.',
'error_updating_multiple' => 'Termék módositás sikertelen',
'generate_barcodes' => 'Vonalkód generálás',
'hsn_code' => '',
'image' => 'Avatar',
'import_items_csv' => 'Termékek importálása CSVből',
'info_provided_by' => 'Info provided by',
'inventory' => 'Raktárkészlet',
'inventory_CSV_import_quantity' => '',
'inventory_comments' => 'Megjegyzés',
'inventory_data_tracking' => '',
'inventory_date' => '',
'inventory_employee' => '',
'inventory_in_out_quantity' => '',
'inventory_remarks' => '',
'is_deleted' => 'Törölve',
'is_printed' => '',
'is_serialized' => 'Terméknek van sorozatszáma',
'item' => 'Termék információ',
'item_id' => '',
'item_number' => 'UPC/EAN/ISBN',
'item_number_duplicate' => 'A termék száma már szerepel az adatbázisban',
'item_number_invalid' => 'A termék száma nem megengedett karaktereket tartalmaz.',
'kit' => '',
'location' => 'Helyszín',
'low_inventory_items' => 'Kifogyott term.',
'low_sell_item' => '',
'manually_editing_of_quantity' => 'Mennyiség módosítása manuálisan',
'markup' => '',
'name' => 'Terméknév',
'name_required' => 'Terméknév kötelező mező',
'new' => 'Új termék',
'no_description_items' => 'Leirás nélk.',
'no_items_to_display' => 'Nincsenek megjeleníthető termékek',
'none' => 'Egysem',
'none_selected' => 'Nem választott ki terméket a módosításhoz',
'nonstock' => '',
'number_information' => 'Termék száma',
'number_required' => 'UPC/EAN/ISBN kötelező mező',
'one_or_multiple' => 'termék(ek)',
'pack_name' => '',
'qty_per_pack' => '',
'quantity' => 'Mennyiség',
'quantity_number' => 'A mennyiségnek számnak kell lennie',
'quantity_required' => 'A mennyiség kötelező mező',
'receiving_quantity' => 'Egységcsom mennyiség',
'remove_image' => 'Kép eltávolítása',
'reorder_level' => 'Újrarend szint',
'reorder_level_number' => 'Újrarendelési szintnek számnak kell lennie.',
'reorder_level_required' => 'Újrarendelési mező kötelező',
'retrive_item_info' => 'Retrive Item Info',
'sales_tax_1' => 'Értékesítési adó 1',
'sales_tax_2' => 'Értékesítési adó 2',
'search_attributes' => 'Egyedi mezők',
'select_image' => 'Kép kiválasztása',
'serialized_items' => 'Szerializált termékek',
'standard' => '',
'stock' => '',
'stock_location' => 'Raktárhely',
'stock_type' => '',
'successful_adding' => 'Sikeresen hozzáadott egy terméket',
'successful_bulk_edit' => 'Sikeresen módosította a kiválasztott termékeket',
'successful_deleted' => 'Sikeres törlés',
'successful_updating' => 'Sikeresen módosította a terméket',
'supplier' => 'Beszállító',
'tax_1' => 'Adó 1',
'tax_2' => 'Adó 2',
'tax_3' => '',
'tax_category' => '',
'tax_name_invalid' => 'Az adó neve nem megengedett karaktereket tartalmaz.',
'tax_percent' => 'Adó %',
'tax_percent_number' => '',
'tax_percent_non_negative' => '',
'tax_percent_required' => 'Adó % kötelező mező',
'tax_percents' => 'Adó százalék(ok)',
'temp' => '',
'type' => '',
'unit_price' => 'Kisker. Ár',
'unit_price_number' => 'Egységárnak számnak kell lennie',
'unit_price_required' => 'Kiskereskedelmi ár kötelező mező',
'upc_database' => 'UPC adatbázis',
'update' => 'Termék módosítás',
'use_inventory_menu' => 'Készl. menü haszn.',
];