Commit Graph

58733 Commits

Author SHA1 Message Date
MochaMind
da4b61d7b7 fix: Esperanto translations 2026-08-03 14:31:29 +05:30
MochaMind
61643e87f9 fix: Serbian (Latin) translations 2026-08-03 14:31:23 +05:30
MochaMind
7ea8ee0dac fix: Norwegian Bokmal translations 2026-08-03 14:31:18 +05:30
MochaMind
048698b166 fix: Uzbek translations 2026-08-03 14:31:13 +05:30
MochaMind
83a0d5df6b fix: Bosnian translations 2026-08-03 14:31:07 +05:30
MochaMind
051a65b58f fix: Burmese translations 2026-08-03 14:31:03 +05:30
MochaMind
54bb4fe926 fix: Hindi translations 2026-08-03 14:30:58 +05:30
MochaMind
6d0bf73b30 fix: Croatian translations 2026-08-03 14:30:53 +05:30
MochaMind
b0b5978d15 fix: Thai translations 2026-08-03 14:30:47 +05:30
MochaMind
1d411dfd15 fix: Persian translations 2026-08-03 14:30:40 +05:30
MochaMind
6da2dae96e fix: Indonesian translations 2026-08-03 14:30:34 +05:30
MochaMind
953e616ae6 fix: Portuguese, Brazilian translations 2026-08-03 14:30:29 +05:30
MochaMind
7dd7077025 fix: Vietnamese translations 2026-08-03 14:30:25 +05:30
MochaMind
d1f1f0ac6e fix: Chinese Traditional translations 2026-08-03 14:30:19 +05:30
MochaMind
9eaa5ebdbc fix: Chinese Simplified translations 2026-08-03 14:30:14 +05:30
MochaMind
b1d92978ad fix: Turkish translations 2026-08-03 14:30:09 +05:30
MochaMind
5877c18623 fix: Swedish translations 2026-08-03 14:30:05 +05:30
MochaMind
0c98d8d6a0 fix: Serbian (Cyrillic) translations 2026-08-03 14:29:59 +05:30
MochaMind
ce3ad93007 fix: Slovenian translations 2026-08-03 14:29:55 +05:30
MochaMind
ba6eea682e fix: Russian translations 2026-08-03 14:29:50 +05:30
MochaMind
f8e2a67138 fix: Portuguese translations 2026-08-03 14:29:46 +05:30
MochaMind
2b195c8a5e fix: Polish translations 2026-08-03 14:29:41 +05:30
MochaMind
083fd6a4c3 fix: Dutch translations 2026-08-03 14:29:37 +05:30
MochaMind
ebecece493 fix: Korean translations 2026-08-03 14:29:31 +05:30
MochaMind
c2e44ba9df fix: Italian translations 2026-08-03 14:29:27 +05:30
MochaMind
90918c268f fix: Hungarian translations 2026-08-03 14:29:22 +05:30
MochaMind
b9380a3775 fix: German translations 2026-08-03 14:29:18 +05:30
MochaMind
dae10c3197 fix: Danish translations 2026-08-03 14:29:13 +05:30
MochaMind
4153cdebae fix: Czech translations 2026-08-03 14:29:09 +05:30
MochaMind
c2538a23b8 fix: Bulgarian translations 2026-08-03 14:29:04 +05:30
MochaMind
c1ee2f03e9 fix: Arabic translations 2026-08-03 14:29:00 +05:30
MochaMind
e06e4626c4 fix: Spanish translations 2026-08-03 14:28:55 +05:30
MochaMind
a863a07168 fix: French translations 2026-08-03 14:28:51 +05:30
MochaMind
da2fb4df9a fix: Romanian translations 2026-08-03 14:28:46 +05:30
Mihir Kandoi
eeab2a833f Merge pull request #57730 from frappe/mergify/bp/version-16-hotfix/pr-57647
fix(sales): reject sales returns where every item has zero quantity (backport #57647)
2026-08-03 13:44:09 +05:30
Mihir Kandoi
af4aea171b test(sales): import make_sales_return from delivery_note on version-16-hotfix 2026-08-03 13:29:40 +05:30
Mihir Kandoi
a2dfc9e50a Merge pull request #57728 from frappe/mergify/bp/version-16-hotfix/pr-57725
fix(stock): scope over deliver/receive role check to delivery and receipt overflow (backport #57725)
2026-08-03 13:13:22 +05:30
R-Jayaraman
f2a53247c5 test(sales): add coverage for zero-qty return rejection
Greptile flagged that the sales-side zero-qty-return fix had no dedicated
test proving the behavior - the existing suite happened to pass, but
nothing specifically asserted that an all-zero return is rejected while
a normal negative-qty return still succeeds.

Adds two tests covering the doctypes that rely entirely on this check
(no other guard covers them for a non-stock-effect return):
- Delivery Note return with qty 0 -> rejected
- Sales Invoice return with qty 0 (no update_stock) -> rejected

POS Invoice is not covered separately here since it always runs with
update_stock=1, which is already guarded by the pre-existing
validate_zero_qty_for_return_invoices_with_stock check regardless of
this fix.

(cherry picked from commit 732c884633)
2026-08-03 07:35:29 +00:00
R-Jayaraman
aa71cd695b fix(sales): reject sales returns where every item has zero quantity
validate_returned_items() set items_returned=True whenever a row matched
a valid item from the original document, even if its qty was 0. This let
a Sales Invoice, Delivery Note, or POS Invoice return be submitted with
every line at qty=0 - a no-op document with no stock or financial effect
that still consumed a document number and linked back to the original
transaction.

Scoped to the Sales side only: items_returned now flips to True for
Sales Invoice/Delivery Note/POS Invoice only when qty (or received_qty)
is actually negative, so an all-zero sales return correctly hits the
existing "At least one item should be entered with negative quantity"
check. Purchase Invoice, Purchase Receipt, and Subcontracting Receipt
are unchanged.

(cherry picked from commit a3e9d13da3)
2026-08-03 07:35:29 +00:00
Mihir Kandoi
697f68d1d2 fix: resolve version-16 backport conflicts
Keep validate_warehouses() alongside the new
validate_over_delivery_receipt_allowance() call.

Drop test_blanket_order_over_order_aggregated_across_rows: it is develop-only
context the cherry-pick swallowed into the conflict, not part of #57725.

Revert the valuation_method literal to the three options this branch offers -
Standard Cost rode along from a regenerated develop type block.
2026-08-03 12:55:08 +05:30
Mihir Kandoi
246ffee17c Merge pull request #57722 from frappe/mergify/bp/version-16-hotfix/pr-57645
fix(purchase): reject purchase returns where every item has zero quan… (backport #57645)
2026-08-03 12:54:59 +05:30
Mihir Kandoi
e7757f6d0b Merge pull request #57726 from frappe/mergify/bp/version-16-hotfix/pr-57097
fix(stock): read quality inspection readings in the user's number format  (backport #57097)
2026-08-03 12:42:52 +05:30
Mihir Kandoi
10229700c0 test(purchase): drop unrelated sales-return test from the backport
test_sales_return_validates_against_original came in with the new file,
not with the change being backported. It covers a raw-SQL to query-builder
conversion that only exists on develop, and it imports
erpnext.stock.doctype.delivery_note.mapper, a module version-16-hotfix
does not have.
2026-08-03 12:42:10 +05:30
Afsal Syed
6cbf73a326 test(stock): prevent settings leakage in purchase order tests
(cherry picked from commit 99630f40eb)
2026-08-03 07:10:14 +00:00
Afsal Syed
3a0f988a9e test(stock): add test cases verifying stock over delivery role does not bypass order allowance
(cherry picked from commit 0b271e24b6)

# Conflicts:
#	erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
2026-08-03 07:10:14 +00:00
Afsal Syed
4713ddd55b fix(stock): scope over deliver/receive role check to delivery and receipt overflow
(cherry picked from commit 248873034d)
2026-08-03 07:10:14 +00:00
Afsal Syed
3f3292ca4a fix(stock): validate over delivery/receipt allowance in stock settings
(cherry picked from commit 446ec6030a)

# Conflicts:
#	erpnext/stock/doctype/stock_settings/stock_settings.json
#	erpnext/stock/doctype/stock_settings/stock_settings.py
2026-08-03 07:10:14 +00:00
Mihir Kandoi
656db1c2fe fix(stock): resolve backport conflict in quality inspection imports
The backport left both import hunks unresolved, so the file did not compile.
version-16-hotfix keeps item_query unannotated and still imports cstr, so only
get_number_format_info goes, replaced by NumberFormat; typing.Any is not
carried over because nothing on this branch uses it.
2026-08-03 12:31:55 +05:30
Mihir Kandoi
444dd9e817 test(stock): cover reading number formats end to end
Set the number format on the session user rather than on System Settings: the
code reads the user default, which shadows the global one, so these tests never
exercised the path they were written for. Restoring it in a finally also keeps
a failed assertion from leaving the whole suite in another locale.

Add a table test over every format in NUMBER_FORMAT_MAP, covering the grouped
values and the three formats parse_float used to read as 0, and restore the
formula-based coverage for non-numeric readings.

(cherry picked from commit 00d17ca5db)
2026-08-03 06:56:49 +00:00
Mihir Kandoi
fccf1220f6 fix(stock): accept every number a reading can be written as
parse_float and is_valid_number each re-derived the number grammar, so the
validator accepted strings flt() cannot parse: str.isdigit() lets superscripts
through and lstrip("+-") lets repeated signs through, both then silently scored
as 0. One parse_reading() returning None when float() refuses the value makes
acceptance and conversion true by construction.

The grammar was also wrong for several formats. Where the group separator is
not a dot, a dot-decimal reading such as 1.15 parsed correctly before and is
accepted again. #,### and #.### report no decimal separator at all, which
rejected every fractional reading outright and, for #.###, reread a stored
1.500 as 1500.0; they now fall back to a dot and give up the grouping that
would collide with it.

Only readings that change are checked, so an inspection entered by a user in
one locale stays saveable and submittable by a user in another, and manual
inspection rows keep the free text they were never parsed for.

NumberFormat replaces get_number_format_info, which frappe drops in v16.

(cherry picked from commit 5b5f354090)

# Conflicts:
#	erpnext/stock/doctype/quality_inspection/quality_inspection.py
2026-08-03 06:56:48 +00:00