Frappe PR Bot
4aee12e16c
chore(release): Bumped to Version 15.121.4
...
## [15.121.4](https://github.com/frappe/erpnext/compare/v15.121.3...v15.121.4 ) (2026-09-23)
### Bug Fixes
* **accounts:** clarify revaluation journal filters ([a602153 ](a602153753 ))
* **accounts:** keep price list within user permissions ([#59231 ](https://github.com/frappe/erpnext/issues/59231 )) ([004633a ](004633a97e ))
* apply journal entry reversal backport to version 15 controller ([5237c81 ](5237c8189a ))
* clear stock value for zero-quantity balances ([#58899 ](https://github.com/frappe/erpnext/issues/58899 )) ([65d2a07 ](65d2a07596 ))
* continuous raw material consumption with bom validation (backport [#51914 ](https://github.com/frappe/erpnext/issues/51914 )) ([#59314 ](https://github.com/frappe/erpnext/issues/59314 )) ([7fe230a ](7fe230ac6e ))
* do not zero out backdated stock at a stock reco adjustment entry ([#59271 ](https://github.com/frappe/erpnext/issues/59271 )) ([1017286 ](10172869fe ))
* **journal-entry:** carry reference fields into reverse journal entry ([f4ce7b2 ](f4ce7b2677 ))
* **manufacturing:** finish a work order after partial material consumption ([#59311 ](https://github.com/frappe/erpnext/issues/59311 )) ([6d3304d ](6d3304d3ec ))
* negative stock value for moving average item with mixed batchwise valuation ([#59102 ](https://github.com/frappe/erpnext/issues/59102 )) ([a37725b ](a37725b6b9 ))
* **permissions:** grant select on link targets to roles with write access ([#59232 ](https://github.com/frappe/erpnext/issues/59232 )) ([89de899 ](89de899c95 ))
* **pos:** quote the reversed row's rate on a consolidated credit note (backport [#59320 ](https://github.com/frappe/erpnext/issues/59320 )) ([#59322 ](https://github.com/frappe/erpnext/issues/59322 )) ([879c5c7 ](879c5c72a1 ))
* prevent max recursion on supplier scorecard save ([#58706 ](https://github.com/frappe/erpnext/issues/58706 )) ([a7aae8b ](a7aae8b21a ))
* render letter head jinja in statement of accounts pdf ([b8a53b8 ](b8a53b800a ))
* resolve code lists by URI and version (backport [#58770 ](https://github.com/frappe/erpnext/issues/58770 )) ([#58771 ](https://github.com/frappe/erpnext/issues/58771 )) ([e283008 ](e2830089fb ))
* resolve conflicts ([32c8a95 ](32c8a9507d ))
* resolve conflicts ([ed33afd ](ed33afd0fa ))
* round running allocation balance in payment reconciliation (backport [#58393 ](https://github.com/frappe/erpnext/issues/58393 )) ([#59356 ](https://github.com/frappe/erpnext/issues/59356 )) ([3a7d756 ](3a7d756714 ))
* **selling:** use preferred addresses in customer quotations ([e291ce2 ](e291ce2616 ))
* **stock:** allow None for for_validate in get_item_details ([#59290 ](https://github.com/frappe/erpnext/issues/59290 )) ([a41858a ](a41858a47d ))
* **stock:** allow zero completed quantity and handle process loss in job cards ([#59104 ](https://github.com/frappe/erpnext/issues/59104 )) ([1e862b2 ](1e862b232c ))
* **stock:** apply transit warehouse filter to target warehouse in items table ([#59192 ](https://github.com/frappe/erpnext/issues/59192 )) ([e139084 ](e13908400b ))
* **stock:** calculate batch bundle valuation per unit ([#58994 ](https://github.com/frappe/erpnext/issues/58994 )) ([7df94d8 ](7df94d87de ))
* **stock:** compare transit quantities in stock UOM (backport [#59202 ](https://github.com/frappe/erpnext/issues/59202 )) ([#59243 ](https://github.com/frappe/erpnext/issues/59243 )) ([7d5293e ](7d5293e83e ))
* **stock:** continue putaway allocation after undersized whole-uom rules ([#59155 ](https://github.com/frappe/erpnext/issues/59155 )) ([e693031 ](e6930317ae ))
* **stock:** deduct rejected qty from the in-transit warehouse ([#59300 ](https://github.com/frappe/erpnext/issues/59300 )) ([83ab572 ](83ab572208 ))
* **stock:** filter item group defaults by company and non-group records ([#58923 ](https://github.com/frappe/erpnext/issues/58923 )) ([50b6b85 ](50b6b850e4 ))
* **stock:** forward company to outward batch lookup ([#59160 ](https://github.com/frappe/erpnext/issues/59160 )) ([f5f7d04 ](f5f7d04fd5 ))
* **stock:** keep mapped cost center in stock entry items ([#59286 ](https://github.com/frappe/erpnext/issues/59286 )) ([091fcfe ](091fcfee7e ))
* **stock:** use net purchase values in landed cost vouchers (backport [#59274 ](https://github.com/frappe/erpnext/issues/59274 )) ([#59279 ](https://github.com/frappe/erpnext/issues/59279 )) ([3b9c740 ](3b9c74024a ))
* **stock:** use stored posting_datetime when reposting stock ledger entries ([#58998 ](https://github.com/frappe/erpnext/issues/58998 )) ([c7893b8 ](c7893b8444 ))
* **stock:** validate warehouse account belongs to selected company ([#59191 ](https://github.com/frappe/erpnext/issues/59191 )) ([5b2a0e7 ](5b2a0e73c3 ))
* update modified for last purchase rate (backport [#59044 ](https://github.com/frappe/erpnext/issues/59044 )) ([#59105 ](https://github.com/frappe/erpnext/issues/59105 )) ([db2e9ef ](db2e9efab4 ))
* validate bank reconciliation date ranges ([dcff5c3 ](dcff5c3149 ))
* validate coupon pricing rules and validity dates ([3fbf440 ](3fbf440c77 ))
* validate shipping rule account company ([e54bf6f ](e54bf6fe43 ))
* write off stranded stock value only when the warehouse is empty ([#59219 ](https://github.com/frappe/erpnext/issues/59219 )) ([7a27634 ](7a276344a3 ))
### Performance Improvements
* filter by company in get_returned_invoice_items ([4fbc279 ](4fbc2791b8 ))
* reduce memory consumption during reposting ([#59117 ](https://github.com/frappe/erpnext/issues/59117 )) ([dc08520 ](dc08520197 )), closes [#52152 ](https://github.com/frappe/erpnext/issues/52152 )
* skip legacy batch ledger lookups when no legacy entry exists ([#59110 ](https://github.com/frappe/erpnext/issues/59110 )) ([0130d28 ](0130d287f6 ))
2026-09-23 23:04:36 +00:00
Diptanil Saha
3fb8adbf24
Merge pull request #59275 from frappe/version-15-hotfix
...
chore: release v15
2026-09-24 04:32:58 +05:30
mergify[bot]
3a7d756714
fix: round running allocation balance in payment reconciliation (backport #58393 ) ( #59356 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-09-23 22:25:40 +00:00
Diptanil Saha
aea326869b
fix(permissions)!: add permission checks to whitelisted methods and the DocPerm rows they need ( #59283 )
2026-09-23 23:01:55 +05:30
Khushi Rawat
6c55b16f8f
Merge pull request #59221 from frappe/mergify/bp/version-15-hotfix/pr-59128
...
fix: validate coupon pricing rules and validity dates (backport #59128 )
2026-09-23 19:26:20 +05:30
Sudharsanan Ashok
e7e76c164f
Merge pull request #59338 from frappe/mergify/bp/version-15-hotfix/pr-59336
...
fix(selling): use preferred addresses in customer quotations (backport #59336 )
2026-09-23 19:16:41 +05:30
pandiyan
2f663d6da7
test: cover coupon pricing rule and date validation
2026-09-23 18:55:44 +05:30
pandiyan
3fbf440c77
fix: validate coupon pricing rules and validity dates
2026-09-23 18:54:44 +05:30
pandiyan
e291ce2616
fix(selling): use preferred addresses in customer quotations
2026-09-23 18:48:10 +05:30
mergify[bot]
879c5c72a1
fix(pos): quote the reversed row's rate on a consolidated credit note (backport #59320 ) ( #59322 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-09-23 15:42:43 +05:30
Mihir Kandoi
7fe230ac6e
fix: continuous raw material consumption with bom validation (backport #51914 ) ( #59314 )
2026-09-23 08:12:34 +00:00
Mihir Kandoi
6d3304d3ec
fix(manufacturing): finish a work order after partial material consumption ( #59311 )
2026-09-23 07:49:59 +00:00
Sudharsanan Ashok
42aaeb924e
Merge pull request #59296 from frappe/mergify/bp/version-15-hotfix/pr-59231
...
fix(accounts): keep price list within user permissions (backport #59231 )
2026-09-23 12:03:34 +05:30
Sudharsanan11
672518756a
test: add stock for internal transfer price list validation
2026-09-23 11:37:22 +05:30
Sudharsanan11
32c8a9507d
fix: resolve conflicts
2026-09-23 11:37:22 +05:30
Sudharsanan Ashok
004633a97e
fix(accounts): keep price list within user permissions ( #59231 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
(cherry picked from commit e814d13126 )
# Conflicts:
# erpnext/accounts/party.py
# erpnext/accounts/test_party.py
2026-09-23 11:37:22 +05:30
Sudharsanan Ashok
8985c36397
Merge pull request #59294 from frappe/mergify/bp/version-15-hotfix/pr-59286
...
fix(stock): keep mapped cost center in stock entry items (backport #59286 )
2026-09-22 23:45:53 +05:30
Khushi Rawat
eb75b22c9a
Merge pull request #59288 from frappe/mergify/bp/version-15-hotfix/pr-59262
...
fix(journal-entry): carry reference fields into reverse journal entry (backport #59262 )
2026-09-22 23:17:01 +05:30
Mihir Kandoi
83ab572208
fix(stock): deduct rejected qty from the in-transit warehouse ( #59300 )
2026-09-22 14:33:56 +00:00
Afsal Syed
a41858a47d
fix(stock): allow None for for_validate in get_item_details ( #59290 )
2026-09-22 19:37:15 +05:30
Sudharsanan Ashok
091fcfee7e
fix(stock): keep mapped cost center in stock entry items ( #59286 )
...
(cherry picked from commit 7f608f31eb )
2026-09-22 12:35:38 +00:00
khushi8112
5237c8189a
fix: apply journal entry reversal backport to version 15 controller
2026-09-22 17:33:39 +05:30
Mihir Kandoi
3b9c74024a
fix(stock): use net purchase values in landed cost vouchers (backport #59274 ) ( #59279 )
...
Co-authored-by: pandiyan <pandiyanpalani37@gmail.com >
2026-09-22 12:02:46 +00:00
ervishnucs
f4ce7b2677
fix(journal-entry): carry reference fields into reverse journal entry
...
(cherry picked from commit 9e01992217 )
# Conflicts:
# erpnext/accounts/doctype/journal_entry/mapper.py
2026-09-22 11:47:21 +00:00
rohitwaghchaure
10172869fe
fix: do not zero out backdated stock at a stock reco adjustment entry ( #59271 )
...
* fix: do not zero out backdated stock at a stock reco adjustment entry
* fix: keep a stock reco adjustment entry value-only on cancel and refresh
* fix: read stock reco adjustment rows once and value them from the ledger
2026-09-22 16:29:45 +05:30
mergify[bot]
7d5293e83e
fix(stock): compare transit quantities in stock UOM (backport #59202 ) ( #59243 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-09-22 08:50:17 +00:00
Sudharsanan Ashok
9fe04988c2
Merge pull request #59254 from frappe/mergify/bp/version-15-hotfix/pr-59192
...
fix(stock): apply transit warehouse filter to target warehouse in items table (backport #59192 )
2026-09-22 13:38:45 +05:30
Sudharsanan Ashok
f3078ed56b
Merge pull request #59193 from frappe/mergify/bp/version-15-hotfix/pr-59191
...
fix(stock): validate warehouse account belongs to selected company (backport #59191 )
2026-09-22 13:38:32 +05:30
Afsal Syed
e13908400b
fix(stock): apply transit warehouse filter to target warehouse in items table ( #59192 )
...
(cherry picked from commit 893fc75df4 )
2026-09-22 12:32:48 +05:30
Afsal Syed
5b2a0e73c3
fix(stock): validate warehouse account belongs to selected company ( #59191 )
...
(cherry picked from commit db6e089109 )
2026-09-22 11:40:44 +05:30
Diptanil Saha
89de899c95
fix(permissions): grant select on link targets to roles with write access ( #59232 )
2026-09-21 17:28:56 +05:30
Shllokkk
4f122ab2b3
Merge pull request #59229 from frappe/mergify/bp/version-15-hotfix/pr-59204
...
perf: filter by company in get_returned_invoice_items (backport #59204 )
2026-09-21 15:14:06 +05:30
Shllokkk
4fbc2791b8
perf: filter by company in get_returned_invoice_items
...
(cherry picked from commit 423aa09f59 )
2026-09-21 09:02:25 +00:00
rohitwaghchaure
7a276344a3
fix: write off stranded stock value only when the warehouse is empty ( #59219 )
2026-09-21 13:30:14 +05:30
Shllokkk
e4ea6e0a04
Merge pull request #59205 from frappe/mergify/bp/version-15-hotfix/pr-59203
...
refactor: migrate raw SQL queries in gross profit report to query builder (backport #59203 )
2026-09-21 02:44:56 +05:30
Shllokkk
9e5baaa571
refactor: migrate raw SQL queries in gross profit report to query builder
...
(cherry picked from commit fd369a5a0f )
# Conflicts:
# erpnext/accounts/report/gross_profit/gross_profit.py
2026-09-21 02:28:30 +05:30
Sudharsanan Ashok
54ac519bec
Merge pull request #59164 from frappe/mergify/bp/version-15-hotfix/pr-59160
...
fix(stock): forward company to outward batch lookup (backport #59160 )
2026-09-18 18:27:01 +05:30
Khushi Rawat
a7151374bb
Merge pull request #59183 from frappe/mergify/bp/version-15-hotfix/pr-59181
...
fix(accounts): clarify revaluation journal filters (backport #59181 )
2026-09-18 17:57:44 +05:30
pandiyan
a602153753
fix(accounts): clarify revaluation journal filters
...
(cherry picked from commit dc4b390a9b )
2026-09-18 12:23:17 +00:00
Sudharsanan Ashok
f73cdb37bf
Merge pull request #59158 from frappe/mergify/bp/version-15-hotfix/pr-59155
...
fix(stock): continue putaway allocation after undersized whole-uom rules (backport #59155 )
2026-09-18 15:16:10 +05:30
Pandiyan P
f5f7d04fd5
fix(stock): forward company to outward batch lookup ( #59160 )
...
(cherry picked from commit 622b7e0caa )
2026-09-18 09:07:07 +00:00
Khushi Rawat
fc1d5975e9
Merge pull request #59162 from frappe/mergify/bp/version-15-hotfix/pr-59142
...
fix: validate shipping rule account company (backport #59142 )
2026-09-18 14:36:57 +05:30
Khushi Rawat
0983fb1e9c
Merge pull request #59156 from frappe/mergify/bp/version-15-hotfix/pr-59081
...
fix(accounts): validate bank reconciliation date ranges (backport #59081 )
2026-09-18 14:23:38 +05:30
pandiyan
e6930317ae
fix(stock): continue putaway allocation after undersized whole-uom rules ( #59155 )
...
(cherry picked from commit 6cc500e28d )
2026-09-18 14:16:00 +05:30
pandiyan
7186e45de9
test: cover shipping rule account company validation
...
(cherry picked from commit 022ee73d78 )
# Conflicts:
# erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
2026-09-18 14:11:20 +05:30
pandiyan
e54bf6fe43
fix: validate shipping rule account company
...
(cherry picked from commit 340feb94a1 )
2026-09-18 08:37:12 +00:00
pandiyan
355033d40f
test: cover bank reconciliation date validation
...
(cherry picked from commit 62d0e2c82e )
# Conflicts:
# erpnext/accounts/doctype/bank_reconciliation_tool/test_bank_reconciliation_tool.py
2026-09-18 13:54:26 +05:30
pandiyan
dcff5c3149
fix: validate bank reconciliation date ranges
...
(cherry picked from commit 970f32a342 )
# Conflicts:
# erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py
2026-09-18 13:53:14 +05:30
Sudharsanan Ashok
22a860d380
Merge pull request #59089 from frappe/mergify/bp/version-15-hotfix/pr-58923
...
fix(stock): filter item group defaults by company and non-group records (backport #58923 )
2026-09-18 11:12:11 +05:30
rohitwaghchaure
dc08520197
perf: reduce memory consumption during reposting ( #59117 )
...
* perf: reduce memory consumption during reposting
The reposting queue introduced in #52152 keeps the complete future stock
ledger of every transitively dependent item-warehouse in a single deque.
Each `select *` row is ~3.5KB, so a repost spanning a million entries
needs several GB and gets OOM killed on smaller workers.
- Queue only the identity and sort keys of an entry, and fetch the full
row in batches of 500 just before it is processed
- Move `for update` off the bulk prefetch onto the batch, so millions of
rows are no longer locked for the whole duration of the repost
- Drop the process local document cache and message log at every
checkpoint, neither is evicted within a long running job
* fix: keep recent repost messages and log skipped entries
Trimming `frappe.local.message_log` to empty at every checkpoint discarded
warnings that the Repost Item Valuation failure handler reads back when
building the error log. Keep the most recent messages instead, which bounds
the growth just as well.
Also log when a queued entry is no longer active by the time its batch is
loaded, rather than skipping it silently.
* fix: skip reposts already covered by a Manufacture/Repack dependant repost
While reposting a raw material, the finished goods produced from it are
reposted as dependants, from the posting datetime of the manufacture entry
through to the end of their ledger. A repost queued separately for the same
finished good and warehouse at a later datetime therefore has nothing left to
do, but it was still picked up and walked the same entries again.
Track the item-warehouse combinations pulled in as dependants of a Manufacture
or Repack entry, and mark the redundant queued reposts as Skipped once the
dependants have been reposted. This runs per item being reposted, so the
finished good's queued repost is released without waiting for the whole raw
material repost to finish.
Only 'Item and Warehouse' reposts are skipped. A 'Transaction' repost spans
several item-warehouse combinations, so covering one says nothing about the
rest. Reposts starting before the manufacture entry still have work to do and
are left queued.
* fix: don't lock the whole repost queue prefetch
* test: repost covers every entry once across batches
2026-09-18 09:02:56 +05:30
Sudharsanan Ashok
1ad584fddc
Merge pull request #59118 from frappe/mergify/bp/version-15-hotfix/pr-59104
...
fix(stock): allow zero completed quantity and handle process loss in job cards (backport #59104 )
2026-09-17 19:22:55 +05:30
Sudharsanan Ashok
d6d0400f76
Merge pull request #59087 from frappe/mergify/bp/version-15-hotfix/pr-58998
...
fix(stock): use stored posting_datetime when reposting stock ledger entries (backport #58998 )
2026-09-17 18:47:19 +05:30
Sudharsanan11
ed33afd0fa
fix: resolve conflicts
2026-09-17 18:28:07 +05:30
Sudharsanan Ashok
c7893b8444
fix(stock): use stored posting_datetime when reposting stock ledger entries ( #58998 )
...
* fix(stock): use stored posting_datetime for repost boundary
get_stock_ledger_entries re-derived posting_datetime from posting_date and
posting_time on every call, discarding the stored value its callers pass in.
when a row's stored posting_datetime differs from that pair, the replay window
is built from the wrong instant: the row falls outside the range filter and is
never recomputed, while get_previous_sle still selects it as the opening
balance and reuses its stale qty_after_transaction. every later entry inherits
the error, leaving bin qty adrift from the sum of its ledger.
derive the boundary only when the caller has not supplied one.
* fix(stock): match current voucher sle on stored posting_datetime
get_sle_against_current_voucher selected rows with an equality check against a
posting_datetime re-derived from posting_date and posting_time. a row whose
stored posting_datetime differs from that pair matches nothing, so reposting
the voucher silently processes zero entries and the row can never be corrected
through its own voucher.
read the timestamp from the stored row when the sle is known, and derive it
only as a fallback.
* test(stock): cover repost with diverged posting_datetime
add a repack scenario whose incoming entry stores a posting_datetime one
microsecond before its own posting_time. asserts the voucher lookup still
finds that entry, and that reposting replays it instead of reusing its stale
qty_after_transaction, which otherwise left bin qty at 115 against 615 of
recorded movements.
(cherry picked from commit 6cee9c330c )
# Conflicts:
# erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py
2026-09-17 18:28:07 +05:30
Afsal Syed
1e862b232c
fix(stock): allow zero completed quantity and handle process loss in job cards ( #59104 )
...
(cherry picked from commit 1d8ce1ee8c )
2026-09-17 18:07:54 +05:30
Sudharsanan Ashok
f6b2708f4e
Merge pull request #59095 from frappe/mergify/bp/version-15-hotfix/pr-58899
...
fix: clear stock value for zero-quantity balances (backport #58899 )
2026-09-17 11:10:24 +05:30
pandiyan
65d2a07596
fix: clear stock value for zero-quantity balances ( #58899 )
...
* fix: clear stock value for zero-quantity balances
* test(stock): cover zero-quantity residual stock values
(cherry picked from commit b439bdda68 )
2026-09-17 10:52:56 +05:30
rohitwaghchaure
0130d287f6
perf: skip legacy batch ledger lookups when no legacy entry exists ( #59110 )
...
* perf: skip legacy batch ledger lookups when no legacy entry exists
2026-09-16 11:45:49 +00:00
Shllokkk
30cfb2094f
Merge pull request #59107 from frappe/mergify/bp/version-15-hotfix/pr-59078
...
fix: render letter head jinja in statement of accounts pdf (backport #59078 )
2026-09-16 16:44:20 +05:30
rohitwaghchaure
a37725b6b9
fix: negative stock value for moving average item with mixed batchwise valuation ( #59102 )
...
* fix: negative stock value for moving average item with mixed batchwise valuation
* test: cover fallback rate and equal timestamp valuation paths
2026-09-16 16:29:06 +05:30
mergify[bot]
db2e9efab4
fix: update modified for last purchase rate (backport #59044 ) ( #59105 )
...
fix: update modified for last purchase rate (#59044 )
(cherry picked from commit f6b907ef9d )
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-09-16 10:14:44 +00:00
Shllokkk
b8a53b800a
fix: render letter head jinja in statement of accounts pdf
...
(cherry picked from commit da377683d6 )
2026-09-16 10:10:12 +00:00
Vishnu Priya Baskaran
a7aae8b21a
fix: prevent max recursion on supplier scorecard save ( #58706 )
2026-09-16 13:12:03 +05:30
pandiyan
50b6b850e4
fix(stock): filter item group defaults by company and non-group records ( #58923 )
...
(cherry picked from commit 00ee694444 )
2026-09-16 12:05:13 +05:30
Sudharsanan Ashok
b4dd2ee80f
Merge pull request #59015 from frappe/mergify/bp/version-15-hotfix/pr-58994
...
fix(stock): calculate batch bundle valuation per unit (backport #58994 )
2026-09-16 11:03:50 +05:30
mergify[bot]
e2830089fb
fix: resolve code lists by URI and version (backport #58770 ) ( #58771 )
...
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
2026-09-16 02:37:15 +02:00
Frappe PR Bot
26f0687834
chore(release): Bumped to Version 15.121.3
...
## [15.121.3](https://github.com/frappe/erpnext/compare/v15.121.2...v15.121.3 ) (2026-09-15)
### Bug Fixes
* % Amount Billed exceeds 100% on fully rejected Purchase Receipts ([#58897 ](https://github.com/frappe/erpnext/issues/58897 )) ([c31ae57 ](c31ae577e4 ))
* **accounts:** add permission checks on `execute_repost_payment_ledger` (backport [#58980 ](https://github.com/frappe/erpnext/issues/58980 )) ([#58981 ](https://github.com/frappe/erpnext/issues/58981 )) ([85a1529 ](85a152946e ))
* **accounts:** add permission checks on `invoice_discounting.get_invoices` (backport [#58975 ](https://github.com/frappe/erpnext/issues/58975 )) ([#58989 ](https://github.com/frappe/erpnext/issues/58989 )) ([62b9f31 ](62b9f31297 ))
* **accounts:** reject disabled price lists in buying and selling ([#58891 ](https://github.com/frappe/erpnext/issues/58891 )) ([47662b9 ](47662b9af2 ))
* **accounts:** stop counting received qty on non-stock invoice returns (backport [#58924 ](https://github.com/frappe/erpnext/issues/58924 )) ([#58928 ](https://github.com/frappe/erpnext/issues/58928 )) ([228108a ](228108ad4c ))
* Backfill `not_applicable` on Item Tax Template Details for German companies (backport [#54682 ](https://github.com/frappe/erpnext/issues/54682 )) (backport [#54686 ](https://github.com/frappe/erpnext/issues/54686 )) ([#58952 ](https://github.com/frappe/erpnext/issues/58952 )) ([f943368 ](f9433683ec ))
* keep a dunning claimable until its interest is paid too ([11c6f0d ](11c6f0d02c ))
* **manufacturing:** handle empty raw materials in workstation ([#58927 ](https://github.com/frappe/erpnext/issues/58927 )) ([c72bc69 ](c72bc6925b ))
* prevent disabled items from being used in bom ([#58997 ](https://github.com/frappe/erpnext/issues/58997 )) ([7429a26 ](7429a260f6 ))
* reset price list fallback when changing parties ([#58893 ](https://github.com/frappe/erpnext/issues/58893 )) ([f981791 ](f981791012 ))
* resolve conflicts ([e84a946 ](e84a94642d ))
* resolve conflicts ([00729a8 ](00729a8d62 ))
* **selling:** add email permission check on `send_emails` (backport [#58935 ](https://github.com/frappe/erpnext/issues/58935 )) ([#58937 ](https://github.com/frappe/erpnext/issues/58937 )) ([e37ba3f ](e37ba3f8cf ))
* **selling:** exclude fully billed orders from the invoice picker (backport [#58966 ](https://github.com/frappe/erpnext/issues/58966 )) ([#58968 ](https://github.com/frappe/erpnext/issues/58968 )) ([52ea7ed ](52ea7ed606 ))
* **stock:** distribute additional costs when incoming items have no value ([10987b1 ](10987b11cc ))
* **stock:** do not rebuild the Warehouse tree on an account map miss (backport [#58956 ](https://github.com/frappe/erpnext/issues/58956 )) ([#58972 ](https://github.com/frappe/erpnext/issues/58972 )) ([f59a6ec ](f59a6ec882 ))
* **stock:** guard inventory dimension lookup without reference document ([#58889 ](https://github.com/frappe/erpnext/issues/58889 )) ([7ee54ba ](7ee54ba08b ))
* **stock:** preserve rates for unsaved mapped rows (backport [#58852 ](https://github.com/frappe/erpnext/issues/58852 )) ([#58898 ](https://github.com/frappe/erpnext/issues/58898 )) ([32d8c35 ](32d8c359ed ))
* **stock:** recalculate billing status of returned delivery notes (backport [#58953 ](https://github.com/frappe/erpnext/issues/58953 )) ([#58986 ](https://github.com/frappe/erpnext/issues/58986 )) ([563615c ](563615c77e ))
* **stock:** remove empty delivery stops after mapping ([#58896 ](https://github.com/frappe/erpnext/issues/58896 )) ([0099e7e ](0099e7ec4f ))
* **stock:** set item_name to fetch if empty in packing slip item ([#58925 ](https://github.com/frappe/erpnext/issues/58925 )) ([99afc2e ](99afc2e6eb ))
* **stock:** set item_name to fetch if empty in packing slip item ([#58925 ](https://github.com/frappe/erpnext/issues/58925 )) ([9ba2159 ](9ba2159720 ))
* **stock:** show actual outgoing rate in ledger preview ([#58700 ](https://github.com/frappe/erpnext/issues/58700 )) ([372244e ](372244e6b2 ))
* **subcontracting:** validate project across the subcontracting flow ([#58965 ](https://github.com/frappe/erpnext/issues/58965 )) ([1150d8e ](1150d8e9b0 ))
* user not able to set valuation rate zero in stock reco (backport [#58800 ](https://github.com/frappe/erpnext/issues/58800 )) ([#58821 ](https://github.com/frappe/erpnext/issues/58821 )) ([3bd194e ](3bd194e986 ))
* validate shelf life for automatically created expiring batches ([#58911 ](https://github.com/frappe/erpnext/issues/58911 )) ([00e02f0 ](00e02f07ac ))
2026-09-15 18:35:09 +00:00
Diptanil Saha
f2cfe30596
Merge pull request #59072 from frappe/version-15-hotfix
...
chore: release v15
2026-09-16 00:03:25 +05:30
Sudharsanan Ashok
641f8e56a2
Merge pull request #59012 from frappe/mergify/bp/version-15-hotfix/pr-58997
...
fix: prevent disabled items from being used in BOM (backport #58997 )
2026-09-15 22:07:10 +05:30
Sudharsanan Ashok
f6bac4c6ee
Merge pull request #59077 from frappe/mergify/bp/version-15-hotfix/pr-58925
...
fix(stock): set item_name to fetch if empty in packing slip item (backport #58925 )
2026-09-15 18:55:46 +05:30
mergify[bot]
112350dd65
fix(regional)!: remove irs_1099_print whitelisted method (backport #58976 ) ( #58991 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-09-15 18:40:22 +05:30
Afsal Syed
99afc2e6eb
fix(stock): set item_name to fetch if empty in packing slip item ( #58925 )
...
(cherry picked from commit f130c64530 )
# Conflicts:
# erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
2026-09-15 18:35:56 +05:30
Sudharsanan Ashok
1c576a6f1c
Merge pull request #59075 from frappe/revert-58942-mergify/bp/version-15-hotfix/pr-58925
...
Revert "fix(stock): set item_name to fetch if empty in packing slip item (backport #58925 )"
2026-09-15 18:05:44 +05:30
Sudharsanan Ashok
618864a051
Revert "fix(stock): set item_name to fetch if empty in packing slip item (backport #58925 )"
2026-09-15 17:47:47 +05:30
Sudharsanan Ashok
d9ea9a5430
Merge pull request #58942 from frappe/mergify/bp/version-15-hotfix/pr-58925
...
fix(stock): set item_name to fetch if empty in packing slip item (backport #58925 )
2026-09-15 17:42:52 +05:30
Afsal Syed
9ba2159720
fix(stock): set item_name to fetch if empty in packing slip item ( #58925 )
...
(cherry picked from commit f130c64530 )
# Conflicts:
# erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
2026-09-15 16:38:36 +05:30
Sudharsanan Ashok
602803cce0
Merge pull request #59040 from frappe/mergify/bp/version-15-hotfix/pr-58965
...
fix(subcontracting): validate project across the subcontracting flow (backport #58965 )
2026-09-13 17:53:20 +05:30
Sudharsanan11
e84a94642d
fix: resolve conflicts
2026-09-13 12:12:16 +05:30
Sudharsanan Ashok
1150d8e9b0
fix(subcontracting): validate project across the subcontracting flow ( #58965 )
...
(cherry picked from commit fe25746feb )
# Conflicts:
# erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py
# erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py
# erpnext/subcontracting/doctype/subcontracting_receipt/mapper.py
2026-09-13 06:29:16 +00:00
pandiyan
7429a260f6
fix: prevent disabled items from being used in bom ( #58997 )
...
Co-authored-by: Ajish18 <ajishiyappan1@gmail.com >
(cherry picked from commit e6f431a8d6 )
2026-09-12 21:58:25 +05:30
pandiyan
7df94d87de
fix(stock): calculate batch bundle valuation per unit ( #58994 )
...
(cherry picked from commit 825d24f406 )
2026-09-12 21:58:24 +05:30
mergify[bot]
f9433683ec
fix: Backfill not_applicable on Item Tax Template Details for German companies (backport #54682 ) (backport #54686 ) ( #58952 )
...
* fix: Backfill `not_applicable` on Item Tax Template Details for German companies (backport #54682 ) (#54686 )
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
fix: Backfill `not_applicable` on Item Tax Template Details for German companies (#54682 )
(cherry picked from commit a22d773341 )
# Conflicts:
# erpnext/patches.txt
* chore: resolve conflict
* fix: compare zero-rate row count, not just the identifier set
* chore: correct comment on account name uniqueness
* test: cover German `not_applicable` backfill patch
Run the patch against a company seeded from the shipped German defaults:
matching defaults are backfilled, customised templates and templates with a
duplicate account name are left alone, and a rerun changes nothing.
---------
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com >
2026-09-11 13:21:39 +02:00
mergify[bot]
62b9f31297
fix(accounts): add permission checks on invoice_discounting.get_invoices (backport #58975 ) ( #58989 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-09-11 04:42:54 +00:00
mergify[bot]
85a152946e
fix(accounts): add permission checks on execute_repost_payment_ledger (backport #58980 ) ( #58981 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-09-11 09:38:50 +05:30
mergify[bot]
563615c77e
fix(stock): recalculate billing status of returned delivery notes (backport #58953 ) ( #58986 )
...
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
2026-09-11 00:56:26 +02:00
Mihir Kandoi
52ea7ed606
fix(selling): exclude fully billed orders from the invoice picker (backport #58966 ) ( #58968 )
2026-09-10 20:51:03 +05:30
mergify[bot]
f59a6ec882
fix(stock): do not rebuild the Warehouse tree on an account map miss (backport #58956 ) ( #58972 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-09-10 13:09:00 +00:00
Sudharsanan Ashok
bb0140ff3f
Merge pull request #58946 from frappe/mergify/bp/version-15-hotfix/pr-58927
...
fix(manufacturing): handle empty raw materials in workstation (backport #58927 )
2026-09-10 18:08:52 +05:30
pandiyan
c72bc6925b
fix(manufacturing): handle empty raw materials in workstation ( #58927 )
...
(cherry picked from commit 3be0c7801a )
2026-09-10 11:44:42 +05:30
mergify[bot]
e37ba3f8cf
fix(selling): add email permission check on send_emails (backport #58935 ) ( #58937 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-09-09 10:58:21 +00:00
Shllokkk
46c792f976
Merge pull request #58934 from frappe/mergify/bp/version-15-hotfix/pr-58897
...
fix: % Amount Billed exceeds 100% on fully rejected Purchase Receipts (backport #58897 )
2026-09-09 15:33:07 +05:30
Shllokkk
c31ae577e4
fix: % Amount Billed exceeds 100% on fully rejected Purchase Receipts ( #58897 )
...
* fix: include rejected qty in Purchase Receipt billing base
* test: per billed stays 100% for fully rejected receipt
(cherry picked from commit 79c8e4db7f )
2026-09-09 09:34:29 +00:00
Frappe PR Bot
df8b7f9648
chore(release): Bumped to Version 15.121.2
...
## [15.121.2](https://github.com/frappe/erpnext/compare/v15.121.1...v15.121.2 ) (2026-09-09)
### Bug Fixes
* **stock:** preserve rates for unsaved mapped rows (backport [#58852 ](https://github.com/frappe/erpnext/issues/58852 )) (backport [#58898 ](https://github.com/frappe/erpnext/issues/58898 )) ([#58916 ](https://github.com/frappe/erpnext/issues/58916 )) ([0deed27 ](0deed27cfe ))
2026-09-09 09:24:59 +00:00
mergify[bot]
0deed27cfe
fix(stock): preserve rates for unsaved mapped rows (backport #58852 ) (backport #58898 ) ( #58916 )
...
fix(stock): preserve rates for unsaved mapped rows (backport #58852 ) (#58898 )
* fix: keep each row's own rate under maintain same rate
* test: cover maintain-same-rate rate lock for batch items
(cherry picked from commit 32d8c359ed )
Co-authored-by: Shllokkk <140623894+Shllokkk@users.noreply.github.com >
2026-09-09 14:53:20 +05:30
mergify[bot]
228108ad4c
fix(accounts): stop counting received qty on non-stock invoice returns (backport #58924 ) ( #58928 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-09-09 09:20:26 +00:00
Sudharsanan Ashok
75a5d2b766
Merge pull request #58920 from frappe/mergify/bp/version-15-hotfix/pr-58896
...
fix(stock): remove empty delivery stops after mapping (backport #58896 )
2026-09-09 13:33:13 +05:30
Sudharsanan Ashok
27f93a83ef
Merge pull request #58914 from frappe/mergify/bp/version-15-hotfix/pr-58911
...
fix: validate shelf life for automatically created expiring batches (backport #58911 )
2026-09-09 13:24:59 +05:30
Sudharsanan Ashok
9822ffc334
Merge pull request #58912 from frappe/mergify/bp/version-15-hotfix/pr-58893
...
fix: reset price list fallback when changing parties (backport #58893 )
2026-09-09 13:24:12 +05:30
Sudharsanan Ashok
fc6791e57b
Merge pull request #58903 from frappe/mergify/bp/version-15-hotfix/pr-58889
...
fix(stock): guard inventory dimension lookup without reference document (backport #58889 )
2026-09-09 13:23:46 +05:30
Sudharsanan Ashok
916b581562
Merge pull request #58900 from frappe/mergify/bp/version-15-hotfix/pr-58891
...
fix(accounts): reject disabled price lists in buying and selling (backport #58891 )
2026-09-09 13:23:13 +05:30
Khushi Rawat
63e7c2e44f
Merge pull request #58907 from frappe/mergify/bp/version-15-hotfix/pr-58227
...
fix: keep a dunning claimable until its interest is paid too (backport #58227 )
2026-09-09 13:09:48 +05:30
pandiyan
0099e7ec4f
fix(stock): remove empty delivery stops after mapping ( #58896 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
(cherry picked from commit 4b23cee2ea )
2026-09-09 13:03:06 +05:30
pandiyan
11c6f0d02c
fix: keep a dunning claimable until its interest is paid too
...
a dunning was resolved as soon as the invoiced sum was settled, because the
status was derived from the invoice outstanding alone. paying an invoice
without the interest and fee therefore closed the dunning and lost the
interest: a fresh dunning finds nothing overdue to charge it on.
the dunning amount is never a receivable, it only reaches the ledger as a
negative deduction on a payment entry made from the dunning. link that row
to the dunning so what has been collected is known, and resolve a dunning
only once the invoiced sum and the dunning amount are both paid. a dunning
resolved by hand keeps its status, so waiving the interest stays possible.
the deduction is a company currency field, so book and measure the dunning
amount through base_dunning_amount instead of the transaction currency one.
an interest-only payment leaves every invoice outstanding untouched, so
update the linked dunnings from the payment entry itself instead of relying
on the outstanding amount to change. such a payment also has to be built
from what is left to collect, not from the totals the dunning was raised
with, which are stale by then.
(cherry picked from commit d5a9d158f9 )
2026-09-09 12:39:18 +05:30
pandiyan
da53283659
test: dunning must stay unpaid when only the invoiced sum is paid
...
paying a dunned invoice without its interest and fee marks the dunning
resolved, and the interest can no longer be collected.
(cherry picked from commit fa89552d10 )
2026-09-09 12:39:18 +05:30
Shllokkk
32d8c359ed
fix(stock): preserve rates for unsaved mapped rows (backport #58852 ) ( #58898 )
...
* fix: keep each row's own rate under maintain same rate
* test: cover maintain-same-rate rate lock for batch items
2026-09-09 12:38:58 +05:30
Pandiyan P
00e02f07ac
fix: validate shelf life for automatically created expiring batches ( #58911 )
...
Co-authored-by: Ajish18 <ajishiyappan1@gmail.com >
(cherry picked from commit b2bdeaa672 )
2026-09-09 07:07:22 +00:00
Pandiyan P
f981791012
fix: reset price list fallback when changing parties ( #58893 )
...
(cherry picked from commit 4c32acf300 )
2026-09-09 06:56:26 +00:00
Sudharsanan Ashok
f6870786c5
Merge pull request #58888 from frappe/mergify/bp/version-15-hotfix/pr-58887
...
fix(stock): distribute additional costs when incoming items have no value (backport #58842 ) (backport #58887 )
2026-09-09 11:14:21 +05:30
Sudharsanan11
00729a8d62
fix: resolve conflicts
2026-09-09 10:38:34 +05:30
Sudharsanan11
10987b11cc
fix(stock): distribute additional costs when incoming items have no value
...
(cherry picked from commit b6035810f0 )
# Conflicts:
# erpnext/stock/doctype/stock_entry/test_stock_entry.py
2026-09-09 10:38:34 +05:30
pandiyan
47662b9af2
fix(accounts): reject disabled price lists in buying and selling ( #58891 )
...
(cherry picked from commit f8c2f3440b )
2026-09-09 09:55:37 +05:30
mergify[bot]
3bd194e986
fix: user not able to set valuation rate zero in stock reco (backport #58800 ) ( #58821 )
...
* fix: user not able to set valuation rate zero in stock reco (#58800 )
* fix: user not able to set valuation rate zero in stock reco
* fix: wrong difference amount when valuation rate is zero
* fix: blank valuation rate should not be treated as a change
(cherry picked from commit e85e300f8f )
# Conflicts:
# erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
* chore: fix conflicts
Removed unused import statements and cleaned up the code.
---------
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-09-09 04:20:51 +00:00
Pandiyan P
7ee54ba08b
fix(stock): guard inventory dimension lookup without reference document ( #58889 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
(cherry picked from commit afd93cf867 )
2026-09-09 02:12:59 +00:00
Sudharsanan Ashok
b6120ea56a
Merge pull request #58882 from frappe/mergify/bp/version-15-hotfix/pr-58700
...
fix(stock): show actual outgoing rate in ledger preview (backport #58700 )
2026-09-08 19:32:09 +05:30
Frappe PR Bot
fdc48277a8
chore(release): Bumped to Version 15.121.1
...
## [15.121.1](https://github.com/frappe/erpnext/compare/v15.121.0...v15.121.1 ) (2026-09-08)
### Bug Fixes
* **accounts:** reject same-account internal transfers ([#58529 ](https://github.com/frappe/erpnext/issues/58529 )) ([05a1127 ](05a1127587 ))
* **accounts:** round journal entry totals to field precision (backport [#58629 ](https://github.com/frappe/erpnext/issues/58629 )) ([#58874 ](https://github.com/frappe/erpnext/issues/58874 )) ([96357b4 ](96357b4fdc ))
* **accounts:** support drop-shipped items in Gross Profit report ([#58686 ](https://github.com/frappe/erpnext/issues/58686 )) ([6c6ee7c ](6c6ee7c524 ))
* add reconciliation after submit logic for bank transactions ([#57330 ](https://github.com/frappe/erpnext/issues/57330 )) ([2ee5f6b ](2ee5f6b1c4 ))
* **batch:** show Expired status only after expiry date has passed ([#58736 ](https://github.com/frappe/erpnext/issues/58736 )) ([cd93007 ](cd93007780 ))
* check material request price list permission ([#58740 ](https://github.com/frappe/erpnext/issues/58740 )) ([a348d41 ](a348d413d0 ))
* check write permission in whitelisted document methods (backport [#58689 ](https://github.com/frappe/erpnext/issues/58689 )) ([#58702 ](https://github.com/frappe/erpnext/issues/58702 )) ([baa30e7 ](baa30e703d ))
* **crm:** check read permission on lead in add_lead_to_prospect ([4dd56ec ](4dd56ec4e6 ))
* **crm:** validate contact email before saving an email campaign (backport [#58667 ](https://github.com/frappe/erpnext/issues/58667 )) ([#58671 ](https://github.com/frappe/erpnext/issues/58671 )) ([1ea597d ](1ea597d6b5 ))
* fetch accounts by company (backport [#58523 ](https://github.com/frappe/erpnext/issues/58523 )) ([#58878 ](https://github.com/frappe/erpnext/issues/58878 )) ([2c2a3e9 ](2c2a3e9f10 ))
* filter cancelled BOMs in BOM Stock Analysis ([#58647 ](https://github.com/frappe/erpnext/issues/58647 )) ([fff2616 ](fff261680c ))
* **gross-profit:** include item_name in export ([#58631 ](https://github.com/frappe/erpnext/issues/58631 )) ([c752bb3 ](c752bb34a8 ))
* include payment deductions in sales/purchase register ledger bal… (backport [#58437 ](https://github.com/frappe/erpnext/issues/58437 )) ([#58679 ](https://github.com/frappe/erpnext/issues/58679 )) ([24e7ff5 ](24e7ff55de ))
* persist rendered terms on transaction save ([#58858 ](https://github.com/frappe/erpnext/issues/58858 )) ([24cac30 ](24cac30aa9 ))
* **pos:** use company-currency change amount when netting pos gl entries (backport [#58599 ](https://github.com/frappe/erpnext/issues/58599 )) ([#58677 ](https://github.com/frappe/erpnext/issues/58677 )) ([c7d865e ](c7d865ef3b ))
* resolve conflicts ([95b2030 ](95b203079a ))
* **selling:** fetch orders within billing allowance (backport [#58751 ](https://github.com/frappe/erpnext/issues/58751 )) ([#58822 ](https://github.com/frappe/erpnext/issues/58822 )) ([a64b78d ](a64b78d283 ))
* **setup:** strict permissions for transaction deletion record (backport [#58687 ](https://github.com/frappe/erpnext/issues/58687 )) ([#58722 ](https://github.com/frappe/erpnext/issues/58722 )) ([934c7d8 ](934c7d833c ))
* show cost center for unmatched payments in receivables (backport [#58453 ](https://github.com/frappe/erpnext/issues/58453 )) ([#58880 ](https://github.com/frappe/erpnext/issues/58880 )) ([69f38a0 ](69f38a04c8 ))
* skip zero quantity items in production plan material requests ([#58642 ](https://github.com/frappe/erpnext/issues/58642 )) ([3217a69 ](3217a69fc2 ))
* **stock:** recalculate delivery note billing after return ([#58869 ](https://github.com/frappe/erpnext/issues/58869 )) ([b409ded ](b409ded2f6 ))
### Reverts
* **manufacturing:** remove material coverage changes on version 15 ([#58715 ](https://github.com/frappe/erpnext/issues/58715 )) ([7cbf8b8 ](7cbf8b8660 ))
2026-09-08 13:48:11 +00:00
Diptanil Saha
8635652c90
Merge pull request #58867 from frappe/version-15-hotfix
...
chore: release v15
2026-09-08 19:16:20 +05:30
Afsal Syed
372244e6b2
fix(stock): show actual outgoing rate in ledger preview ( #58700 )
...
(cherry picked from commit 71f1edeb1c )
2026-09-08 19:11:06 +05:30
mergify[bot]
c7d865ef3b
fix(pos): use company-currency change amount when netting pos gl entries (backport #58599 ) ( #58677 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-09-08 13:23:45 +00:00
mergify[bot]
2c2a3e9f10
fix: fetch accounts by company (backport #58523 ) ( #58878 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
2026-09-08 18:18:36 +05:30
mergify[bot]
96357b4fdc
fix(accounts): round journal entry totals to field precision (backport #58629 ) ( #58874 )
...
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com >
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-09-08 12:47:54 +00:00
Sudharsanan Ashok
13367a5c54
Merge pull request #58872 from frappe/mergify/bp/version-15-hotfix/pr-58869
...
fix(stock): recalculate delivery note billing after return (backport #58869 )
2026-09-08 18:10:08 +05:30
Sudharsanan Ashok
28918c8338
Merge pull request #58876 from frappe/mergify/bp/version-15-hotfix/pr-58529
...
fix(accounts): reject same-account internal transfers (backport #58529 )
2026-09-08 18:09:11 +05:30
Sudharsanan Ashok
341089ce35
Merge pull request #58863 from frappe/mergify/bp/version-15-hotfix/pr-58631
...
fix(gross-profit): include item_name in export (backport #58631 )
2026-09-08 18:05:08 +05:30
Sudharsanan Ashok
a8c6cec5a3
Merge pull request #58861 from frappe/mergify/bp/version-15-hotfix/pr-58858
...
fix: persist rendered terms on transaction save (backport #58858 )
2026-09-08 18:04:24 +05:30
Sudharsanan Ashok
89b29eee94
Merge pull request #58762 from frappe/mergify/bp/version-15-hotfix/pr-57330
...
fix: add reconciliation after submit logic for bank transactions (backport #57330 )
2026-09-08 18:02:38 +05:30
Pandiyan P
b409ded2f6
fix(stock): recalculate delivery note billing after return ( #58869 )
...
(cherry picked from commit f864333afa )
# Conflicts:
# erpnext/stock/doctype/delivery_note/services/billing_status.py
2026-09-08 17:38:48 +05:30
mergify[bot]
69f38a04c8
fix: show cost center for unmatched payments in receivables (backport #58453 ) ( #58880 )
...
Co-authored-by: Krishna Pramod Shirsath <91021227+krishna-254@users.noreply.github.com >
2026-09-08 17:33:31 +05:30
Pandiyan P
05a1127587
fix(accounts): reject same-account internal transfers ( #58529 )
...
(cherry picked from commit 36a4dfe797 )
# Conflicts:
# erpnext/accounts/doctype/payment_entry/test_payment_entry.py
2026-09-08 16:51:53 +05:30
Sudharsanan Ashok
940fda3327
Merge pull request #58859 from frappe/mergify/bp/version-15-hotfix/pr-58841
...
fix: skip zero quantity items in production plan material requests (backport #58841 )
2026-09-08 15:59:18 +05:30
Sudharsanan11
95b203079a
fix: resolve conflicts
2026-09-08 15:21:30 +05:30
Vishnu Priya Baskaran
c752bb34a8
fix(gross-profit): include item_name in export ( #58631 )
...
(cherry picked from commit 467f54162f )
2026-09-08 09:13:58 +00:00
Pandiyan P
24cac30aa9
fix: persist rendered terms on transaction save ( #58858 )
...
(cherry picked from commit cadc0ca86d )
2026-09-08 07:58:53 +00:00
Mihir Kandoi
a64b78d283
fix(selling): fetch orders within billing allowance (backport #58751 ) ( #58822 )
2026-09-08 09:16:56 +05:30
Mihir Kandoi
4a3a2cbdc4
test(stock): use existing warehouse fixtures in Pick List tests (v15) ( #58840 )
2026-09-07 15:22:12 +00:00
Mihir Kandoi
6c6ee7c524
fix(accounts): support drop-shipped items in Gross Profit report ( #58686 )
...
* fix(reports): apportion drop-ship buying cost and fix return-matching bug in Gross Profit report
* test(accounts): fix Gross Profit test setup
---------
Co-authored-by: ervishnucs <ervishnucs369@gmail.com >
2026-09-07 15:52:57 +05:30
rohitwaghchaure
baa30e703d
fix: check write permission in whitelisted document methods (backport #58689 ) ( #58702 )
...
* fix: check write permission in whitelisted document methods
* test: permission coverage for production plan status roll-ups
* fix: add type hints to whitelisted arguments and submit MR in test
* test: clear request cache before reading non-completed production plans
2026-09-07 15:20:22 +05:30
Mihir Kandoi
684def8818
test(manufacturing): refresh cached production plans before assertion ( #58801 )
2026-09-07 09:13:45 +00:00
Vishnu Priya Baskaran
2ee5f6b1c4
fix: add reconciliation after submit logic for bank transactions ( #57330 )
...
Co-authored-by: Poovetha <poovethapalanivelu@gmail.com >
(cherry picked from commit c3319d74cf )
2026-09-04 11:35:56 +00:00
Mihir Kandoi
7cbf8b8660
revert(manufacturing): remove material coverage changes on version 15 ( #58715 )
2026-09-04 14:32:57 +05:30
Sudharsanan Ashok
0611a6a12b
Merge pull request #58753 from frappe/mergify/bp/version-15-hotfix/pr-58740
...
fix: check material request price list permission (backport #58740 )
2026-09-04 13:07:44 +05:30
Pandiyan P
a348d413d0
fix: check material request price list permission ( #58740 )
...
(cherry picked from commit 0b1f1d6851 )
2026-09-04 07:33:07 +00:00
Sudharsanan Ashok
452db26ccb
Merge pull request #58748 from frappe/mergify/bp/version-15-hotfix/pr-58736
...
fix(batch): show Expired status only after expiry date has passed (backport #58736 )
2026-09-04 13:00:37 +05:30
mergify[bot]
934c7d833c
fix(setup): strict permissions for transaction deletion record (backport #58687 ) ( #58722 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-09-04 06:53:44 +00:00
Pandiyan P
cd93007780
fix(batch): show Expired status only after expiry date has passed ( #58736 )
...
Co-authored-by: Ajish18 <ajishiyappan1@gmail.com >
(cherry picked from commit 00f04fc084 )
2026-09-04 06:51:10 +00:00
mergify[bot]
24e7ff55de
fix: include payment deductions in sales/purchase register ledger bal… (backport #58437 ) ( #58679 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
2026-09-02 17:01:20 +05:30
Shllokkk
5f647f0702
Merge pull request #58690 from frappe/mergify/bp/version-15-hotfix/pr-58684
...
fix(crm): check read permission on lead in add_lead_to_prospect (backport #58684 )
2026-09-02 16:01:56 +05:30
Krishna Pramod Shirsath
7ab4092561
Merge pull request #58695 from frappe/mergify/bp/version-15-hotfix/pr-58647
...
fix: filter cancelled BOMs in BOM Stock Analysis (backport #58647 )
2026-09-02 15:31:03 +05:30
Krishna Pramod Shirsath
fff261680c
fix: filter cancelled BOMs in BOM Stock Analysis ( #58647 )
...
(cherry picked from commit a2071a6fdd )
# Conflicts:
# erpnext/manufacturing/report/bom_stock_analysis/bom_stock_analysis.js
2026-09-02 09:59:16 +00:00
mergify[bot]
1ea597d6b5
fix(crm): validate contact email before saving an email campaign (backport #58667 ) ( #58671 )
...
Co-authored-by: kaulith <64089478+kaulith@users.noreply.github.com >
2026-09-02 15:12:57 +05:30
Shllokkk
4dd56ec4e6
fix(crm): check read permission on lead in add_lead_to_prospect
...
(cherry picked from commit 02fcdc0337 )
# Conflicts:
# erpnext/crm/doctype/lead/lead.py
2026-09-02 15:01:41 +05:30
Krishna Pramod Shirsath
3217a69fc2
fix: skip zero quantity items in production plan material requests ( #58642 )
2026-09-02 13:32:41 +05:30
Frappe PR Bot
1a0bf0bf6c
chore(release): Bumped to Version 15.121.0
...
# [15.121.0](https://github.com/frappe/erpnext/compare/v15.120.0...v15.121.0 ) (2026-09-02)
### Bug Fixes
* **accounts:** set pos profile on invoices respecting user permissions (backport [#58508 ](https://github.com/frappe/erpnext/issues/58508 )) ([#58518 ](https://github.com/frappe/erpnext/issues/58518 )) ([1187fb8 ](1187fb8e01 ))
* **accounts:** validate frozen accounts in period closing voucher ([#58477 ](https://github.com/frappe/erpnext/issues/58477 )) ([045d708 ](045d7086d1 ))
* add missing perm checks on various whitelisted methods (backport [#58652 ](https://github.com/frappe/erpnext/issues/58652 )) ([#58653 ](https://github.com/frappe/erpnext/issues/58653 )) ([547d82d ](547d82da56 ))
* add type hints to make_request_for_quotation ([567730e ](567730e38e ))
* **bank_statement_import:** add missing permission check on multiple whitelisted methods (backport [#58221 ](https://github.com/frappe/erpnext/issues/58221 )) ([#58223 ](https://github.com/frappe/erpnext/issues/58223 )) ([fa903f4 ](fa903f40fd ))
* clarify duplicate internal party messages ([#58469 ](https://github.com/frappe/erpnext/issues/58469 )) ([17208e7 ](17208e7434 ))
* **company:** throw if linked to demo_company field ([de260bd ](de260bd43c ))
* **crm:** add missing permission validation on `get_contract_template` (backport [#58621 ](https://github.com/frappe/erpnext/issues/58621 )) ([#58622 ](https://github.com/frappe/erpnext/issues/58622 )) ([d1b615b ](d1b615b851 ))
* **crm:** check write permission in edit_note ([2b2a005 ](2b2a005682 ))
* do not map the same row twice in "Get Items From" (backport [#58617 ](https://github.com/frappe/erpnext/issues/58617 )) ([#58618 ](https://github.com/frappe/erpnext/issues/58618 )) ([28175a5 ](28175a5c9d ))
* filter fully ordered items when creating RFQ from Material Request ([08ec311 ](08ec31174c ))
* keep Currency and Price List section open for foreign currency (backport [#58074 ](https://github.com/frappe/erpnext/issues/58074 )) ([#58112 ](https://github.com/frappe/erpnext/issues/58112 )) ([f5ce20f ](f5ce20f122 ))
* keep source rate on re-fetch when maintain same rate is enabled (backport [#57479 ](https://github.com/frappe/erpnext/issues/57479 )) ([#58332 ](https://github.com/frappe/erpnext/issues/58332 )) ([228ab2d ](228ab2d97e )), closes [frappe/erpnext#57436 ](https://github.com/frappe/erpnext/issues/57436 )
* **manufacturing:** preserve job card qty in mr transfer (backport [#58482 ](https://github.com/frappe/erpnext/issues/58482 )) ([#58498 ](https://github.com/frappe/erpnext/issues/58498 )) ([099a5a7 ](099a5a71d9 ))
* **manufacturing:** use packed row delivery date ([#58569 ](https://github.com/frappe/erpnext/issues/58569 )) ([9c19b02 ](9c19b024db ))
* mark item tax templates as not applicable (backport [#54673 ](https://github.com/frappe/erpnext/issues/54673 )) (backport [#54677 ](https://github.com/frappe/erpnext/issues/54677 )) ([#58462 ](https://github.com/frappe/erpnext/issues/58462 )) ([d62f6e7 ](d62f6e715f ))
* persist redistributed additional costs during stock entry repost (backport [#58433 ](https://github.com/frappe/erpnext/issues/58433 )) ([#58532 ](https://github.com/frappe/erpnext/issues/58532 )) ([c4e7cfa ](c4e7cfa6a0 ))
* **projects:** check read permission on source in create_duplicate_project ([af8c010 ](af8c010aa8 ))
* **projects:** ignore cancelled invoices in timesheet portal (backport [#58501 ](https://github.com/frappe/erpnext/issues/58501 )) ([#58503 ](https://github.com/frappe/erpnext/issues/58503 )) ([5a51895 ](5a518951e4 ))
* reset hardcoded letter head on Incorrect Serial and Batch Bundle report ([ccdaa92 ](ccdaa92de8 ))
* resolve analytics backport conflicts ([605918d ](605918d3a2 ))
* resolve conflicts ([c6717fb ](c6717fb758 ))
* resolve stock entry backport conflicts ([e126c45 ](e126c4597b ))
* round party balances to currency precision in Trial Balance for Party ([b98d193 ](b98d193b77 ))
* **selling:** check quotation write permission before marking lost ([#58493 ](https://github.com/frappe/erpnext/issues/58493 )) ([33ebc7d ](33ebc7d7e3 ))
* **selling:** check sales order permission before work order creation ([#58492 ](https://github.com/frappe/erpnext/issues/58492 )) ([0609b06 ](0609b06564 ))
* **sms_settings:** add patch to pre-fill roles into SMS Settings Roles Table ([0cef90d ](0cef90d079 ))
* **stock:** keep pick list links when refetching stock entry items ([22377fa ](22377fa86d ))
* **stock:** load available serial no report (backport [#58558 ](https://github.com/frappe/erpnext/issues/58558 )) ([#58561 ](https://github.com/frappe/erpnext/issues/58561 )) ([2d46bb9 ](2d46bb962c ))
* **stock:** preserve exchange gain loss journals in lcv ([#58505 ](https://github.com/frappe/erpnext/issues/58505 )) ([c6fedf4 ](c6fedf4aca ))
* **stock:** reset bin when a repost finds no stock ledger entries ([#58434 ](https://github.com/frappe/erpnext/issues/58434 )) ([b00062d ](b00062df86 )), closes [#58362 ](https://github.com/frappe/erpnext/issues/58362 )
* **stock:** validate serial inventory dimensions ([#58394 ](https://github.com/frappe/erpnext/issues/58394 )) ([bc071d7 ](bc071d7793 ))
* sum item and its alternate transferred qty on work order required items ([5851bb3 ](5851bb3b6e ))
* **taxes:** skip tax addition for invoice created from opening invoice tool ([7090c6f ](7090c6fdab ))
* **timesheet:** scoping whitelisted methods output to projects and timesheets that are acccessible to users (backport [#58267 ](https://github.com/frappe/erpnext/issues/58267 )) ([#58576 ](https://github.com/frappe/erpnext/issues/58576 )) ([c656497 ](c656497aac ))
* translate doctype in map msg (backport [#58515 ](https://github.com/frappe/erpnext/issues/58515 )) ([#58516 ](https://github.com/frappe/erpnext/issues/58516 )) ([d87a4b2 ](d87a4b2541 ))
* translate label in party validation (backport [#58624 ](https://github.com/frappe/erpnext/issues/58624 )) ([#58625 ](https://github.com/frappe/erpnext/issues/58625 )) ([307ffcd ](307ffcd5c3 ))
* validate items against source Sales Order in Material Request ([32d44c6 ](32d44c6e91 ))
* validate POS Settings invoice and search fields on the server (backport [#58611 ](https://github.com/frappe/erpnext/issues/58611 )) ([#58612 ](https://github.com/frappe/erpnext/issues/58612 )) ([c5bc5f9 ](c5bc5f9c31 ))
* Work Order picks wrong Delivery Date when Sales Order has the same item in multiple rows ([#58527 ](https://github.com/frappe/erpnext/issues/58527 )) ([7454735 ](7454735595 ))
### Features
* **analytics:** filter sales and purchase analytics by entity ([#58402 ](https://github.com/frappe/erpnext/issues/58402 )) ([0dddd00 ](0dddd00073 ))
2026-09-02 07:16:53 +00:00
Diptanil Saha
57266ab474
Merge pull request #58646 from frappe/version-15-hotfix
...
chore: release v15
2026-09-02 12:45:04 +05:30
Shllokkk
865b207340
Merge pull request #58676 from frappe/mergify/bp/version-15-hotfix/pr-58535
...
fix: filter fully ordered items when creating RFQ from Material Request (backport #58535 )
2026-09-02 12:19:57 +05:30
Sudharsanan Ashok
05199aa3bb
Merge pull request #58674 from frappe/mergify/bp/version-15-hotfix/pr-58505
...
fix(stock): preserve exchange gain loss journals in lcv (backport #58505 )
2026-09-02 12:13:02 +05:30
Shllokkk
4a4e1908e3
chore: resolve backport conflict
2026-09-02 11:50:21 +05:30
Shllokkk
b439deda88
test: set schedule date on PO before insert
...
(cherry picked from commit 5af60cf2e3 )
2026-09-02 06:16:30 +00:00
Shllokkk
567730e38e
fix: add type hints to make_request_for_quotation
...
(cherry picked from commit 4435f166ea )
2026-09-02 06:16:30 +00:00
Shllokkk
3d563a2e08
test: RFQ from Material Request skips fully ordered items
...
(cherry picked from commit 5adcb28b3c )
# Conflicts:
# erpnext/stock/doctype/material_request/test_material_request.py
2026-09-02 06:16:29 +00:00
Shllokkk
08ec31174c
fix: filter fully ordered items when creating RFQ from Material Request
...
(cherry picked from commit 9b1d907b6a )
2026-09-02 06:16:29 +00:00
Pandiyan P
c6fedf4aca
fix(stock): preserve exchange gain loss journals in lcv ( #58505 )
...
(cherry picked from commit 2b54a581f8 )
2026-09-02 06:14:58 +00:00
mergify[bot]
547d82da56
fix: add missing perm checks on various whitelisted methods (backport #58652 ) ( #58653 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-09-01 14:16:38 +00:00
Shllokkk
d704dc474e
Merge pull request #58648 from frappe/mergify/bp/version-15-hotfix/pr-58607
...
fix: round party balances to currency precision in Trial Balance for Party (backport #58607 )
2026-09-01 16:42:52 +05:30
Aarol D'Souza
46a99ec216
Merge pull request #58636 from frappe/mergify/bp/version-15-hotfix/pr-58586
...
fix(sms_settings): add patch to pre-fill roles into SMS Settings Role Table (backport #58586 )
2026-09-01 15:46:14 +05:30
Shllokkk
b98d193b77
fix: round party balances to currency precision in Trial Balance for Party
...
(cherry picked from commit b1c7657dfa )
2026-09-01 09:49:32 +00:00
Diptanil Saha
5289982059
fix(accounts)!: add permission checks on payment entry whitelisted methods ( #58643 )
2026-09-01 15:17:57 +05:30
AarDG10
2f2a9301d8
chore: resolve conflicts
2026-09-01 12:55:27 +05:30
AarDG10
0cef90d079
fix(sms_settings): add patch to pre-fill roles into SMS Settings Roles Table
...
(cherry picked from commit 3501beb2bd )
# Conflicts:
# erpnext/patches.txt
2026-09-01 07:18:22 +00:00
mergify[bot]
307ffcd5c3
fix: translate label in party validation (backport #58624 ) ( #58625 )
...
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
2026-09-01 00:54:08 +02:00
mergify[bot]
d1b615b851
fix(crm): add missing permission validation on get_contract_template (backport #58621 ) ( #58622 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-31 19:49:07 +00:00
mergify[bot]
fa903f40fd
fix(bank_statement_import): add missing permission check on multiple whitelisted methods (backport #58221 ) ( #58223 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-31 19:39:12 +00:00
Diptanil Saha
c5bc5f9c31
fix: validate POS Settings invoice and search fields on the server (backport #58611 ) ( #58612 )
2026-08-31 18:39:27 +00:00
mergify[bot]
28175a5c9d
fix: do not map the same row twice in "Get Items From" (backport #58617 ) ( #58618 )
...
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
2026-08-31 19:00:31 +02:00
Lakshit Jain
4cff4b7cec
Merge pull request #58601 from frappe/mergify/bp/version-15-hotfix/pr-58483
...
fix(taxes): skip tax addition for invoice created from opening invoice tool (backport #58483 )
2026-08-31 18:39:01 +05:30
ljain112
4ad0180dff
chore: resolve conflicts
2026-08-31 17:20:46 +05:30
ljain112
eed5969c28
chore: resolve conflicts
2026-08-31 17:08:48 +05:30
ljain112
ae01c21614
chore: resolve conflicts
2026-08-31 16:56:39 +05:30
ljain112
7090c6fdab
fix(taxes): skip tax addition for invoice created from opening invoice tool
...
(cherry picked from commit e08a166281 )
# Conflicts:
# erpnext/accounts/doctype/opening_invoice_creation_tool/test_opening_invoice_creation_tool.py
# erpnext/accounts/services/taxes.py
2026-08-31 09:35:34 +00:00
Nishka Gosalia
0f84b25964
Merge pull request #58593 from frappe/mergify/bp/version-15-hotfix/pr-58325
...
fix(projects): check read permission on source in create_duplicate_project (backport #58325 )
2026-08-31 14:31:04 +05:30
Shllokkk
0ea03a688b
chore(projects): add type hints to create_duplicate_project
2026-08-31 14:04:32 +05:30
Shllokkk
af8c010aa8
fix(projects): check read permission on source in create_duplicate_project
...
(cherry picked from commit 8c8b282a2e )
2026-08-31 07:11:10 +00:00
mergify[bot]
c656497aac
fix(timesheet): scoping whitelisted methods output to projects and timesheets that are acccessible to users (backport #58267 ) ( #58576 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-30 18:36:29 +00:00
Mihir Kandoi
9c19b024db
fix(manufacturing): use packed row delivery date ( #58569 )
2026-08-30 11:14:14 +00:00
Henil Maru
7454735595
fix: Work Order picks wrong Delivery Date when Sales Order has the same item in multiple rows ( #58527 )
2026-08-30 15:56:38 +05:30
mergify[bot]
2d46bb962c
fix(stock): load available serial no report (backport #58558 ) ( #58561 )
...
fix(stock): load available serial no report (#58558 )
(cherry picked from commit 8b43394533 )
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com >
2026-08-29 14:56:06 +00:00
mergify[bot]
6a632d6d1c
refactor(stock): remove dead warehouse_condition branch on get_stock_ledger_entries (backport #58552 ) ( #58553 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-29 17:55:45 +05:30
Shllokkk
e19686053f
Merge pull request #58543 from frappe/mergify/bp/version-15-hotfix/pr-58324
...
fix(crm): check write permission in edit_note (backport #58324 )
2026-08-29 13:28:02 +05:30
Shllokkk
f0ac82605c
chore: resolve merge conflicts
2026-08-29 13:08:42 +05:30
Shllokkk
2b2a005682
fix(crm): check write permission in edit_note
...
(cherry picked from commit eb49f51d29 )
# Conflicts:
# erpnext/crm/utils.py
2026-08-28 15:05:16 +00:00
mergify[bot]
c4e7cfa6a0
fix: persist redistributed additional costs during stock entry repost (backport #58433 ) ( #58532 )
...
* fix: persist redistributed additional costs during stock entry repost (#58433 )
* fix: persist redistributed additional costs during stock entry repost
* test: cover additional cost persistence on stock entry recalculation
(cherry picked from commit 074c84e880 )
# Conflicts:
# erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py
* chore: fix conflicts
Removed unused import 'flt' from test file.
---------
Co-authored-by: Afsal Syed <146159709+Afsalsyed@users.noreply.github.com >
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-08-28 10:42:27 +00:00
Sudharsanan Ashok
1aa7528119
Merge pull request #58494 from frappe/mergify/bp/version-15-hotfix/pr-58493
...
fix(selling): check quotation write permission before marking lost (backport #58493 )
2026-08-28 13:29:46 +05:30
Sudharsanan Ashok
1a92047887
Merge pull request #58496 from frappe/mergify/bp/version-15-hotfix/pr-58492
...
fix(selling): check sales order permission before work order creation (backport #58492 )
2026-08-28 13:15:00 +05:30
pandiyan
33ebc7d7e3
fix(selling): check quotation write permission before marking lost ( #58493 )
...
(cherry picked from commit 5f99a3418d )
# Conflicts:
# erpnext/selling/doctype/quotation/quotation.py
2026-08-28 13:04:34 +05:30
pandiyan
0609b06564
fix(selling): check sales order permission before work order creation ( #58492 )
...
(cherry picked from commit a8ba713f80 )
# Conflicts:
# erpnext/selling/doctype/sales_order/mapper.py
2026-08-28 12:55:57 +05:30
Shllokkk
b8163e271d
Merge pull request #58500 from Shllokkk/work-order-transferred-qty-sum-alternate-items
...
fix: sum item and its alternate transferred qty on work order
2026-08-28 12:47:53 +05:30
Aarol D'Souza
44cb0c5141
Merge pull request #58426 from frappe/mergify/bp/version-15-hotfix/pr-58351
...
fix(company): throw if linked to demo_company field (backport #58351 )
2026-08-28 12:14:29 +05:30
mergify[bot]
1187fb8e01
fix(accounts): set pos profile on invoices respecting user permissions (backport #58508 ) ( #58518 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-28 06:42:02 +00:00
Aarol D'Souza
be0fc95758
Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-58351
2026-08-28 11:48:39 +05:30
AarDG10
3edd8ee8be
refactor: remove bold from formatter
2026-08-28 11:48:07 +05:30
Sudharsanan Ashok
d5318fbabc
Merge pull request #58522 from frappe/mergify/bp/version-15-hotfix/pr-58521
...
Revert "refactor(stock): use db.count for the empty ledger check (backport #58486 )" (backport #58521 )
2026-08-27 23:10:06 +05:30
mergify[bot]
d87a4b2541
fix: translate doctype in map msg (backport #58515 ) ( #58516 )
...
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
2026-08-27 19:26:19 +02:00
Sudharsanan11
c6717fb758
fix: resolve conflicts
2026-08-27 22:51:14 +05:30
Sudharsanan Ashok
0e7be81f86
Revert "refactor(stock): use db.count for the empty ledger check (backport #58486 )"
...
(cherry picked from commit 8287906a71 )
# Conflicts:
# erpnext/stock/stock_ledger.py
2026-08-27 17:16:30 +00:00
mergify[bot]
5a518951e4
fix(projects): ignore cancelled invoices in timesheet portal (backport #58501 ) ( #58503 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-27 13:24:40 +00:00
Mihir Kandoi
099a5a71d9
fix(manufacturing): preserve job card qty in mr transfer (backport #58482 ) ( #58498 )
2026-08-27 12:39:48 +00:00
Shllokkk
70dff35736
test: transferred qty sums item and its alternate
2026-08-27 17:54:07 +05:30
Shllokkk
5851bb3b6e
fix: sum item and its alternate transferred qty on work order required items
2026-08-27 17:47:05 +05:30
Sudharsanan Ashok
b00062df86
fix(stock): reset bin when a repost finds no stock ledger entries ( #58434 )
...
* fix(stock): reset bin when a repost finds no stock ledger entries
`build()` wipes `prev_sle_dict` in `initialize_reposting()` before `update_bin()`
runs, so a repost over an item and warehouse whose ledger is empty writes no bin
at all. `actual_qty`, `stock_value` and `valuation_rate` keep their last values,
bin totals drift from the stock balance, and reposting again cannot heal it.
Reset those bins as a terminal step in `update_bin()`, guarded by a re-check that
no live SLE exists so ordinary valuation is untouched.
Cancel is already correct on this branch, since `initialize_previous_data()` seeds
zeros when there is no previous SLE and the sle_id path never calls
`initialize_reposting()`. That seeding stays; this is a repost-path fix only.
develop drops it in #58362 because the `cancelled` guard makes it dead code there.
* test(stock): cover bin reset when the stock ledger is empty
2026-08-27 16:23:10 +05:30
Sudharsanan Ashok
2ce0bb1009
Merge pull request #58474 from frappe/mergify/bp/version-15-hotfix/pr-58469
...
fix: clarify duplicate internal party messages (backport #58469 )
2026-08-27 16:13:40 +05:30
Sudharsanan Ashok
25ec044c09
Merge pull request #58428 from frappe/mergify/bp/version-15-hotfix/pr-58402
...
feat(analytics): filter sales and purchase analytics by entity (backport #58402 )
2026-08-27 16:12:13 +05:30
Aarol D'Souza
81cf874fd7
Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-58351
2026-08-27 15:42:27 +05:30
mergify[bot]
d62f6e715f
fix: mark item tax templates as not applicable (backport #54673 ) (backport #54677 ) ( #58462 )
...
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
2026-08-27 09:46:30 +00:00
Pandiyan P
045d7086d1
fix(accounts): validate frozen accounts in period closing voucher ( #58477 )
2026-08-27 08:46:01 +00:00
Shllokkk
6f95c1ff92
Merge pull request #58473 from frappe/mergify/bp/version-15-hotfix/pr-58470
...
fix: validate items against source Sales Order in Material Request (backport #58470 )
2026-08-27 14:04:44 +05:30
pandiyan
17208e7434
fix: clarify duplicate internal party messages ( #58469 )
...
(cherry picked from commit 4d4cf034b5 )
# Conflicts:
# erpnext/selling/doctype/customer/customer.py
2026-08-27 13:53:43 +05:30
Shllokkk
59a9819dae
test: block item change on Sales Order-sourced Material Request row
...
(cherry picked from commit 07f8250e40 )
# Conflicts:
# erpnext/stock/doctype/material_request/test_material_request.py
2026-08-27 13:17:29 +05:30
Shllokkk
32d44c6e91
fix: validate items against source Sales Order in Material Request
...
(cherry picked from commit 65466464df )
2026-08-27 07:36:46 +00:00
Sudharsanan11
605918d3a2
fix: resolve analytics backport conflicts
2026-08-26 16:10:56 +05:30
Sudharsanan Ashok
0dddd00073
feat(analytics): filter sales and purchase analytics by entity ( #58402 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
(cherry picked from commit 3f29cdf8d2 )
# Conflicts:
# erpnext/buying/report/purchase_analytics/purchase_analytics.js
# erpnext/buying/report/purchase_analytics/test_purchase_analytics.py
# erpnext/selling/report/sales_analytics/sales_analytics.py
# erpnext/selling/report/sales_analytics/test_sales_analytics.py
2026-08-26 16:10:56 +05:30
Shllokkk
3bf19df761
Merge pull request #58440 from Shllokkk/incorrect-serial-batch-bundle-letter-head
...
fix: reset hardcoded letter head on Incorrect Serial and Batch Bundle report
2026-08-26 15:49:34 +05:30
Shllokkk
ccdaa92de8
fix: reset hardcoded letter head on Incorrect Serial and Batch Bundle report
2026-08-26 14:50:32 +05:30
Sudharsanan Ashok
6d59065d79
Merge pull request #58424 from frappe/mergify/bp/version-15-hotfix/pr-58405
...
fix(stock): keep pick list links when refetching stock entry items (backport #58374 ) (backport #58405 )
2026-08-26 13:40:13 +05:30
Jatin3128
228ab2d97e
fix: keep source rate on re-fetch when maintain same rate is enabled (backport #57479 ) ( #58332 )
...
* fix: keep source rate on re-fetch when maintain same rate is enabled (backport #57479 )
With "maintain same rate" on, re-fetching item details on a row mapped from a
source document (e.g. a Purchase Order) pulled the latest Item Price, giving a
rate the document can never be saved with. Skip the price list fetch for such
rows and keep the source rate, both for a single-row re-fetch and the bulk
apply_price_list path (price list / party / conversion rate change).
The rate is read from the linked source row in the database (not the mutable
target row) and permission-checked against the source document, so an unsaved
edit can't lock in a different rate and a crafted request can't disclose
another document's pricing.
Fixes frappe/erpnext#57436
* fix: resolve linter findings in get_item_details
Add missing type hints on the whitelisted get_item_details
signature and rename maintain_same_rate_enabled's sole "args"
parameter, both flagged by the semgrep security/code-quality
rules. Also drops an extra blank line that ruff-format rejected.
* fix: widen get_item_details doc type hint to include Document
accounts_controller.py calls get_item_details(args, self, ...)
during validate, passing the transaction Document itself, not
a dict/JSON string. The narrower hint tripped Frappe's runtime
argument type validation on every whitelisted call with a live
Document, failing test-record creation across the suite.
2026-08-26 13:14:25 +05:30
Sudharsanan11
e126c4597b
fix: resolve stock entry backport conflicts
2026-08-26 13:09:08 +05:30
Sudharsanan11
22377fa86d
fix(stock): keep pick list links when refetching stock entry items
...
(cherry picked from commit 01e0844d40 )
# Conflicts:
# erpnext/stock/doctype/stock_entry/stock_entry.js
2026-08-26 13:09:08 +05:30
AarDG10
de260bd43c
fix(company): throw if linked to demo_company field
...
Throws an error msg if user is deleting demo company directly.
(cherry picked from commit aaa3100efc )
2026-08-26 07:24:05 +00:00
Sudharsanan Ashok
9e082a96f7
Merge pull request #58418 from frappe/mergify/bp/version-15-hotfix/pr-58394
...
fix(stock): validate serial inventory dimensions (backport #58394 )
2026-08-26 12:53:35 +05:30
Pandiyan P
bc071d7793
fix(stock): validate serial inventory dimensions ( #58394 )
...
* fix(stock): validate serial inventory dimensions
* test(stock): cover serial inventory dimensions
(cherry picked from commit c940bd1e66 )
# Conflicts:
# erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
# erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
2026-08-26 12:28:31 +05:30
mergify[bot]
f5ce20f122
fix: keep Currency and Price List section open for foreign currency (backport #58074 ) ( #58112 )
...
* fix: keep Currency and Price List section open for foreign currency (#58074 )
The section is marked collapsible with no condition, so it always
rendered collapsed. When the transaction currency differs from the
company currency the exchange rate is relevant and was hidden behind
a click.
Adds collapsible_depends_on so the section starts expanded whenever
the transaction currency differs from the company currency, and stays
collapsed otherwise.
(cherry picked from commit 4a8342496e )
# Conflicts:
# erpnext/accounts/doctype/pos_invoice/pos_invoice.json
# erpnext/accounts/doctype/sales_invoice/sales_invoice.json
# erpnext/buying/doctype/purchase_order/purchase_order.json
# erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
# erpnext/selling/doctype/sales_order/sales_order.json
# erpnext/stock/doctype/delivery_note/delivery_note.json
# erpnext/stock/doctype/purchase_receipt/purchase_receipt.json
* fix: resolve unresolved cherry-pick conflict markers in modified timestamps
Mergify's automatic cherry-pick of #58074 left conflict markers
committed on the modified field, breaking JSON parsing.
---------
Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com >
Co-authored-by: Jatin3128 <jatinsarna8@gmail.com >
2026-08-26 11:35:24 +05:30
Frappe PR Bot
945e825bee
chore(release): Bumped to Version 15.120.0
...
# [15.120.0](https://github.com/frappe/erpnext/compare/v15.119.3...v15.120.0 ) (2026-08-25)
### Bug Fixes
* **accounts:** disallow reversing a reverse journal entry ([15041a6 ](15041a62dd ))
* **accounts:** supplier group filter not applied on accounts payable report ([743f7d8 ](743f7d8713 ))
* aggregate child warehouses in Stock Qty vs Serial No Count report (backport [#58134 ](https://github.com/frappe/erpnext/issues/58134 )) ([#58365 ](https://github.com/frappe/erpnext/issues/58365 )) ([61238e7 ](61238e7c4c ))
* allow custom remark on reversal journal entry ([#58308 ](https://github.com/frappe/erpnext/issues/58308 )) ([b578fb5 ](b578fb52d5 ))
* asset scrap flow related changes (backport [#55126 ](https://github.com/frappe/erpnext/issues/55126 )) ([#58144 ](https://github.com/frappe/erpnext/issues/58144 )) ([167cc1e ](167cc1e5b9 ))
* **assets:** split FIFO/LIFO rate across grouped stock item rows ([c2c4e5e ](c2c4e5ee8b ))
* attributeerror on budget against a non profit and loss account ([2095411 ](2095411a28 ))
* **bank_statement_import:** add missing permission check on `get_import_status` (backport [#58217 ](https://github.com/frappe/erpnext/issues/58217 )) ([#58218 ](https://github.com/frappe/erpnext/issues/58218 )) ([1464a34 ](1464a34fc6 ))
* block disabled/frozen party on Opportunity and Request for Quotation (backport [#57983 ](https://github.com/frappe/erpnext/issues/57983 )) ([#58034 ](https://github.com/frappe/erpnext/issues/58034 )) ([88a36a8 ](88a36a800a ))
* **buying:** allow purchase returns against a closed purchase order ([#58140 ](https://github.com/frappe/erpnext/issues/58140 )) ([81c5393 ](81c53931b5 ))
* correct Item Group doctype name in item tax template dashboard (backport [#58192 ](https://github.com/frappe/erpnext/issues/58192 )) ([#58212 ](https://github.com/frappe/erpnext/issues/58212 )) ([46d883d ](46d883d00d ))
* **crm_settings:** create custom fields for Frappe CRM on enabling synchronization ([eb85ca6 ](eb85ca68f6 ))
* don't set work order status to In Process only due to skip material transfer ([#58246 ](https://github.com/frappe/erpnext/issues/58246 )) ([73b7ec3 ](73b7ec32b6 ))
* drop removed Restaurant doctype from sales tax template dashboard (backport [#58191 ](https://github.com/frappe/erpnext/issues/58191 )) ([#58210 ](https://github.com/frappe/erpnext/issues/58210 )) ([32a5b23 ](32a5b23b3c ))
* **email_digest:** added permission check for `get_msg_html` (backport [#58197 ](https://github.com/frappe/erpnext/issues/58197 )) ([#58199 ](https://github.com/frappe/erpnext/issues/58199 )) ([c6211eb ](c6211eb075 ))
* escape interpolated values in portal, print and desk templates (backport [#58273 ](https://github.com/frappe/erpnext/issues/58273 )) ([#58277 ](https://github.com/frappe/erpnext/issues/58277 )) ([37f2770 ](37f2770809 ))
* escape interpolated values in text positions across portal and desk templates (backport [#58286 ](https://github.com/frappe/erpnext/issues/58286 )) ([#58287 ](https://github.com/frappe/erpnext/issues/58287 )) ([1210c61 ](1210c6187d ))
* escape on status image for workstations in production status (backport [#58279 ](https://github.com/frappe/erpnext/issues/58279 )) ([#58280 ](https://github.com/frappe/erpnext/issues/58280 )) ([d047caf ](d047caf4aa ))
* filter available batch report by company (backport [#57995 ](https://github.com/frappe/erpnext/issues/57995 )) ([#58076 ](https://github.com/frappe/erpnext/issues/58076 )) ([8c8a4b6 ](8c8a4b6f20 ))
* fix conflicts ([f8e614f ](f8e614f0c7 ))
* get items from sales order in sales invoice (backport [#58163 ](https://github.com/frappe/erpnext/issues/58163 )) ([#58187 ](https://github.com/frappe/erpnext/issues/58187 )) ([89d3701 ](89d3701e3b ))
* hide rfq status in supplier portal ([#58368 ](https://github.com/frappe/erpnext/issues/58368 )) ([2dbd224 ](2dbd224643 ))
* hide supplier name in rfq portal (backport [#58373 ](https://github.com/frappe/erpnext/issues/58373 )) ([#58375 ](https://github.com/frappe/erpnext/issues/58375 )) ([91fc999 ](91fc999575 ))
* ignore historical negative batch stock in outward validation (backport [#58148 ](https://github.com/frappe/erpnext/issues/58148 )) ([#58150 ](https://github.com/frappe/erpnext/issues/58150 )) ([9cc9aa0 ](9cc9aa0fa5 ))
* include time logs ending at midnight in timesheet billing summary (backport [#58355 ](https://github.com/frappe/erpnext/issues/58355 )) ([#58356 ](https://github.com/frappe/erpnext/issues/58356 )) ([3d4245b ](3d4245b9b4 ))
* **italy:** handle none price_list_rate in e-invoice xml generation (backport [#58242 ](https://github.com/frappe/erpnext/issues/58242 )) ([#58369 ](https://github.com/frappe/erpnext/issues/58369 )) ([cb8ae93 ](cb8ae93fa3 ))
* **manufacturing:** derive material transfers from actual coverage ([#58114 ](https://github.com/frappe/erpnext/issues/58114 )) ([a1ecea1 ](a1ecea1794 ))
* **manufacturing:** fall back to item group defaults for work order w… ([#58236 ](https://github.com/frappe/erpnext/issues/58236 )) ([48bd313 ](48bd3139f3 ))
* mirror rounding adjustment on distributed_discount_amount (backport [#58047 ](https://github.com/frappe/erpnext/issues/58047 )) ([#58054 ](https://github.com/frappe/erpnext/issues/58054 )) ([b03e098 ](b03e098684 ))
* new docs should refetch incoming rates (backport [#58097 ](https://github.com/frappe/erpnext/issues/58097 )) ([#58294 ](https://github.com/frappe/erpnext/issues/58294 )) ([fd82c7d ](fd82c7d691 ))
* **party_ledger_summary:** added missing filters for `cost_center` and `projects` ([#58411 ](https://github.com/frappe/erpnext/issues/58411 )) ([d4815cb ](d4815cb231 ))
* patch to delete the `crm_deal` custom fields ([ff1a191 ](ff1a1914a1 ))
* prevent duplicate supplier quotations from portal ([e1246ae ](e1246ae95d ))
* remove ignore_permissions from get_party_details signature ([#55491 ](https://github.com/frappe/erpnext/issues/55491 )) ([4cd39aa ](4cd39aa147 ))
* render missing terms before printing ([#58367 ](https://github.com/frappe/erpnext/issues/58367 )) ([b33475e ](b33475e7cf ))
* respect zero currency precision ([#58395 ](https://github.com/frappe/erpnext/issues/58395 )) ([6a84621 ](6a8462116b ))
* **stock:** confirm before changing item qty from the batch selector (backport [#58123 ](https://github.com/frappe/erpnext/issues/58123 )) ([#58124 ](https://github.com/frappe/erpnext/issues/58124 )) ([954a5ec ](954a5ec006 ))
* **stock:** fetch item stock UOM in stock reconciliation (backport [#58284 ](https://github.com/frappe/erpnext/issues/58284 )) ([#58290 ](https://github.com/frappe/erpnext/issues/58290 )) ([7883f59 ](7883f595d7 ))
* **stock:** honour pick serial / batch based on in the batch selector (backport [#58176 ](https://github.com/frappe/erpnext/issues/58176 )) ([#58181 ](https://github.com/frappe/erpnext/issues/58181 )) ([6d06b43 ](6d06b43434 ))
* update stock variance account logic which defaults to default expense (backport [#57656 ](https://github.com/frappe/erpnext/issues/57656 )) ([#57675 ](https://github.com/frappe/erpnext/issues/57675 )) ([c132b99 ](c132b99b4e ))
* use user data fields hook (backport [#58274 ](https://github.com/frappe/erpnext/issues/58274 )) ([#58282 ](https://github.com/frappe/erpnext/issues/58282 )) ([74c3eea ](74c3eeaa44 ))
* validation for task end date check ([8dc9919 ](8dc9919691 ))
### Features
* **accounts:** opt-in 'Consider Accounting Dimension' filter on General Ledger Report (backport [#58156 ](https://github.com/frappe/erpnext/issues/58156 )) ([#58157 ](https://github.com/frappe/erpnext/issues/58157 )) ([e704e58 ](e704e589ca ))
* add status filter to Supplier Quotation Comparison report ([9e6a166 ](9e6a16658d ))
* Belgian Charts of Accounts (commercial + non-profit, FR + NL) (backport [#54679 ](https://github.com/frappe/erpnext/issues/54679 )) ([#58185 ](https://github.com/frappe/erpnext/issues/58185 )) ([4c9a76e ](4c9a76ef9f ))
* sync serial no status from stock ledger in Stock Qty vs Serial No Count report (version-15-hotfix) ([#57865 ](https://github.com/frappe/erpnext/issues/57865 )) ([faaaa07 ](faaaa0776d ))
* taxable-base resolver hook for custom charge types ([#56175 ](https://github.com/frappe/erpnext/issues/56175 )) ([8c9e941 ](8c9e941614 ))
* validate purchase receipt exchange rate parity on purchase invoice (backport [#58177 ](https://github.com/frappe/erpnext/issues/58177 )) ([#58189 ](https://github.com/frappe/erpnext/issues/58189 )) ([a5f4d3a ](a5f4d3abeb ))
2026-08-25 16:59:18 +00:00
Diptanil Saha
5d60bd9f54
Merge pull request #58396 from frappe/version-15-hotfix
...
chore: release v15
2026-08-25 22:27:36 +05:30
Diptanil Saha
d4815cb231
fix(party_ledger_summary): added missing filters for cost_center and projects ( #58411 )
2026-08-25 22:09:13 +05:30
Raffael Meyer
3ae3009129
fix!: tax net_amount and not_applicable ( #54687 )
2026-08-25 13:50:03 +02:00
Sudharsanan Ashok
07b6b3defd
Merge pull request #58398 from frappe/mergify/bp/version-15-hotfix/pr-58395
...
fix: respect zero currency precision (backport #58395 )
2026-08-25 16:45:17 +05:30
Pandiyan P
6a8462116b
fix: respect zero currency precision ( #58395 )
...
(cherry picked from commit ce23fcc055 )
# Conflicts:
# erpnext/accounts/test/test_utils.py
2026-08-25 15:51:20 +05:30
Sudharsanan Ashok
1b5239c498
Merge pull request #58354 from frappe/mergify/bp/version-15-hotfix/pr-58179
...
fix(accounts): supplier group filter not applied on accounts payable … (backport #58179 )
2026-08-25 13:04:42 +05:30
Sudharsanan Ashok
7fcbf085a5
Merge pull request #58389 from frappe/mergify/bp/version-15-hotfix/pr-58384
...
fix: prevent duplicate supplier quotations from portal (backport #58377 ) (backport #58384 )
2026-08-25 12:04:54 +05:30
Sudharsanan11
f8e614f0c7
fix: fix conflicts
2026-08-25 11:47:06 +05:30
pandiyan
c861fbf438
test: verify duplicate supplier quotations are rejected
...
(cherry picked from commit efe5571ca7 )
2026-08-25 05:43:13 +00:00
pandiyan
e1246ae95d
fix: prevent duplicate supplier quotations from portal
...
(cherry picked from commit 39e15c7b2d )
# Conflicts:
# erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
2026-08-25 05:43:12 +00:00
mergify[bot]
91fc999575
fix: hide supplier name in rfq portal (backport #58373 ) ( #58375 )
...
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com >
2026-08-24 17:40:38 +05:30
mergify[bot]
4b569c3ec3
Fix/return qty validation different uom (backport #58298 ) ( #58363 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
Co-authored-by: Afsal Syed <afsalsyed12@gmail.com >
2026-08-24 17:39:56 +05:30
mergify[bot]
cb8ae93fa3
fix(italy): handle none price_list_rate in e-invoice xml generation (backport #58242 ) ( #58369 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
2026-08-24 17:39:24 +05:30
Sudharsanan Ashok
91548461c0
Merge pull request #58371 from frappe/mergify/bp/version-15-hotfix/pr-58368
...
fix: hide rfq status in supplier portal (backport #58368 )
2026-08-24 16:35:55 +05:30
Pandiyan P
2dbd224643
fix: hide rfq status in supplier portal ( #58368 )
...
(cherry picked from commit 75d6183bb6 )
2026-08-24 10:59:54 +00:00
Pandiyan P
b33475e7cf
fix: render missing terms before printing ( #58367 )
2026-08-24 16:28:17 +05:30
mergify[bot]
61238e7c4c
fix: aggregate child warehouses in Stock Qty vs Serial No Count report (backport #58134 ) ( #58365 )
...
Co-authored-by: Mohd Haris <haris@frappe.io >
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-24 10:33:16 +00:00
mergify[bot]
3d4245b9b4
fix: include time logs ending at midnight in timesheet billing summary (backport #58355 ) ( #58356 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-24 14:46:36 +05:30
ervishnucs
743f7d8713
fix(accounts): supplier group filter not applied on accounts payable report
...
(cherry picked from commit 513f19924d )
2026-08-24 07:12:19 +00:00
Vishnu Priya Baskaran
b578fb52d5
fix: allow custom remark on reversal journal entry ( #58308 )
...
fix: allow user remark on reversal journal entry
2026-08-19 22:18:13 +05:30
mergify[bot]
fd82c7d691
fix: new docs should refetch incoming rates (backport #58097 ) ( #58294 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-19 11:58:32 +00:00
mergify[bot]
88a36a800a
fix: block disabled/frozen party on Opportunity and Request for Quotation (backport #57983 ) ( #58034 )
...
* fix: block disabled/frozen customers on Opportunity
Opportunity inherits TransactionBase instead of AccountsController, so
it never ran validate_party_frozen_disabled like Quotation, Sales Order
and Sales Invoice do. A disabled Customer could be saved as an
Opportunity's party and only get caught later at Quotation stage.
Also fixes the party_name Link query on the client: it referenced
erpnext.queries.customer, which was never defined, so disabled
customers showed up in the picker.
(cherry picked from commit 90937ce6d9 )
# Conflicts:
# erpnext/crm/doctype/opportunity/test_opportunity.py
* fix: block disabled/frozen suppliers on Request for Quotation
Request for Quotation overrides validate() entirely and never calls
super().validate(), so it never goes through AccountsController's
party validation. Suppliers also sit in a child table, so the shared
PartyValidator wouldn't have caught it anyway (it only checks a single
top-level party field). A disabled or frozen Supplier could be added
to an RFQ and the RFQ submitted without any warning.
Also filters the suppliers grid's supplier Link field to disabled=0,
matching the same client-side fix applied to Opportunity's party_name.
(cherry picked from commit 4bf65ffc1d )
# Conflicts:
# erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
# erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py
* fix: scope Opportunity party validation to Customer only
validate_party_frozen_disabled only enforces Customer/Supplier/Employee,
so passing opportunity_from straight through silently no-op'd for Lead
and Prospect. Made the Customer-only scope explicit instead of relying
on that implicit fallthrough.
Lead.disabled is not enforced anywhere else in the codebase (lead_query,
the picker used for this same field, only filters status/docstatus), so
deliberately not extending validation to Lead-sourced Opportunities.
(cherry picked from commit 8c0a945417 )
* refactor: move RFQ supplier disabled filter to link_filters
Static filters with no doc-dependent values belong on the field
definition, not in JS. Matches the existing pattern used for
Warehouse/Item link_filters elsewhere (e.g. job_card_item.json,
product_bundle_item.json).
(cherry picked from commit 6b35c51ff1 )
* fix: resolve backport conflicts for disabled/frozen party validation
The automated backport left unresolved merge conflict markers committed
in request_for_quotation.py, test_request_for_quotation.py and
test_opportunity.py. Also fixes validate_party_frozen_disabled being
called with 3 args here, this branch's version only takes
(party_type, party_name), unlike develop's (company, party_type, party_name).
Dropped test_duplicate_supplier_rejected, test_rfq_blocked_for_supplier_with_prevent_rfqs
and test_rfq_status_lifecycle from the conflict resolution, they don't exist on
this branch and aren't part of this backport.
---------
Co-authored-by: Jatin3128 <jatinsarna8@gmail.com >
2026-08-19 16:58:21 +05:30
mergify[bot]
7883f595d7
fix(stock): fetch item stock UOM in stock reconciliation (backport #58284 ) ( #58290 )
...
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com >
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-19 10:36:34 +00:00
mergify[bot]
c132b99b4e
fix: update stock variance account logic which defaults to default expense (backport #57656 ) ( #57675 )
...
Co-authored-by: Afsal Syed <afsalsyed12@gmail.com >
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com >
2026-08-19 14:41:41 +05:30
mergify[bot]
74c3eeaa44
fix: use user data fields hook (backport #58274 ) ( #58282 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-19 10:25:47 +05:30
mergify[bot]
1210c6187d
fix: escape interpolated values in text positions across portal and desk templates (backport #58286 ) ( #58287 )
...
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-08-19 02:44:35 +05:30
mergify[bot]
d047caf4aa
fix: escape on status image for workstations in production status (backport #58279 ) ( #58280 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-18 20:27:31 +00:00
mergify[bot]
37f2770809
fix: escape interpolated values in portal, print and desk templates (backport #58273 ) ( #58277 )
...
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-08-19 00:35:45 +05:30
mergify[bot]
b03e098684
fix: mirror rounding adjustment on distributed_discount_amount (backport #58047 ) ( #58054 )
...
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com >
2026-08-18 12:07:43 +02:00
Frappe PR Bot
0526834071
chore(release): Bumped to Version 15.119.3
...
## [15.119.3](https://github.com/frappe/erpnext/compare/v15.119.2...v15.119.3 ) (2026-08-18)
### Bug Fixes
* get items from sales order in sales invoice (backport [#58163 ](https://github.com/frappe/erpnext/issues/58163 )) (backport [#58187 ](https://github.com/frappe/erpnext/issues/58187 )) ([#58259 ](https://github.com/frappe/erpnext/issues/58259 )) ([88f32f1 ](88f32f1d1b ))
2026-08-18 07:37:05 +00:00
mergify[bot]
88f32f1d1b
fix: get items from sales order in sales invoice (backport #58163 ) (backport #58187 ) ( #58259 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-18 07:35:00 +00:00
Lakshit Jain
41aba183de
Merge pull request #58160 from frappe/mergify/bp/version-15-hotfix/pr-56175
...
feat: taxable-base resolver hook for custom charge types (backport #56175 )
2026-08-18 11:58:24 +05:30
rohitwaghchaure
73b7ec32b6
fix: don't set work order status to In Process only due to skip material transfer ( #58246 )
2026-08-17 12:43:13 +00:00
Pandiyan P
48bd3139f3
fix(manufacturing): fall back to item group defaults for work order w… ( #58236 )
2026-08-17 15:26:05 +05:30
mergify[bot]
1464a34fc6
fix(bank_statement_import): add missing permission check on get_import_status (backport #58217 ) ( #58218 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-16 15:11:25 +00:00
mergify[bot]
0c625ff69b
fix(crm)!: remove unused get_last_interaction endpoint (backport #58214 ) ( #58215 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-16 14:21:44 +00:00
Shllokkk
2aa1bf54f2
Merge pull request #58209 from frappe/mergify/bp/version-15-hotfix/pr-58208
...
feat: add status filter to Supplier Quotation Comparison report (backport #58208 )
2026-08-16 19:48:40 +05:30
mergify[bot]
46d883d00d
fix: correct Item Group doctype name in item tax template dashboard (backport #58192 ) ( #58212 )
2026-08-16 18:42:58 +05:30
mergify[bot]
32a5b23b3c
fix: drop removed Restaurant doctype from sales tax template dashboard (backport #58191 ) ( #58210 )
2026-08-16 17:22:06 +05:30
Shllokkk
9e6a16658d
feat: add status filter to Supplier Quotation Comparison report
...
(cherry picked from commit 2b84ed78e8 )
2026-08-16 10:22:38 +00:00
mergify[bot]
c6211eb075
fix(email_digest): added permission check for get_msg_html (backport #58197 ) ( #58199 )
...
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-08-15 16:47:02 +00:00
mergify[bot]
a5f4d3abeb
feat: validate purchase receipt exchange rate parity on purchase invoice (backport #58177 ) ( #58189 )
...
* feat: validate purchase receipt exchange rate parity on purchase invoice (#58177 )
(cherry picked from commit 70a8a2d0c5 )
# Conflicts:
# erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
* chore: fix conflicts
Removed assertion for exchange rate discrepancy in purchase invoice test.
* test: fix backport of exchange rate difference test for non stock item
The conflict resolution left behind stale amount/discrepancy lookups
referencing a removed second item row (IndexError in CI and F841 ruff
failures). Align the test with the develop version: single non stock
item, PR at 80 / PI at 70, and assert no exchange gain/loss GL entry.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
---------
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 10:51:12 +00:00
mergify[bot]
89d3701e3b
fix: get items from sales order in sales invoice (backport #58163 ) ( #58187 )
...
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-15 08:02:23 +00:00
mergify[bot]
4c9a76ef9f
feat: Belgian Charts of Accounts (commercial + non-profit, FR + NL) (backport #54679 ) ( #58185 )
...
Co-authored-by: Antoine Maas <antoine.maas@okte.io >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-14 16:56:24 +00:00
mergify[bot]
6d06b43434
fix(stock): honour pick serial / batch based on in the batch selector (backport #58176 ) ( #58181 )
...
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com >
2026-08-14 13:57:27 +00:00
Khushi Rawat
78d780d49e
Merge pull request #58175 from aerele/backport-58092-version-15-hotfix
...
fix(accounts): disallow reversing a reverse journal entry
2026-08-14 17:43:53 +05:30
pandiyan
15041a62dd
fix(accounts): disallow reversing a reverse journal entry
...
check read permission on the source entry before the guard runs, so the reversal relationship is not disclosed to a user who cannot read it.
2026-08-14 17:06:23 +05:30
pandiyan
754e7052ca
test(accounts): cover reversal of a reverse journal entry
...
also assert that a user without read access on the entry gets a permission error instead of the reversal relationship.
2026-08-14 16:56:06 +05:30
Nishka Gosalia
3b2bb23306
Merge pull request #58170 from frappe/mergify/bp/version-15-hotfix/pr-58167
...
fix: validation for task end date check (backport #58167 )
2026-08-14 16:42:31 +05:30
mergify[bot]
e704e589ca
feat(accounts): opt-in 'Consider Accounting Dimension' filter on General Ledger Report (backport #58156 ) ( #58157 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-14 16:27:37 +05:30
nishkagosalia
8dc9919691
fix: validation for task end date check
...
(cherry picked from commit 7c6da80f98 )
2026-08-14 10:52:46 +00:00
vorasmit
e7e2358cb5
chore: resolve conflicts
2026-08-14 15:12:42 +05:30
Smit Vora
8c9e941614
feat: taxable-base resolver hook for custom charge types ( #56175 )
...
(cherry picked from commit 986cea2331 )
# Conflicts:
# erpnext/controllers/taxes_and_totals.py
# erpnext/controllers/tests/test_taxes_and_totals.py
# erpnext/public/js/controllers/taxes_and_totals.js
2026-08-14 08:19:25 +00:00
rohitwaghchaure
faaaa0776d
feat: sync serial no status from stock ledger in Stock Qty vs Serial No Count report (version-15-hotfix) ( #57865 )
...
* feat: sync serial no status from stock ledger in Stock Qty vs Serial No Count report
* fix: pick last bundle move in SQL ordered by posting datetime and SLE creation
* fix: derive synced serial no status from stock ledger helper and validate sync args
* fix: use posting datetime for last bundle move after version-15 field rename
* fix: order last bundle moves by bundle posting datetime
2026-08-14 11:51:18 +05:30
Frappe PR Bot
d707cb1e0e
chore(release): Bumped to Version 15.119.2
...
## [15.119.2](https://github.com/frappe/erpnext/compare/v15.119.1...v15.119.2 ) (2026-08-14)
### Bug Fixes
* ignore historical negative batch stock in outward validation (backport [#58148 ](https://github.com/frappe/erpnext/issues/58148 )) (backport [#58150 ](https://github.com/frappe/erpnext/issues/58150 )) ([#58152 ](https://github.com/frappe/erpnext/issues/58152 )) ([ac5b4d1 ](ac5b4d185b ))
2026-08-14 06:20:14 +00:00
mergify[bot]
ac5b4d185b
fix: ignore historical negative batch stock in outward validation (backport #58148 ) (backport #58150 ) ( #58152 )
...
fix: ignore historical negative batch stock in outward validation (backport #58148 ) (#58150 )
fix: ignore historical negative batch stock in outward validation (#58148 )
(cherry picked from commit 9239d1c2a3 )
(cherry picked from commit 9cc9aa0fa5 )
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-08-14 11:48:34 +05:30
Khushi Rawat
15d430b959
Merge pull request #58093 from aerele/fix/budget-non-pnl-account-message
...
fix(accounts): attributeerror on budget against a non profit and loss account
2026-08-14 11:27:35 +05:30
mergify[bot]
9cc9aa0fa5
fix: ignore historical negative batch stock in outward validation (backport #58148 ) ( #58150 )
...
fix: ignore historical negative batch stock in outward validation (#58148 )
(cherry picked from commit 9239d1c2a3 )
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-08-14 05:48:33 +00:00
Pandiyan P
81c53931b5
fix(buying): allow purchase returns against a closed purchase order ( #58140 )
2026-08-14 09:01:03 +05:30
mergify[bot]
167cc1e5b9
fix: asset scrap flow related changes (backport #55126 ) ( #58144 )
...
Co-authored-by: khushi8112 <khushirawat23@navgurukul.org >
2026-08-13 18:41:15 +00:00
Diptanil Saha
c6e6bdccae
Merge pull request #58142 from frappe/mergify/bp/version-15-hotfix/pr-58141
...
fix(crm_settings): create `crm_deal` fields on enabling frappe crm data synchronization (backport #58141 )
2026-08-13 23:28:36 +05:30
diptanilsaha
ff1a1914a1
fix: patch to delete the crm_deal custom fields
...
(cherry picked from commit 9613d72d81 )
2026-08-13 17:39:51 +00:00
diptanilsaha
eb85ca68f6
fix(crm_settings): create custom fields for Frappe CRM on enabling synchronization
...
(cherry picked from commit be2dea0ba2 )
2026-08-13 17:39:50 +00:00
mergify[bot]
954a5ec006
fix(stock): confirm before changing item qty from the batch selector (backport #58123 ) ( #58124 )
...
fix(stock): confirm before changing item qty from the batch selector (#58123 )
the batch selector silently overwrote the item qty with the bundle total,
so editing a row qty in the dialog changed the delivered qty without any
warning. prompt for confirmation when the rows do not add up to the qty
to fetch, and only proceed if the user agrees.
(cherry picked from commit a2976dd29e )
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com >
2026-08-13 16:40:26 +05:30
Mihir Kandoi
a1ecea1794
fix(manufacturing): derive material transfers from actual coverage ( #58114 )
2026-08-13 09:39:21 +00:00
Diptanil Saha
a7e21e834d
Merge pull request #58111 from frappe/mergify/bp/version-15-hotfix/pr-55491
...
fix: remove ignore_permissions from get_party_details signature (backport #55491 )
2026-08-13 13:26:09 +05:30
diptanilsaha
23919967f6
chore: resolve conflicts
2026-08-13 13:01:53 +05:30
Shllokkk
4cd39aa147
fix: remove ignore_permissions from get_party_details signature ( #55491 )
...
(cherry picked from commit efb8336bf8 )
# Conflicts:
# erpnext/accounts/doctype/sales_invoice/sales_invoice.py
# erpnext/accounts/party.py
2026-08-13 07:23:22 +00:00
Khushi Rawat
afa2437910
Merge pull request #57564 from khushi8112/refactor-depreciation-entry-v15
...
refactor: split make_depreciation_entry into public and internal helpers
2026-08-13 12:33:09 +05:30
Khushi Rawat
9638e81762
Merge pull request #58088 from frappe/mergify/bp/version-15-hotfix/pr-57820
...
fix(assets): split fifo/lifo rate across grouped stock item rows (backport #57820 )
2026-08-13 12:28:26 +05:30
ervishnucs
1e23d48a5b
test(assets): cover grouped stock item rows splitting FIFO rate
...
(cherry picked from commit 2cbc5b89d6 )
# Conflicts:
# erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py
2026-08-13 12:01:31 +05:30
khushi8112
6650ac8c36
refactor: split make_depreciation_entry into public and internal helpers
2026-08-13 11:39:33 +05:30
mergify[bot]
bfa3edbf95
Fix/item description in the item price list (backport #58084 ) ( #58101 )
...
Co-authored-by: Mohsin Akhtar <167299936+akhtarmohsin@users.noreply.github.com >
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com >
2026-08-13 04:42:02 +00:00
mergify[bot]
8c8a4b6f20
fix: filter available batch report by company (backport #57995 ) ( #58076 )
...
Co-authored-by: Krishna Shirsath <shirsathkrishna19@gmail.com >
2026-08-12 17:33:56 +05:30
pandiyan
2095411a28
fix: attributeerror on budget against a non profit and loss account
2026-08-12 16:12:55 +05:30
pandiyan
5700384989
test: budget against a balance sheet account
2026-08-12 16:12:55 +05:30
ervishnucs
c2c4e5ee8b
fix(assets): split FIFO/LIFO rate across grouped stock item rows
...
(cherry picked from commit a05ec49062 )
2026-08-12 09:04:48 +00:00
Frappe PR Bot
be176617cc
chore(release): Bumped to Version 15.119.1
...
## [15.119.1](https://github.com/frappe/erpnext/compare/v15.119.0...v15.119.1 ) (2026-08-11)
### Bug Fixes
* **accounts receivable:** made territory field multi select (backport [#57322 ](https://github.com/frappe/erpnext/issues/57322 )) ([#57808 ](https://github.com/frappe/erpnext/issues/57808 )) ([69c00b3 ](69c00b3362 ))
* allow selecting a warehouse for new items in the update items dialog ([#57876 ](https://github.com/frappe/erpnext/issues/57876 )) ([76f485b ](76f485ba43 ))
* clear deferred revenue/expense fields on uncheck (backport [#57140 ](https://github.com/frappe/erpnext/issues/57140 )) ([ce898a9 ](ce898a9695 ))
* **coa_importer:** added server-side validations for importing chart of accounts (backport [#58065 ](https://github.com/frappe/erpnext/issues/58065 )) ([#58067 ](https://github.com/frappe/erpnext/issues/58067 )) ([d0ef967 ](d0ef967890 ))
* **coa_importer:** allow importing COA through `import_coa` only for `Accounts Manager` (backport [#56132 ](https://github.com/frappe/erpnext/issues/56132 )) ([#58064 ](https://github.com/frappe/erpnext/issues/58064 )) ([00d8dc7 ](00d8dc73b9 ))
* convert hours to minutes in workstation complete_job ([5e753ec ](5e753ec6e4 ))
* escape `customer_details` on lead creation from appointment (backport [#57947 ](https://github.com/frappe/erpnext/issues/57947 )) ([#57948 ](https://github.com/frappe/erpnext/issues/57948 )) ([2ca71f1 ](2ca71f16c4 ))
* field validation and perm checks on `get_stock_reservation_entries_for_voucher` (backport [#57968 ](https://github.com/frappe/erpnext/issues/57968 )) ([#57986 ](https://github.com/frappe/erpnext/issues/57986 )) ([a0d1561 ](a0d156120b ))
* get_valuation_method takes no company argument on version-15 ([c45ea35 ](c45ea3545d ))
* guard reconciliation table deletes when tables are missing ([140e06d ](140e06dfa4 ))
* incorrect entry detection in Stock Ledger Invariant Check ([#57886 ](https://github.com/frappe/erpnext/issues/57886 )) ([529ff25 ](529ff251fb ))
* keep asset repair downtime in sync with entered dates ([0e9c08d ](0e9c08d494 ))
* **manufacturing:** avoid child BOM cache lookups ([5c2123f ](5c2123f6ed ))
* **manufacturing:** correct nested BOM quantities ([a310346 ](a3103469e2 ))
* **manufacturing:** keep item code searchable when a barcode matches the same text ([0310db2 ](0310db22ec ))
* optimize product bundle item search ([52a1b12 ](52a1b124b2 ))
* preserve custom title on new JV (backport [#57987 ](https://github.com/frappe/erpnext/issues/57987 )) ([#57988 ](https://github.com/frappe/erpnext/issues/57988 )) ([713af31 ](713af31eda ))
* purchase return of batchwise valuation batch valued at original receipt rate instead of batch avg rate (version-15-hotfix) ([#57837 ](https://github.com/frappe/erpnext/issues/57837 )) ([e2ded11 ](e2ded11e09 ))
* re-check future sle before queuing repost on submit ([#57664 ](https://github.com/frappe/erpnext/issues/57664 )) ([#57960 ](https://github.com/frappe/erpnext/issues/57960 )) ([d510978 ](d510978a44 ))
* reflect in-invoice receivable settlements in Sales Register ledger view ([91afc04 ](91afc04d9f ))
* repost read stale sibling SLE rate for moving average returns ([5738cfc ](5738cfce79 ))
* require material transfer before job card time logs ([2e5ae18 ](2e5ae188d6 ))
* resolve version-15 backport conflicts ([b25a2f2 ](b25a2f2cdf ))
* **selling:** bill re-delivered sales order quantities ([47c6274 ](47c6274b13 ))
* **selling:** reset stale item details on item change (backport [#58051 ](https://github.com/frappe/erpnext/issues/58051 )) ([#58052 ](https://github.com/frappe/erpnext/issues/58052 )) ([01372cf ](01372cf295 ))
* set `restrict_globals=True` in `frappe.render_template` (backport [#57899 ](https://github.com/frappe/erpnext/issues/57899 )) ([#57901 ](https://github.com/frappe/erpnext/issues/57901 )) ([af7953a ](af7953a933 ))
* **setup:** fetch driver address by supplier link ([2a4a9ff ](2a4a9fff3d ))
* skip incoming rate calc when serial no qty is zero (backport [#57427 ](https://github.com/frappe/erpnext/issues/57427 )) ([#57956 ](https://github.com/frappe/erpnext/issues/57956 )) ([f9a09f0 ](f9a09f0ac4 ))
* **stock:** grant account access in blanket order role test ([5e78603 ](5e7860362e ))
* **stock:** handle multi-item opening balance in Stock Ledger report (backport [#57591 ](https://github.com/frappe/erpnext/issues/57591 )) ([#57795 ](https://github.com/frappe/erpnext/issues/57795 )) ([ebdc0cd ](ebdc0cdf7f ))
* **stock:** scope over deliver/receive role check to delivery and receipt overflow ([328c72d ](328c72da18 ))
* **stock:** validate new warehouse inventory account after naming ([5e3d094 ](5e3d0947c8 ))
* **stock:** validate over delivery/receipt allowance in stock settings ([7be8a99 ](7be8a99a23 ))
* **stock:** validate warehouse accounts when used ([d620720 ](d620720445 ))
* **subscription:** don't reactivate a cancelled subscription (backport [#57774 ](https://github.com/frappe/erpnext/issues/57774 )) ([#57780 ](https://github.com/frappe/erpnext/issues/57780 )) ([edc8daa ](edc8daae21 )), closes [#57761 ](https://github.com/frappe/erpnext/issues/57761 ) [#57761 ](https://github.com/frappe/erpnext/issues/57761 )
* sync open reference forms after Quality Inspection updates them ([c1d198d ](c1d198d205 ))
* tolerate floating-point drift in sales team allocated percentage ([262fbc5 ](262fbc52d8 ))
* use stock settings for warehouse defaults ([d4ed207 ](d4ed2074d5 ))
* validate webform for project ([680ce70 ](680ce70c35 ))
* zero-rate repost fallback could still read sibling SLE ([8131af9 ](8131af9405 ))
2026-08-11 23:19:46 +00:00
Diptanil Saha
942a1ddb2c
Merge pull request #58025 from frappe/version-15-hotfix
...
chore: release v15
2026-08-12 04:47:53 +05:30
Diptanil Saha
d0ef967890
fix(coa_importer): added server-side validations for importing chart of accounts (backport #58065 ) ( #58067 )
2026-08-11 22:54:34 +00:00
Diptanil Saha
00d8dc73b9
fix(coa_importer): allow importing COA through import_coa only for Accounts Manager (backport #56132 ) ( #58064 )
...
Co-authored-by: Pratheep S <pratheeps2024@gmail.com >
2026-08-11 21:16:40 +00:00
mergify[bot]
01372cf295
fix(selling): reset stale item details on item change (backport #58051 ) ( #58052 )
2026-08-11 15:54:04 +00:00
Mihir Kandoi
9c9bc8e9bf
Merge pull request #58039 from mihir-kandoi/backport-58036-version-15-hotfix
...
fix(stock): validate warehouse accounts when used (backport #58036 )
2026-08-11 19:15:29 +05:30
Mihir Kandoi
5a61ea6496
test(stock): isolate warehouse account fixtures from class-level state
...
FrappeTestCase on this branch rolls back per class, not per test, so
sibling tests leak state. test_new_warehouse_can_inherit_inventory_account
left an explicit account on the root group, which made later ambiguous
fixtures resolve through the root: the insert validation stopped raising
and the unresolved warehouse stayed in the map.
The fixture helper now clears group warehouse accounts so every call
re-establishes ambiguity. The fallback test also clears the account of
the warehouse it picks, since a leftover explicit account skips the
single-account fallback it asserts.
2026-08-11 18:58:49 +05:30
Mihir Kandoi
da2c422bf6
test(stock): cover named validation error and same-transaction parent inheritance
2026-08-11 18:31:25 +05:30
Mihir Kandoi
5e3d0947c8
fix(stock): validate new warehouse inventory account after naming
...
Move the insert-time check from before_insert to validate. before_insert
runs before set_new_name, so the validation message rendered the
warehouse name as None. validate runs after naming and only applies to
new documents via is_new().
Resolve inheritance through the parent's lft/rgt bounds instead of the
request-cached warehouse account map. The cached map can be stale within
a request (a parent created moments earlier is missing from it), which
made get_warehouse_account trigger a full nested-set rebuild_tree and
could falsely reject a child whose parent carries a valid account.
rebuild_tree enables auto_commit_on_many_writes, which must not run
inside a document insert.
2026-08-11 18:31:25 +05:30
Mihir Kandoi
d620720445
fix(stock): validate warehouse accounts when used
2026-08-11 18:04:30 +05:30
Mihir Kandoi
f5e411669a
Merge pull request #58022 from frappe/mergify/bp/version-15-hotfix/pr-58020
...
fix(setup): fetch driver address by supplier link (backport #58020 )
2026-08-11 15:31:09 +05:30
Mihir Kandoi
2a4a9fff3d
fix(setup): fetch driver address by supplier link
...
(cherry picked from commit 3ffb888d26 )
2026-08-11 09:47:54 +00:00
Mihir Kandoi
5c3063fa43
Merge pull request #58011 from mihir-kandoi/backport-58003-version-15-hotfix
...
fix(selling): bill re-delivered sales order quantities (backport #58003 )
2026-08-11 14:10:29 +05:30
Mihir Kandoi
39e4641a29
Merge pull request #58015 from mihir-kandoi/require-transfer-before-job-card-start-v15
...
fix: require material transfer before job card time logs (v15)
2026-08-11 14:04:17 +05:30
Mihir Kandoi
ac4e9c34cf
chore(selling): annotate make_sales_invoice arguments
2026-08-11 13:49:48 +05:30
Mihir Kandoi
b70fa4fdd1
test: job card time log blocked until material transfer
2026-08-11 13:41:59 +05:30
Mihir Kandoi
2e5ae188d6
fix: require material transfer before job card time logs
...
v15 adaptation of the develop fix: the timer flow here runs through
add_time_log via make_time_log, so gate that instead of the
start_timer/complete_job_card methods that only exist on develop, and
hide Start Job while transfer is pending. Corrective job cards and
job cards without items (transfer against Work Order) stay exempt,
matching validate_transfer_qty on submit.
2026-08-11 13:41:57 +05:30
Mihir Kandoi
a99b10d213
Merge pull request #58008 from frappe/codex/backport-57963-version-15
...
fix(manufacturing): correct nested BOM Explorer quantities
2026-08-11 13:34:29 +05:30
Mihir Kandoi
220b25db09
test(selling): cover invoicing after returns and re-deliveries
2026-08-11 13:26:00 +05:30
Mihir Kandoi
47c6274b13
fix(selling): bill re-delivered sales order quantities
2026-08-11 13:25:59 +05:30
Mihir Kandoi
5c2123f6ed
fix(manufacturing): avoid child BOM cache lookups
2026-08-11 13:14:49 +05:30
Mihir Kandoi
bb72ae6a3c
Merge pull request #58001 from frappe/mergify/bp/version-15-hotfix/pr-57997
...
fix: keep item code searchable when a barcode matches the same text (backport #57997 )
2026-08-11 13:08:48 +05:30
Mihir Kandoi
a3103469e2
fix(manufacturing): correct nested BOM quantities
2026-08-11 13:01:41 +05:30
Mihir Kandoi
43b874f0d4
Merge pull request #57998 from frappe/mergify/bp/version-15-hotfix/pr-57972
...
refactor: drop redundant time_in_mins assignment in workstation complete_job (backport #57972 )
2026-08-11 12:28:42 +05:30
Kaushal Shriwas
a9743ae5da
chore: resolve backport conflict in bom.py
2026-08-11 12:25:29 +05:30
Kaushal Shriwas
760b365225
test(manufacturing): cover BOM item search when item code collides with a barcode
...
(cherry picked from commit 23024d1ea9 )
2026-08-11 06:42:55 +00:00
Kaushal Shriwas
0310db22ec
fix(manufacturing): keep item code searchable when a barcode matches the same text
...
(cherry picked from commit bf5d506637 )
# Conflicts:
# erpnext/manufacturing/doctype/bom/mapper.py
2026-08-11 06:42:55 +00:00
Mihir Kandoi
496883f4e1
refactor: drop redundant time_in_mins assignment in complete_job
...
(cherry picked from commit 3cffeb68e3 )
2026-08-11 06:39:14 +00:00
pandiyan
5e753ec6e4
fix: convert hours to minutes in workstation complete_job
...
`time_diff_in_hours` returns hours, so `time_in_mins` needs `* 60`, not
`/ 60`. Matches `Job Card.validate_time_log_row`.
No behaviour change: the `doc.save()` on the next line runs Job Card's
`validate`, which recomputes `time_in_mins` correctly before the row is
written. This only stops the expression from reading as a bug.
(cherry picked from commit 422a9161dd )
2026-08-11 06:39:14 +00:00
mergify[bot]
27af9baaa5
refactor(queries): using frappe.get_query in get_filtered_child_rows (backport #57991 ) ( #57992 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-10 19:51:55 +00:00
mergify[bot]
a0d156120b
fix: field validation and perm checks on get_stock_reservation_entries_for_voucher (backport #57968 ) ( #57986 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-10 22:04:42 +05:30
mergify[bot]
713af31eda
fix: preserve custom title on new JV (backport #57987 ) ( #57988 )
...
Co-authored-by: rehanrehman389 <rehanrehman389@gmail.com >
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-10 16:27:03 +00:00
ruthra kumar
df8edcdc91
Merge pull request #57830 from aerele/backport-57140-v15
...
fix: clear deferred revenue/expense fields on uncheck (backport #57140 )
2026-08-10 15:04:11 +05:30
Pandiyan P
d510978a44
fix: re-check future sle before queuing repost on submit ( #57664 ) ( #57960 )
...
* test: cover both repost branches and the no-repost case
* fix: queue repost for entries backdated by a concurrent submit
---------
(cherry picked from commit 399ff463cc )
Co-authored-by: nareshkannasln <nareshkannashanmugam@gmail.com >
2026-08-10 14:03:41 +05:30
mergify[bot]
f9a09f0ac4
fix: skip incoming rate calc when serial no qty is zero (backport #57427 ) ( #57956 )
...
fix: skip incoming rate calc when serial no qty is zero (#57427 )
(cherry picked from commit a25decfa50 )
Co-authored-by: Shllokkk <140623894+Shllokkk@users.noreply.github.com >
2026-08-10 06:48:58 +00:00
Khushi Rawat
a2b2f5173e
Merge pull request #57823 from Shllokkk/asset-repair-downtime-recalc-v15
...
fix: keep asset repair downtime in sync with entered dates
2026-08-10 12:05:01 +05:30
mergify[bot]
2ca71f16c4
fix: escape customer_details on lead creation from appointment (backport #57947 ) ( #57948 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-09 19:30:11 +00:00
Shllokkk
ae18d13e6e
Merge pull request #57928 from Shllokkk/sales-register-ledger-pos-paid-v15
...
fix: reflect in-invoice receivable credits in Sales Register ledger view
2026-08-09 23:39:00 +05:30
Shllokkk
7edb95628c
test: cover POS-paid invoice in Sales Register ledger view
2026-08-09 20:22:31 +05:30
Shllokkk
91afc04d9f
fix: reflect in-invoice receivable settlements in Sales Register ledger view
2026-08-09 20:22:31 +05:30
Mihir Kandoi
3c5b2ededf
Merge pull request #57920 from frappe/mergify/bp/version-15-hotfix/pr-57918
...
fix: sync open reference forms after Quality Inspection submit (backport #57918 )
2026-08-09 16:38:01 +05:30
Mihir Kandoi
94d1dfdcb4
chore: resolve conflict
2026-08-09 16:18:49 +05:30
Mihir Kandoi
2270b22400
test: doc_update published for reference on Quality Inspection submit
...
(cherry picked from commit e8a6884d5e )
# Conflicts:
# erpnext/stock/doctype/quality_inspection/test_quality_inspection.py
2026-08-09 10:39:05 +00:00
Mihir Kandoi
c1d198d205
fix: sync open reference forms after Quality Inspection updates them
...
update_qc_reference() writes the QI link and bumps the reference
document's modified timestamp via raw db writes, which emit no realtime
event. A reference form (Purchase Receipt, Delivery Note, Stock Entry,
Job Card) still open in the browser keeps the old timestamp and fails
the timestamp conflict check on the next save/submit, forcing a manual
refresh after every QI submit/cancel/delete.
Calling notify_update() on the reference publishes the standard
doc_update event, so an open, unedited form silently reloads and syncs
its timestamp. get_lazy_doc skips child table loading since
notify_update only needs the parent row.
(cherry picked from commit 647452c95b )
2026-08-09 10:39:05 +00:00
Mihir Kandoi
db4f6db753
Merge pull request #57909 from frappe/mergify/bp/version-15-hotfix/pr-57876
...
fix: allow selecting a warehouse for new items in the update items dialog (backport #57876 )
2026-08-09 13:17:57 +05:30
Mihir Kandoi
ee27df7d2b
Merge pull request #57912 from frappe/mergify/bp/version-15-hotfix/pr-57911
...
fix: tolerate floating-point drift in sales team allocated percentage (backport #57911 )
2026-08-09 13:07:26 +05:30
Mihir Kandoi
d4ed2074d5
fix: use stock settings for warehouse defaults
2026-08-09 13:01:01 +05:30
Mihir Kandoi
206d291817
chore: resolve conflict
2026-08-09 12:50:38 +05:30
Mihir Kandoi
c23aa72dff
chore: resolve conflict
2026-08-09 12:41:55 +05:30
pandiyan
1a89609044
test: sales team allocation totalling 100 in floating point
...
covers the case where the percentages are correct but the accumulated
sum is 100.00000000000001. two rows can never drift, since the second
reconstructs exactly as 100 - first, so the case needs three rows.
(cherry picked from commit 4afba94d1c )
# Conflicts:
# erpnext/selling/doctype/sales_order/test_sales_order.py
2026-08-09 06:59:23 +00:00
pandiyan
262fbc52d8
fix: tolerate floating-point drift in sales team allocated percentage
...
the total of allocated_percentage was compared to 100 with exact float
equality, so a correct allocation could be rejected when the sum drifts
in binary floating point (10.0 + 58.02 + 31.98 -> 100.00000000000001).
round the total to the field precision before comparing, in both
SellingController.calculate_contribution and Customer.validate.
(cherry picked from commit f7b2775829 )
2026-08-09 06:59:22 +00:00
mergify[bot]
7d9abee6b4
refactor(accounts)!: rework Purchase Invoice hold actions and enforce them on Journal Entry (backport #57825 ) ( #57867 )
...
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-08-09 06:50:44 +00:00
Pandiyan P
76f485ba43
fix: allow selecting a warehouse for new items in the update items dialog ( #57876 )
...
(cherry picked from commit 55fe269046 )
# Conflicts:
# erpnext/accounts/services/child_item_update.py
# erpnext/public/js/utils.js
# erpnext/selling/doctype/sales_order/test_sales_order.py
2026-08-09 06:01:36 +00:00
Mihir Kandoi
8fc5cb2444
Merge pull request #57907 from frappe/mergify/bp/version-15-hotfix/pr-57832
...
fix: validate webform for project (backport #57832 )
2026-08-09 09:59:47 +05:30
nishkagosalia
680ce70c35
fix: validate webform for project
...
(cherry picked from commit 126966d1db )
2026-08-09 04:12:10 +00:00
mergify[bot]
af7953a933
fix: set restrict_globals=True in frappe.render_template (backport #57899 ) ( #57901 )
...
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-08-09 00:04:14 +05:30
Mihir Kandoi
de9d306bfd
Merge pull request #57891 from mihir-kandoi/backport-57887-v15
...
fix: repost read stale sibling SLE rate for moving average returns (backport #57887 )
2026-08-08 12:02:32 +05:30
Mihir Kandoi
e63a81b269
Merge pull request #57888 from frappe/mergify/bp/version-15-hotfix/pr-57886
...
fix: incorrect entry detection in Stock Ledger Invariant Check (backport #57886 )
2026-08-08 11:43:21 +05:30
Mihir Kandoi
c45ea3545d
fix: get_valuation_method takes no company argument on version-15
2026-08-08 11:24:44 +05:30
Mihir Kandoi
8131af9405
fix: zero-rate repost fallback could still read sibling SLE
...
When the in-memory running rate is zero, the fallback went through
get_incoming_rate, whose previous-SLE lookup matches the same
posting_datetime and can land on a sibling line of the voucher being
replayed. Replace it with get_previous_sle_of_current_voucher excluding
the current voucher, keeping the get_valuation_rate chain when no
previous entry exists. get_incoming_rate is no longer used in this
module.
2026-08-08 11:12:41 +05:30
Mihir Kandoi
9c8d5ac8a5
test: repost of multi-line moving average return is idempotent
...
Reposting a return that removes most of the stock across several lines
of the same item must keep every line at the running average and produce
identical results on a second repost. Before the fix the first repost
already drifted, seeding each line from a sibling row of the same
voucher.
2026-08-08 11:12:41 +05:30
Mihir Kandoi
5738cfce79
fix: repost read stale sibling SLE rate for moving average returns
...
During repost, a return line with recalculate_rate resolved its moving
average rate through get_incoming_rate -> get_previous_sle, which matches
posting_datetime <= and orders by creation desc. For a multi-line return
of the same item, every line shares one posting_datetime, so the query
landed on a sibling line of the same voucher whose stored valuation_rate
was still the previous repost run's output, not the rate before the
voucher.
Each repost run therefore re-seeded the voucher from its own prior
output. The error gain per run is (qty returned at the stale rate) /
(qty remaining after the return), so whenever a return removes most of
the stock the loop diverges instead of converging, alternating sign and
growing until stock_value overflows decimal(21,9) and the repost dies
with 'Out of range value for column stock_value'.
Use the in-memory running valuation rate that update_entries_after
already tracks for the warehouse at this point in the repost. It is the
authoritative pre-entry state, is immune to sibling rows, and makes the
repost idempotent. The database lookup is kept only as a fallback for a
zero in-memory rate, preserving the existing zero-rate fallback chain.
2026-08-08 11:12:41 +05:30
Mihir Kandoi
529ff251fb
fix: incorrect entry detection in Stock Ledger Invariant Check ( #57886 )
...
(cherry picked from commit b3f97cd389 )
2026-08-08 05:31:48 +00:00
Shllokkk
ec7d7cce5c
Merge pull request #57881 from frappe/mergify/bp/version-15-hotfix/pr-57880
...
fix: guard reconciliation table deletes when tables are missing (backport #57880 )
2026-08-07 22:00:33 +05:30
Shllokkk
140e06dfa4
fix: guard reconciliation table deletes when tables are missing
...
(cherry picked from commit 8a2b2a2b68 )
2026-08-07 14:34:58 +00:00
Mihir Kandoi
522d7bb1a9
Merge pull request #57869 from frappe/mergify/bp/version-15-hotfix/pr-57866
...
fix: optimize product bundle item search (backport #57866 )
2026-08-07 16:05:07 +05:30
Krishna Shirsath
52a1b124b2
fix: optimize product bundle item search
...
(cherry picked from commit b3867f1428 )
2026-08-07 10:33:15 +00:00
rohitwaghchaure
e2ded11e09
fix: purchase return of batchwise valuation batch valued at original receipt rate instead of batch avg rate (version-15-hotfix) ( #57837 )
...
* fix: use current batch avg rate for outward returns of batchwise valuation batches
* fix: honor zero batch average and avoid duplicate batch classification query
2026-08-06 15:20:34 +05:30
pandiyan
ce898a9695
fix: clear deferred revenue/expense fields on uncheck (backport #57140 )
2026-08-06 11:25:35 +05:30
Shllokkk
242c950d1b
test: assert asset repair downtime recalculates on date change
2026-08-06 00:33:58 +05:30
Shllokkk
0e9c08d494
fix: keep asset repair downtime in sync with entered dates
2026-08-06 00:33:58 +05:30
Mihir Kandoi
1bfe2e25ef
Merge pull request #57727 from frappe/mergify/bp/version-15-hotfix/pr-57725
...
fix(stock): scope over deliver/receive role check to delivery and receipt overflow (backport #57725 )
2026-08-05 16:05:25 +05:30
Sudharsanan11
5e7860362e
fix(stock): grant account access in blanket order role test
2026-08-05 15:16:27 +05:30
Mihir Kandoi
b25a2f2cdf
fix: resolve version-15 backport conflicts
...
Keep validate_warehouses() and add validate_over_delivery_receipt_allowance();
validate_serial_and_batch_no_settings() does not exist on this branch.
Keep this branch's field labels and add only the non_negative flag the
backported commit introduced.
Drop test_over_order_allowance_against_material_request and
test_blanket_order_over_order_aggregated_across_rows: both are develop-only
context the cherry-pick swallowed into the conflicts, and Buying Settings has
no over_order_allowance field here.
Use frappe.tests.utils.change_settings instead of ERPNextTestSuite, which this
branch does not have.
Revert the valuation_method literal to the three options this branch offers -
Standard Cost rode along from a regenerated develop type block.
2026-08-05 15:16:27 +05:30
Afsal Syed
21c3e07f48
test(stock): prevent settings leakage in purchase order tests
...
(cherry picked from commit 99630f40eb )
# Conflicts:
# erpnext/buying/doctype/purchase_order/test_purchase_order.py
2026-08-05 15:16:27 +05:30
Afsal Syed
f5ab55c38d
test(stock): add test cases verifying stock over delivery role does not bypass order allowance
...
(cherry picked from commit 0b271e24b6 )
# Conflicts:
# erpnext/buying/doctype/purchase_order/test_purchase_order.py
# erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
2026-08-05 15:16:27 +05:30
Afsal Syed
328c72da18
fix(stock): scope over deliver/receive role check to delivery and receipt overflow
...
(cherry picked from commit 248873034d )
# Conflicts:
# erpnext/controllers/status_updater.py
2026-08-05 15:16:27 +05:30
Afsal Syed
7be8a99a23
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-05 15:16:27 +05:30
mergify[bot]
ebdc0cdf7f
fix(stock): handle multi-item opening balance in Stock Ledger report (backport #57591 ) ( #57795 )
...
* fix(stock): handle multi-item opening balance in Stock Ledger report (#57591 )
* fix(stock): handle multi-item opening balance in Stock
* test(stock): add unit test for multi-item Stock Ledger report
---------
Co-authored-by: Afsal Syed <afsalsyed12@gmail.com >
(cherry picked from commit 0dbe410414 )
# Conflicts:
# erpnext/stock/report/stock_ledger/stock_ledger.py
# erpnext/stock/report/stock_ledger/test_stock_ledger_report.py
* fix(stock): resolve stock ledger backport conflicts
---------
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com >
Co-authored-by: Sudharsanan11 <sudharsananashok1975@gmail.com >
2026-08-05 13:15:59 +05:30
mergify[bot]
69c00b3362
fix(accounts receivable): made territory field multi select (backport #57322 ) ( #57808 )
...
fix(accounts receivable): made territory field multi select (#57322 )
(cherry picked from commit 1029cd988a )
Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com >
2026-08-05 07:35:28 +00:00
Jatin3128
edc8daae21
fix(subscription): don't reactivate a cancelled subscription (backport #57774 ) ( #57780 )
...
* fix(subscription): don't reactivate a cancelled subscription
Backport of #57774 to version-15-hotfix.
set_subscription_status() unconditionally set status to Active once
there was no outstanding invoice, with no check for whether the
subscription had been intentionally cancelled. process()'s
cancel_at_period_end check compared posting_date against
getdate(self.end_date), and getdate(None) returns today, so an empty
end_date was silently treated as "cancel now" on every reprocess.
version-15-hotfix does not yet have the Payment Entry -> invoice ->
refresh_subscription_status() hook chain that #57761 reports (that
was added later), and the scheduler already excludes Cancelled
subscriptions, so the exact automatic repro in the issue does not
apply here. The underlying status logic is defective the same way
though, and reachable directly (e.g. any caller invoking the
whitelisted process()/set_subscription_status() on a cancelled
subscription), so fixing it here too rather than leaving the same
class of bug in place.
Related to #57761
* fix(test): avoid tripping the unrelated period-end cancel clause
The test backdated start_date to 2018-01-01, so by the time process()
ran, current_invoice_end was long past. That made the *other* half of
the cancel_at_period_end OR-condition (period end reached) true on
its own, so process() tried to cancel an already-cancelled
subscription and hit cancel_subscription()'s "already cancelled"
guard - unrelated to the empty end_date bug being tested.
Use nowdate() as start_date so current_invoice_end sits safely in the
future, isolating the assertion to the empty end_date guard. Also
drop the fragile intermediate "Unpaid" status assertion, which
wasn't part of what this test verifies.
* fix(subscription): don't let period rollover defeat cancel_at_period_end
process() can advance current_invoice_end to the next period (via
update_subscription_period(), when generating the current period's
invoice) before the cancel_at_period_end check further down runs. For
a subscription with no end_date, that check now compared posting_date
against the already-rolled-forward current_invoice_end, which is
always in the future, so cancel_at_period_end was silently never
honored.
Snapshot current_invoice_end before any rollover and use that in the
check instead, so it still targets the period that just ended.
Fixes the P1 flagged by Greptile review on this PR.
---------
Co-authored-by: test <test@test.com >
2026-08-05 12:26:01 +05:30