diff --git a/app/Config/Validation/OSPOSRules.php b/app/Config/Validation/OSPOSRules.php index eb965ab53..49be9f367 100644 --- a/app/Config/Validation/OSPOSRules.php +++ b/app/Config/Validation/OSPOSRules.php @@ -135,4 +135,19 @@ class OSPOSRules { return parse_decimals($candidate) !== false; } + + /** + * Validates that a locale-aware decimal value is non-negative (>= 0). + * + * @param string $candidate + * @param string|null $error + * @return bool + * @noinspection PhpUnused + */ + public function nonNegativeDecimal(string $candidate, ?string &$error = null): bool + { + $value = parse_decimals($candidate); + + return $value !== false && $value >= 0; + } } diff --git a/app/Controllers/Sales.php b/app/Controllers/Sales.php index c618a82e0..e90e82d07 100644 --- a/app/Controllers/Sales.php +++ b/app/Controllers/Sales.php @@ -582,12 +582,21 @@ class Sales extends Secure_Controller $data = []; $rules = [ - 'price' => 'trim|required|decimal_locale', + 'price' => 'trim|required|decimal_locale|nonNegativeDecimal', 'quantity' => 'trim|required|decimal_locale', - 'discount' => 'trim|permit_empty|decimal_locale', + 'discount' => 'trim|permit_empty|decimal_locale|nonNegativeDecimal', ]; - if ($this->validate($rules)) { + $messages = [ + 'price' => [ + 'nonNegativeDecimal' => lang('Sales.negative_price_invalid'), + ], + 'discount' => [ + 'nonNegativeDecimal' => lang('Sales.negative_discount_invalid'), + ], + ]; + + if ($this->validate($rules, $messages)) { $description = $this->request->getPost('description', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $serialnumber = $this->request->getPost('serialnumber', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $price = parse_decimals($this->request->getPost('price')); @@ -596,20 +605,38 @@ class Sales extends Secure_Controller $discount = $discount_type ? parse_quantity($this->request->getPost('discount')) : parse_decimals($this->request->getPost('discount')); + $discount = $discount ?: 0; + + // Return mode legitimately uses negative quantities for refunds + if ($this->sale_lib->get_mode() != 'return' && $quantity < 0) { + $data['error'] = lang('Sales.negative_quantity_invalid'); + return $this->_reload($data); + } + + // Business logic: discount bounds depend on discount_type and item values + if ($discount_type == PERCENT && $discount > 100) { + $data['error'] = lang('Sales.discount_percent_exceeds_100'); + return $this->_reload($data); + } + + if ($discount_type == FIXED && bccomp((string)$discount, bcmul((string)abs($quantity), (string)$price, 2), 2) > 0) { + $data['error'] = lang('Sales.discount_exceeds_item_total'); + return $this->_reload($data); + } $item_location = $this->request->getPost('location', FILTER_SANITIZE_NUMBER_INT); $discounted_total = $this->request->getPost('discounted_total') != '' ? parse_decimals($this->request->getPost('discounted_total') ?? '') : null; - $this->sale_lib->edit_item($line, $description, $serialnumber, $quantity, $discount, $discount_type, $price, $discounted_total); $this->sale_lib->empty_payments(); $data['warning'] = $this->sale_lib->out_of_stock($this->sale_lib->get_item_id($line), $item_location); } else { - $data['error'] = lang('Sales.error_editing_item'); + $errors = $this->validator->getErrors(); + $data['error'] = $errors ? reset($errors) : lang('Sales.error_editing_item'); } return $this->_reload($data); @@ -723,6 +750,12 @@ class Sales extends Secure_Controller $data['cash_amount_due'] = $totals['cash_amount_due']; $data['non_cash_amount_due'] = $totals['amount_due']; + // Prevent negative total sales (fraud/theft vector) - returns can have negative totals for legitimate refunds + if ($this->sale_lib->get_mode() != 'return' && bccomp($totals['total'], '0') < 0) { + $data['error'] = lang('Sales.negative_total_invalid'); + return $this->_reload($data); + } + if ($data['cash_mode']) { // TODO: Convert this to ternary notation $data['amount_due'] = $totals['cash_amount_due']; } else { diff --git a/app/Language/ar-EG/Sales.php b/app/Language/ar-EG/Sales.php index bf8d5b7cd..85dc8f9ee 100644 --- a/app/Language/ar-EG/Sales.php +++ b/app/Language/ar-EG/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "الموظف", "entry" => "ادخال", "error_editing_item" => "خطاء فى تحرير الصنف", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "بحث/مسح باركود صنف", "find_or_scan_item_or_receipt" => "بحث/مسح باركود صنف أو ايصال", "giftcard" => "بطاقة هدية", diff --git a/app/Language/ar-LB/Sales.php b/app/Language/ar-LB/Sales.php index 112838301..ecbe859c9 100644 --- a/app/Language/ar-LB/Sales.php +++ b/app/Language/ar-LB/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "الموظف", "entry" => "ادخال", "error_editing_item" => "خطاء فى تعديل المادة", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "بحث/مسح باركود المادة", "find_or_scan_item_or_receipt" => "بحث/مسح باركود المادة أو الايصال", "giftcard" => "بطاقة هدية", diff --git a/app/Language/az/Sales.php b/app/Language/az/Sales.php index 4ab9586c9..b2e47a35e 100644 --- a/app/Language/az/Sales.php +++ b/app/Language/az/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Əməkdaş", "entry" => "Daxil", "error_editing_item" => "XƏTA Malın redaktəsində", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Malın axtarışı", "find_or_scan_item_or_receipt" => "Tapmaq skan etmək və ya kvitansiya", "giftcard" => "Hədiyyə Kartı", diff --git a/app/Language/bg/Sales.php b/app/Language/bg/Sales.php index 43293ef6f..63a551553 100644 --- a/app/Language/bg/Sales.php +++ b/app/Language/bg/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Служител", "entry" => "Вход", "error_editing_item" => "Грешка при редактирането на елемента", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Намерете или сканирайте елемента", "find_or_scan_item_or_receipt" => "Намерете или сканирайте елемент или разпис", "giftcard" => "Gift Карта", diff --git a/app/Language/bs/Sales.php b/app/Language/bs/Sales.php index f623af079..ec725cba7 100644 --- a/app/Language/bs/Sales.php +++ b/app/Language/bs/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Zaposlenik", "entry" => "Ulaz", "error_editing_item" => "Greška pri uređivanju artikla", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Pronađi/Skeniraj artikal", "find_or_scan_item_or_receipt" => "Pronađi/Skeniraj artikal ili priznanicu", "giftcard" => "Poklon kartica", diff --git a/app/Language/ckb/Sales.php b/app/Language/ckb/Sales.php index 7f5d46dc2..3c7973f99 100644 --- a/app/Language/ckb/Sales.php +++ b/app/Language/ckb/Sales.php @@ -73,6 +73,12 @@ return [ 'employee' => "فەرمانبەر", 'entry' => "تۆمار", 'error_editing_item' => "هەڵە لە دەستکاریکردنی ئایتم", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", 'find_or_scan_item' => "دۆزینەوە یان سکانکردنی ئایتم", 'find_or_scan_item_or_receipt' => "دۆزینەوە یان سکانکردنی ئایتم یان پسوڵە", 'giftcard' => "کارتی دیاری", diff --git a/app/Language/cs/Sales.php b/app/Language/cs/Sales.php index 623446543..999ee8474 100644 --- a/app/Language/cs/Sales.php +++ b/app/Language/cs/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Prodávající", "entry" => "Záznam", "error_editing_item" => "Chyba při úpravě položky", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Najít nebo skenovat položku", "find_or_scan_item_or_receipt" => "Najít nebo skenovat položku či účtenku", "giftcard" => "Dárkový poukaz", diff --git a/app/Language/da/Sales.php b/app/Language/da/Sales.php index ee07a62eb..ccdf0d830 100644 --- a/app/Language/da/Sales.php +++ b/app/Language/da/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "", "entry" => "", "error_editing_item" => "", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "", "find_or_scan_item_or_receipt" => "", "giftcard" => "Gavekort", diff --git a/app/Language/de-CH/Sales.php b/app/Language/de-CH/Sales.php index 32d1cc228..e23ad70ce 100644 --- a/app/Language/de-CH/Sales.php +++ b/app/Language/de-CH/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Mitarbeiter", "entry" => "", "error_editing_item" => "Fehler beim Ändern des Artikels", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Finde/Scanne Artikel", "find_or_scan_item_or_receipt" => "Finde/Scanne Artikel oder Quittung", "giftcard" => "Gutschein", diff --git a/app/Language/de-DE/Sales.php b/app/Language/de-DE/Sales.php index 198ff239f..1cad8dc35 100644 --- a/app/Language/de-DE/Sales.php +++ b/app/Language/de-DE/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Mitarbeiter", "entry" => "Eintrag", "error_editing_item" => "Fehler beim Ändern des Artikels", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Finde/Scanne Artikel", "find_or_scan_item_or_receipt" => "Finde/Scanne Artikel oder Quittung", "giftcard" => "Gutschein", diff --git a/app/Language/el/Sales.php b/app/Language/el/Sales.php index 90dd0d5d0..867213f70 100644 --- a/app/Language/el/Sales.php +++ b/app/Language/el/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Υπάλληλος", "entry" => "Εγγραφή", "error_editing_item" => "Σφάλμα επεξεργασίας είδους", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Εύρεση ή Σκανάρισμα Είδους", "find_or_scan_item_or_receipt" => "Εύρεση ή Σκανάρισμα είδους ή Απόδειξης", "giftcard" => "Δωροκάρτα", diff --git a/app/Language/en-GB/Sales.php b/app/Language/en-GB/Sales.php index d9678ba44..f68d14d45 100644 --- a/app/Language/en-GB/Sales.php +++ b/app/Language/en-GB/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Employee", "entry" => "Entry", "error_editing_item" => "Error editing item", + "negative_price_invalid" => "Price cannot be negative.", + "negative_quantity_invalid" => "Quantity cannot be negative.", + "negative_discount_invalid" => "Discount cannot be negative.", + "discount_percent_exceeds_100" => "Percentage discount cannot exceed 100%.", + "discount_exceeds_item_total" => "Discount cannot exceed the item total.", + "negative_total_invalid" => "Sale total cannot be negative. Check item discounts and quantities.", "find_or_scan_item" => "Find or Scan Item", "find_or_scan_item_or_receipt" => "Find or Scan Item or Receipt", "giftcard" => "Gift Card", diff --git a/app/Language/en/Sales.php b/app/Language/en/Sales.php index 6c7d93d48..c16c345b4 100644 --- a/app/Language/en/Sales.php +++ b/app/Language/en/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Employee", "entry" => "Entry", "error_editing_item" => "Error editing item", + "negative_price_invalid" => "Price cannot be negative.", + "negative_quantity_invalid" => "Quantity cannot be negative.", + "negative_discount_invalid" => "Discount cannot be negative.", + "discount_percent_exceeds_100" => "Percentage discount cannot exceed 100%.", + "discount_exceeds_item_total" => "Discount cannot exceed the item total.", + "negative_total_invalid" => "Sale total cannot be negative. Check item discounts and quantities.", "find_or_scan_item" => "Find or Scan Item", "find_or_scan_item_or_receipt" => "Find or Scan Item or Receipt", "giftcard" => "Gift Card", diff --git a/app/Language/es-ES/Sales.php b/app/Language/es-ES/Sales.php index a337f7539..9e5f710d7 100644 --- a/app/Language/es-ES/Sales.php +++ b/app/Language/es-ES/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Empleado", "entry" => "Entrada", "error_editing_item" => "Error editando artículo", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Encontrar/Escanear Artículo", "find_or_scan_item_or_receipt" => "Encontrar/Escanear Artículo o Entrada", "giftcard" => "Tarjeta de Regalo", diff --git a/app/Language/es-MX/Sales.php b/app/Language/es-MX/Sales.php index b0e521c5b..9295d2e36 100644 --- a/app/Language/es-MX/Sales.php +++ b/app/Language/es-MX/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Empleado", "entry" => "Entrada", "error_editing_item" => "Error editando el artículo", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Buscar o escanear artículo", "find_or_scan_item_or_receipt" => "Buscar o escanear artículo o recibo", "giftcard" => "Tarjeta de regalo", diff --git a/app/Language/fa/Sales.php b/app/Language/fa/Sales.php index 182a534e2..2ea23afcc 100644 --- a/app/Language/fa/Sales.php +++ b/app/Language/fa/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "کارمند", "entry" => "ورود", "error_editing_item" => "خطا در ویرایش مورد", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "یافتن یا اسکن کردن مورد", "find_or_scan_item_or_receipt" => "یافتن یا اسکن کردن مورد یا رسید", "giftcard" => "کارت هدیه", diff --git a/app/Language/fr/Sales.php b/app/Language/fr/Sales.php index 34caae2f4..5fa816844 100644 --- a/app/Language/fr/Sales.php +++ b/app/Language/fr/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Employé", "entry" => "Entrée", "error_editing_item" => "Érreur lors de l'édition", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Trouver/Scanner Article", "find_or_scan_item_or_receipt" => "Trouver/Scanner Article OU Reçu", "giftcard" => "Carte Cadeau", diff --git a/app/Language/he/Sales.php b/app/Language/he/Sales.php index f2bd399ba..2aa19d64c 100644 --- a/app/Language/he/Sales.php +++ b/app/Language/he/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "עובד", "entry" => "ערך", "error_editing_item" => "שגיאה בעריכת פריט", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "חיפוש או סריקה של פריט", "find_or_scan_item_or_receipt" => "חיפוש או סריקה של פריט או קבלה", "giftcard" => "כרטיס מתנה", diff --git a/app/Language/hr-HR/Sales.php b/app/Language/hr-HR/Sales.php index 9e2df3b99..fed22729d 100644 --- a/app/Language/hr-HR/Sales.php +++ b/app/Language/hr-HR/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Radnik", "entry" => "", "error_editing_item" => "Greška kod uređivanja artikla", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Pronađi/Skaniraj artikal", "find_or_scan_item_or_receipt" => "Pronađi/Skaniraj artikal ili račun", "giftcard" => "Poklon bon", diff --git a/app/Language/hu/Sales.php b/app/Language/hu/Sales.php index 5928b2708..a864dd1af 100644 --- a/app/Language/hu/Sales.php +++ b/app/Language/hu/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Dolgozó", "entry" => "", "error_editing_item" => "Termék módositási hiba", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Termék keresés/scan", "find_or_scan_item_or_receipt" => "Termék keresése", "giftcard" => "Ajándék utalvány", diff --git a/app/Language/hy/Sales.php b/app/Language/hy/Sales.php index b38f57446..bf138169a 100644 --- a/app/Language/hy/Sales.php +++ b/app/Language/hy/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "", "entry" => "", "error_editing_item" => "", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "", "find_or_scan_item_or_receipt" => "", "giftcard" => "", diff --git a/app/Language/id/Sales.php b/app/Language/id/Sales.php index e15191351..555ad5076 100644 --- a/app/Language/id/Sales.php +++ b/app/Language/id/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Karyawan", "entry" => "Entri", "error_editing_item" => "mengubah item salah", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Cari/Scan Item", "find_or_scan_item_or_receipt" => "Temukan atau pindai Item atau Faktur", "giftcard" => "Kartu Hadiah", diff --git a/app/Language/it/Sales.php b/app/Language/it/Sales.php index 84d9a65a2..39f32a770 100644 --- a/app/Language/it/Sales.php +++ b/app/Language/it/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Impiegato", "entry" => "Voce", "error_editing_item" => "Errore modificando un articolo", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Scansiona o Cerca Articolo", "find_or_scan_item_or_receipt" => "Scansiona o Cerca Articolo o Scontrino", "giftcard" => "Carta Regalo", diff --git a/app/Language/km/Sales.php b/app/Language/km/Sales.php index 8fd15efb4..0c43ea100 100644 --- a/app/Language/km/Sales.php +++ b/app/Language/km/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "បុគ្គលិក", "entry" => "បញ្ចូល", "error_editing_item" => "មានកំហុស ក្នុងការកែប្រែទំនិញ", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "ស្វែងរក ឬស្កេនទំនិញ", "find_or_scan_item_or_receipt" => "ស្វែងរក ឬ​ស្កេនទំនិញ ឬ វិក័យបត្រ", "giftcard" => "កាតអំណោយ", diff --git a/app/Language/lo/Sales.php b/app/Language/lo/Sales.php index 66745059f..49b748b3d 100644 --- a/app/Language/lo/Sales.php +++ b/app/Language/lo/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Employee", "entry" => "Entry", "error_editing_item" => "Error editing item", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Find or Scan Item", "find_or_scan_item_or_receipt" => "Find or Scan Item or Receipt", "giftcard" => "Gift Card", diff --git a/app/Language/ml/Sales.php b/app/Language/ml/Sales.php index f8397f233..4bda63368 100644 --- a/app/Language/ml/Sales.php +++ b/app/Language/ml/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "", "entry" => "", "error_editing_item" => "", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "", "find_or_scan_item_or_receipt" => "", "giftcard" => "", diff --git a/app/Language/nb/Sales.php b/app/Language/nb/Sales.php index b38f57446..bf138169a 100644 --- a/app/Language/nb/Sales.php +++ b/app/Language/nb/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "", "entry" => "", "error_editing_item" => "", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "", "find_or_scan_item_or_receipt" => "", "giftcard" => "", diff --git a/app/Language/nl-BE/Sales.php b/app/Language/nl-BE/Sales.php index f2768e8ed..a287c0d62 100644 --- a/app/Language/nl-BE/Sales.php +++ b/app/Language/nl-BE/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Werknemer", "entry" => "Rij", "error_editing_item" => "Fout bij bewerken", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Zoek/Scan Product", "find_or_scan_item_or_receipt" => "Zoek/Scan Product of Ticket", "giftcard" => "Cadeaubon", diff --git a/app/Language/nl-NL/Sales.php b/app/Language/nl-NL/Sales.php index e37c31c23..12826cc27 100644 --- a/app/Language/nl-NL/Sales.php +++ b/app/Language/nl-NL/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Werknemer", "entry" => "Vermelding", "error_editing_item" => "Fout bij artikel bewerken", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Artikel zoeken of scannen", "find_or_scan_item_or_receipt" => "Artikel of kassabon vinden of scannen", "giftcard" => "Cadeaubon", diff --git a/app/Language/pl/Sales.php b/app/Language/pl/Sales.php index 3a5515cf5..170380a7d 100644 --- a/app/Language/pl/Sales.php +++ b/app/Language/pl/Sales.php @@ -73,6 +73,12 @@ return [ 'employee' => "", 'entry' => "", 'error_editing_item' => "", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", 'find_or_scan_item' => "", 'find_or_scan_item_or_receipt' => "", 'giftcard' => "Karta Podarunkowa", diff --git a/app/Language/pt-BR/Sales.php b/app/Language/pt-BR/Sales.php index 5f87ba959..479c72d3a 100644 --- a/app/Language/pt-BR/Sales.php +++ b/app/Language/pt-BR/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Empregado", "entry" => "Entrada", "error_editing_item" => "Erro editando item", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Pesquisar Item", "find_or_scan_item_or_receipt" => "Produto", "giftcard" => "Cupom", diff --git a/app/Language/ro/Sales.php b/app/Language/ro/Sales.php index 815b1176d..4370f287a 100644 --- a/app/Language/ro/Sales.php +++ b/app/Language/ro/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Salariat", "entry" => "Intrare", "error_editing_item" => "Eroare editare articol", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Gaseste sau scaneaza Articol", "find_or_scan_item_or_receipt" => "Gaseste sau scaneaza Articol sau Chitanta", "giftcard" => "Card Cadou", diff --git a/app/Language/ru/Sales.php b/app/Language/ru/Sales.php index 7a3c2a977..a26160981 100644 --- a/app/Language/ru/Sales.php +++ b/app/Language/ru/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Сотрудник", "entry" => "Запись", "error_editing_item" => "Ошибка при редактировании товара", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Найти/Сканировать товар", "find_or_scan_item_or_receipt" => "Найти/Сканировать товара или квитанцию", "giftcard" => "Подарочная карта", diff --git a/app/Language/sv/Sales.php b/app/Language/sv/Sales.php index b492a389f..697668945 100644 --- a/app/Language/sv/Sales.php +++ b/app/Language/sv/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Anställd", "entry" => "Post", "error_editing_item" => "Ändra artikel misslyckades", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Hitta eller skanna artikel", "find_or_scan_item_or_receipt" => "Hitta eller skanna artikel eller kvitto", "giftcard" => "Presentkort", diff --git a/app/Language/sw-KE/Sales.php b/app/Language/sw-KE/Sales.php index 2dc789bda..6748f957b 100644 --- a/app/Language/sw-KE/Sales.php +++ b/app/Language/sw-KE/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Mfanyakazi", "entry" => "Ingizo", "error_editing_item" => "Hitilafu katika kuhariri bidhaa", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Tafuta au Changanua Bidhaa", "find_or_scan_item_or_receipt" => "Tafuta au Changanua Bidhaa au Risiti", "giftcard" => "Kadi ya Zawadi", diff --git a/app/Language/sw-TZ/Sales.php b/app/Language/sw-TZ/Sales.php index 2dc789bda..6748f957b 100644 --- a/app/Language/sw-TZ/Sales.php +++ b/app/Language/sw-TZ/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Mfanyakazi", "entry" => "Ingizo", "error_editing_item" => "Hitilafu katika kuhariri bidhaa", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Tafuta au Changanua Bidhaa", "find_or_scan_item_or_receipt" => "Tafuta au Changanua Bidhaa au Risiti", "giftcard" => "Kadi ya Zawadi", diff --git a/app/Language/ta/Sales.php b/app/Language/ta/Sales.php index c1611c31e..4019e1012 100644 --- a/app/Language/ta/Sales.php +++ b/app/Language/ta/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "ஊழியர்", "entry" => "உள்ளீடு", "error_editing_item" => "பொருளை திருத்துவதில் பிழை", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "பொருளைக் தேடு அல்லது ஸ்கேன் செய்யுங்கள்", "find_or_scan_item_or_receipt" => "தேடு அல்லது பொருளை வருடு அல்லது ரசீது", "giftcard" => "பரிசு அட்டை", diff --git a/app/Language/th/Sales.php b/app/Language/th/Sales.php index 0a8ec17b1..764f949d8 100644 --- a/app/Language/th/Sales.php +++ b/app/Language/th/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "พนักงาน", "entry" => "การนำเข้า", "error_editing_item" => "แก้ไขสินค้าล้มเหลว", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "ค้นหาสินค้า", "find_or_scan_item_or_receipt" => "ค้นหา หรือ แสกนรายการ หรือ ใบเสร็จ", "giftcard" => "บัตรของขวัญ", diff --git a/app/Language/tl/Sales.php b/app/Language/tl/Sales.php index 3cb4d1653..a40e655db 100644 --- a/app/Language/tl/Sales.php +++ b/app/Language/tl/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Employee", "entry" => "Entry", "error_editing_item" => "Error editing item", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Find or Scan Item", "find_or_scan_item_or_receipt" => "Find or Scan Item or Receipt", "giftcard" => "Gift Card", diff --git a/app/Language/tr/Sales.php b/app/Language/tr/Sales.php index 8901fa02f..48a1ee668 100644 --- a/app/Language/tr/Sales.php +++ b/app/Language/tr/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Personel", "entry" => "Girdi", "error_editing_item" => "Ürün düzenleme hatası", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Ürün Bul/Oku", "find_or_scan_item_or_receipt" => "Ürün yada Fiş Bul/Oku", "giftcard" => "Hediye Çeki", diff --git a/app/Language/uk/Sales.php b/app/Language/uk/Sales.php index 2524d3a3d..67eabdd5f 100644 --- a/app/Language/uk/Sales.php +++ b/app/Language/uk/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Працівник", "entry" => "Вхід", "error_editing_item" => "Помилка редагування товару", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Знайти/Сканувати товар", "find_or_scan_item_or_receipt" => "Знайти/Сканувати товар або квитанцію", "giftcard" => "Подарункова карта", diff --git a/app/Language/ur/Sales.php b/app/Language/ur/Sales.php index 16f3d32e4..6ee0bae6d 100644 --- a/app/Language/ur/Sales.php +++ b/app/Language/ur/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "", "entry" => "", "error_editing_item" => "", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "", "find_or_scan_item_or_receipt" => "", "giftcard" => "", diff --git a/app/Language/vi/Sales.php b/app/Language/vi/Sales.php index d99083c28..9d65ddaeb 100644 --- a/app/Language/vi/Sales.php +++ b/app/Language/vi/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "Nhân viên", "entry" => "Mục nhập", "error_editing_item" => "Lỗi sửa hàng hóa", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "Tìm hay quét Hàng hóa", "find_or_scan_item_or_receipt" => "Tìm hay quét Hàng hóa hay Biên lai", "giftcard" => "Thẻ quà tặng", diff --git a/app/Language/zh-Hans/Sales.php b/app/Language/zh-Hans/Sales.php index 4e04d3d09..ba4df4c6c 100644 --- a/app/Language/zh-Hans/Sales.php +++ b/app/Language/zh-Hans/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "員工", "entry" => "", "error_editing_item" => "編輯產品錯誤", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "查找/掃描商品", "find_or_scan_item_or_receipt" => "查找/掃描產品或收貨單", "giftcard" => "禮金券", diff --git a/app/Language/zh-Hant/Sales.php b/app/Language/zh-Hant/Sales.php index cb1af0dfb..f7e78496d 100644 --- a/app/Language/zh-Hant/Sales.php +++ b/app/Language/zh-Hant/Sales.php @@ -73,6 +73,12 @@ return [ "employee" => "員工", "entry" => "加入項目", "error_editing_item" => "編輯產品錯誤", + "negative_price_invalid" => "", + "negative_quantity_invalid" => "", + "negative_discount_invalid" => "", + "discount_percent_exceeds_100" => "", + "discount_exceeds_item_total" => "", + "negative_total_invalid" => "", "find_or_scan_item" => "查找/掃描商品", "find_or_scan_item_or_receipt" => "查找/掃描產品或收貨單", "giftcard" => "禮金券",