Compare commits

...

1370 Commits

Author SHA1 Message Date
Frappe PR Bot
054b20a2ae chore(release): Bumped to Version 16.22.0
# [16.22.0](https://github.com/frappe/erpnext/compare/v16.21.1...v16.22.0) (2026-06-10)

### Bug Fixes

* **accounts:** include asset items in purchase receipt validation ([#55150](https://github.com/frappe/erpnext/issues/55150)) ([0984c86](0984c86583))
* Add authorization checks on internal functions (backport [#55709](https://github.com/frappe/erpnext/issues/55709)) ([#55726](https://github.com/frappe/erpnext/issues/55726)) ([2ae6451](2ae6451f10))
* add company filter to Budget Against dimension options ([bfc6f44](bfc6f44fb0))
* add custom dimensions filters in Gross and Net profit report (backport [#55110](https://github.com/frappe/erpnext/issues/55110)) ([#55584](https://github.com/frappe/erpnext/issues/55584)) ([5d7e69d](5d7e69d8cf))
* Add likely missing escapes (backport [#55574](https://github.com/frappe/erpnext/issues/55574)) ([#55581](https://github.com/frappe/erpnext/issues/55581)) ([6a503f8](6a503f834c))
* aggregate child cost center data in Budget Variance Report ([4f2611c](4f2611cbe8))
* allow specific methods to run ([c9a5b00](c9a5b0026e))
* bypass project permission check when updating consumed material … (backport [#55645](https://github.com/frappe/erpnext/issues/55645)) ([#55707](https://github.com/frappe/erpnext/issues/55707)) ([4471666](4471666c8c))
* **cheque_print_template:** print format creation from cheque print template requires system manager (backport [#55708](https://github.com/frappe/erpnext/issues/55708)) ([#55712](https://github.com/frappe/erpnext/issues/55712)) ([38dd298](38dd2982f3))
* disallow BOM finished good item in secondary items table (backport [#55710](https://github.com/frappe/erpnext/issues/55710)) ([#55719](https://github.com/frappe/erpnext/issues/55719)) ([ecd3a19](ecd3a19912))
* do not allow to make changes in SABB after submit ([a03e3bf](a03e3bfe9f))
* don't allow to submit job card with hold status ([b4c850d](b4c850da1c))
* drop ignore_permissions handling from add_ac ([c0cf9aa](c0cf9aa1a7))
* duplicating a Customer/Supplier shouldn't inherit the source's primary contact and address (backport [#55421](https://github.com/frappe/erpnext/issues/55421)) ([#55609](https://github.com/frappe/erpnext/issues/55609)) ([808e51d](808e51db19))
* handle multi-select stock ageing filters ([#55775](https://github.com/frappe/erpnext/issues/55775)) ([e48ffe6](e48ffe6ef0))
* handle separator rows in financial statement formatter ([d8afc00](d8afc00ab5))
* include CRM Deal in `quotation to` filters ([f7e6542](f7e6542bcd))
* item report view ([7dfae51](7dfae51044))
* **item:** format integer numeric variant attributes without decimals (backport [#55561](https://github.com/frappe/erpnext/issues/55561)) ([#55564](https://github.com/frappe/erpnext/issues/55564)) ([fffba84](fffba84868))
* linter issue ([dd83705](dd837052ef))
* minor fixes in report print formats ([#55151](https://github.com/frappe/erpnext/issues/55151)) ([80f7aff](80f7aff3f9))
* move Company filter at the start ([3fb6437](3fb6437d26))
* naming series issue ([6eecf07](6eecf0701e))
* prevent double rounding in inclusive tax calculations (backport [#52512](https://github.com/frappe/erpnext/issues/52512)) ([#55570](https://github.com/frappe/erpnext/issues/55570)) ([37b61f0](37b61f06ae))
* prevent leakage of party-derived fields in cross doctype transactions (backport [#55336](https://github.com/frappe/erpnext/issues/55336)) ([#55579](https://github.com/frappe/erpnext/issues/55579)) ([7904385](7904385b90))
* prevent negative amounts in common party JE on return invoices (backport [#55034](https://github.com/frappe/erpnext/issues/55034)) ([#55064](https://github.com/frappe/erpnext/issues/55064)) ([9eb0e3c](9eb0e3c82e))
* prevent selling items from sample retention warehouse (backport [#55613](https://github.com/frappe/erpnext/issues/55613)) ([#55634](https://github.com/frappe/erpnext/issues/55634)) ([84d205f](84d205f553))
* **process statement of accounts:** validate pdf_name and validate permission before triggering send_auto_email (backport [#55781](https://github.com/frappe/erpnext/issues/55781)) ([#55783](https://github.com/frappe/erpnext/issues/55783)) ([e15879a](e15879acd1))
* **profit-and-loss-statement-report:** margin calculation the report showing null% for empty cell ([04fe76b](04fe76bf83))
* **profit-and-loss-statement:** margin calculation the report showing null% for empty cell ([b3d3f13](b3d3f13fc5))
* **profit-loss-report:** handle zero base values and prevent null% display ([90ac065](90ac065930))
* remove item name from update items dialog item code column (backport [#55718](https://github.com/frappe/erpnext/issues/55718)) ([#55723](https://github.com/frappe/erpnext/issues/55723)) ([497c3a5](497c3a5e83))
* restrict already invoiced qty in intercompany purchase invoice ([#55768](https://github.com/frappe/erpnext/issues/55768)) ([e90a6ec](e90a6ecf1c))
* **selling:** consider delivered qty (backport [#55597](https://github.com/frappe/erpnext/issues/55597)) ([#55607](https://github.com/frappe/erpnext/issues/55607)) ([142ab3c](142ab3ce2a))
* simplify New Zealand sales accounts ([93de14c](93de14c421))
* skip empty spacer rows in compute_growth_view_data (P&L growth view) ([18afcf0](18afcf0c01))
* spelling of Payment Reconciliation in sidebar (backport [#55599](https://github.com/frappe/erpnext/issues/55599)) ([#55602](https://github.com/frappe/erpnext/issues/55602)) ([40cf77e](40cf77e7f0))
* sql injection ([02a29a8](02a29a85a7))
* Stock Reservation blocks Subcontracting operation within the same Work Order ([1c0dace](1c0dace3d6))
* **stock:** add validation for work order seial nos and batch nos (backport [#55604](https://github.com/frappe/erpnext/issues/55604)) ([#55605](https://github.com/frappe/erpnext/issues/55605)) ([7de77a8](7de77a8916))
* **stock:** change valuation rate column label in stock ledger entry/report (backport [#55323](https://github.com/frappe/erpnext/issues/55323)) ([#55394](https://github.com/frappe/erpnext/issues/55394)) ([c6560be](c6560be58d))
* **stock:** set stock received but not billed account for purchase ([#55149](https://github.com/frappe/erpnext/issues/55149)) ([90667b2](90667b2de2))
* **subscription:** bill on creation and keep status in sync with invoices (backport [#55615](https://github.com/frappe/erpnext/issues/55615)) ([#55701](https://github.com/frappe/erpnext/issues/55701)) ([0f069e1](0f069e13da))
* **subscription:** correct billing/deferred bugs and tighten guards (backport [#55554](https://github.com/frappe/erpnext/issues/55554)) ([#55610](https://github.com/frappe/erpnext/issues/55610)) ([dee7bd8](dee7bd8d64))
* **taxes:** add category and add_deduct_tax fields to tax entries (backport [#55753](https://github.com/frappe/erpnext/issues/55753)) ([#55773](https://github.com/frappe/erpnext/issues/55773)) ([9a6fae9](9a6fae9fdd))
* update add_total_row_account to control blank row addition ([e8a6933](e8a6933ff3))
* update formatter to handle blank rows in financial statements ([f657503](f657503ea3))
* update items respects workflow "Only Allow Edit For" role ([#55667](https://github.com/frappe/erpnext/issues/55667)) ([76b9b6a](76b9b6a34e))
* use new_doc with field allowlist in CRM integration endpoints ([d941ccf](d941ccfe3c))
* **UX:** Accounts settings cleanup (backport [#55470](https://github.com/frappe/erpnext/issues/55470)) ([#55603](https://github.com/frappe/erpnext/issues/55603)) ([3917415](3917415368))
* **UX:** stock settings form cleanup ([f6f542f](f6f542fadc))
* validate fg and materials qty in the disassemble entry ([4453c10](4453c1072a))
* work order status should be in process if material transfer is skipped (backport [#55641](https://github.com/frappe/erpnext/issues/55641) to version-16-hotfix) ([#55642](https://github.com/frappe/erpnext/issues/55642)) ([32011c3](32011c3364))

### Features

* add item where used report ([#55714](https://github.com/frappe/erpnext/issues/55714)) ([8f85cce](8f85cce4cf))
* add New Zealand chart of accounts ([107a446](107a446d98))
* added cost of goods sold (backport [#54974](https://github.com/frappe/erpnext/issues/54974)) ([#55552](https://github.com/frappe/erpnext/issues/55552)) ([20af709](20af7093ac))
* create sales invoice from pick list (backport [#55594](https://github.com/frappe/erpnext/issues/55594)) ([#55635](https://github.com/frappe/erpnext/issues/55635)) ([743afc9](743afc972d))
* item prices list view ([#54853](https://github.com/frappe/erpnext/issues/54853)) ([12c1940](12c1940e0b))
* show non stock items and secondary items in work order (backport [#55631](https://github.com/frappe/erpnext/issues/55631)) ([#55636](https://github.com/frappe/erpnext/issues/55636)) ([3f983c9](3f983c9e4d))

### Performance Improvements

* batch status check for on-hold/closed documents, remove N+1 queries (backport [#54798](https://github.com/frappe/erpnext/issues/54798)) ([#55573](https://github.com/frappe/erpnext/issues/55573)) ([0274afe](0274afe560))
* **transaction:** exit early before backend query (backport [#55556](https://github.com/frappe/erpnext/issues/55556)) ([#55558](https://github.com/frappe/erpnext/issues/55558)) ([6a1c384](6a1c384f9b))
2026-06-10 00:25:19 +00:00
Mihir Kandoi
03f6b7a50e Merge pull request #55764 from frappe/version-16-hotfix 2026-06-10 05:53:43 +05:30
mergify[bot]
e15879acd1 fix(process statement of accounts): validate pdf_name and validate permission before triggering send_auto_email (backport #55781) (#55783)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix(process statement of accounts): validate pdf_name and validate permission before triggering send_auto_email (#55781)
2026-06-09 19:11:44 +00:00
rohitwaghchaure
01e90830f1 Merge pull request #55766 from rohitwaghchaure/fixed-github-55621-v16
fix: Stock Reservation blocks Subcontracting operation within the same work order
2026-06-09 20:00:20 +05:30
Rohit Waghchaure
1c0dace3d6 fix: Stock Reservation blocks Subcontracting operation within the same Work Order 2026-06-09 19:40:45 +05:30
Mihir Kandoi
e48ffe6ef0 fix: handle multi-select stock ageing filters (#55775) 2026-06-09 13:52:32 +00:00
MochaMind
8ff6fc5fea chore: sync translations to version-16-hotfix (#55739) 2026-06-09 13:19:55 +00:00
Pandiyan P
e90a6ecf1c fix: restrict already invoiced qty in intercompany purchase invoice (#55768) 2026-06-09 13:16:22 +00:00
mergify[bot]
9a6fae9fdd fix(taxes): add category and add_deduct_tax fields to tax entries (backport #55753) (#55773)
Co-authored-by: Lakshit Jain <ljain112@gmail.com>
fix(taxes): add category and add_deduct_tax fields to tax entries (#55753)
2026-06-09 12:59:13 +00:00
mergify[bot]
7904385b90 fix: prevent leakage of party-derived fields in cross doctype transactions (backport #55336) (#55579)
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
Co-authored-by: Lakshit Jain <ljain112@gmail.com>
fix: prevent leakage of party-derived fields in cross doctype transactions (#55336)
2026-06-09 18:03:26 +05:30
rohitwaghchaure
f0e51b35a6 Merge pull request #55762 from frappe/mergify/bp/version-16-hotfix/pr-55760
fix: don't allow to submit job card with hold status (backport #55760)
2026-06-09 15:15:39 +05:30
rohitwaghchaure
60a270acd4 chore: fix conflicts
Removed validation for completed quantity matching in job card.
2026-06-09 14:56:39 +05:30
Rohit Waghchaure
b4c850da1c fix: don't allow to submit job card with hold status
(cherry picked from commit 9c23229cbf)

# Conflicts:
#	erpnext/manufacturing/doctype/job_card/job_card.py
2026-06-09 09:01:09 +00:00
ruthra kumar
9b1cdd0e8f Merge pull request #55729 from frappe/mergify/bp/version-16-hotfix/pr-55486
Validations in CRM-api endpoints (backport #55486)
2026-06-09 10:31:49 +05:30
rohitwaghchaure
26a19bf372 Merge pull request #55752 from frappe/mergify/bp/version-16-hotfix/pr-55748
fix: sql injection (backport #55748)
2026-06-09 09:49:00 +05:30
Rohit Waghchaure
02a29a85a7 fix: sql injection
(cherry picked from commit bd0acf4413)
2026-06-09 03:58:34 +00:00
rohitwaghchaure
6e7a96eae9 Merge pull request #55744 from frappe/mergify/bp/version-16-hotfix/pr-55737
fix: allow specific methods to run (backport #55737)
2026-06-09 09:27:46 +05:30
Rohit Waghchaure
dd837052ef fix: linter issue 2026-06-08 23:17:29 +05:30
rohitwaghchaure
95818ec71d chore: fix conflicts
Removed redundant quantity assignments and completion time logging from job card processing.
2026-06-08 20:08:16 +05:30
rohitwaghchaure
3d1327cfe5 chore: fix conflicts 2026-06-08 20:06:44 +05:30
rohitwaghchaure
b617f1302d chore: fix conflicts 2026-06-08 20:05:46 +05:30
Rohit Waghchaure
c9a5b0026e fix: allow specific methods to run
(cherry picked from commit 8db1eb0d27)

# Conflicts:
#	erpnext/manufacturing/doctype/job_card/job_card.py
2026-06-08 14:18:26 +00:00
rohitwaghchaure
c5434e39d8 Merge pull request #55740 from rohitwaghchaure/fixed-support-67770-3-v16
fix: validate fg and materials qty in the disassemble entry
2026-06-08 19:30:34 +05:30
Rohit Waghchaure
4453c1072a fix: validate fg and materials qty in the disassemble entry 2026-06-08 17:42:04 +05:30
MochaMind
8e930d0ef1 chore: update POT file (#55691) 2026-06-08 11:15:28 +00:00
rohitwaghchaure
e6f6f2c173 Merge pull request #55735 from frappe/mergify/bp/version-16-hotfix/pr-55716
fix: do not allow to make changes in SABB after submit (backport #55716)
2026-06-08 16:02:51 +05:30
mergify[bot]
2ae6451f10 fix: Add authorization checks on internal functions (backport #55709) (#55726)
* fix: Add authorization checks on internal functions (#55709)

(cherry picked from commit ba936eefab)

# Conflicts:
#	erpnext/accounts/doctype/pos_profile/pos_profile.py
#	erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
#	erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py
#	erpnext/support/doctype/issue/issue.py

* chore: conflicts

---------

Co-authored-by: Ankush Menat <ankush@frappe.io>
2026-06-08 10:16:12 +00:00
mergify[bot]
497c3a5e83 fix: remove item name from update items dialog item code column (backport #55718) (#55723)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
Co-authored-by: Abdullah <frappe@LAPTOP-4E788RM4.localdomain>
fix: remove item name from update items dialog item code column (#55718)
2026-06-08 15:42:38 +05:30
rohitwaghchaure
5efeb2af18 chore: fix conflicts
Removed unused import for StockReconciliationItem.
2026-06-08 15:30:48 +05:30
Rohit Waghchaure
a03e3bfe9f fix: do not allow to make changes in SABB after submit
(cherry picked from commit e36426e235)

# Conflicts:
#	erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
2026-06-08 09:56:18 +00:00
Shllokkk
d941ccfe3c fix: use new_doc with field allowlist in CRM integration endpoints
(cherry picked from commit e460e83516)
2026-06-08 09:41:26 +00:00
mergify[bot]
ecd3a19912 fix: disallow BOM finished good item in secondary items table (backport #55710) (#55719)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
fix: disallow BOM finished good item in secondary items table (#55710)
2026-06-08 13:40:59 +05:30
Mihir Kandoi
8f85cce4cf feat: add item where used report (#55714) 2026-06-08 07:52:23 +00:00
mergify[bot]
38dd2982f3 fix(cheque_print_template): print format creation from cheque print template requires system manager (backport #55708) (#55712)
* fix(cheque_print_template): print format creation from cheque print template requires system manager (#55708)

(cherry picked from commit faf92b1368)

# Conflicts:
#	erpnext/accounts/doctype/cheque_print_template/cheque_print_template.py

* chore: resolved conflicts

---------

Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-06-08 07:48:24 +00:00
mergify[bot]
4471666c8c fix: bypass project permission check when updating consumed material … (backport #55645) (#55707)
* fix: bypass project permission check when updating consumed material cost

(cherry picked from commit 4b0b7adeee)

# Conflicts:
#	erpnext/stock/doctype/stock_entry/stock_entry.py

* chore: resolve conflicts

---------

Co-authored-by: pandiyan <pandiyanpalani37@gmail.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-06-08 07:11:04 +00:00
ruthra kumar
c1b47bd561 Merge pull request #55704 from frappe/mergify/bp/version-16-hotfix/pr-55665
fix: drop ignore_permissions handling from add_ac (backport #55665)
2026-06-08 12:09:44 +05:30
mergify[bot]
c6560be58d fix(stock): change valuation rate column label in stock ledger entry/report (backport #55323) (#55394)
Co-authored-by: Sudharsanan11 <sudharsananashok1975@gmail.com>
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
2026-06-08 11:54:00 +05:30
kaulith
76b9b6a34e fix: update items respects workflow "Only Allow Edit For" role (#55667) 2026-06-08 11:52:59 +05:30
Shllokkk
c0cf9aa1a7 fix: drop ignore_permissions handling from add_ac
(cherry picked from commit 37d2adc74b)
2026-06-08 06:15:15 +00:00
mergify[bot]
0f069e13da fix(subscription): bill on creation and keep status in sync with invoices (backport #55615) (#55701)
* fix(subscription): bill on creation and keep status in sync with invoices (#55615)

(cherry picked from commit bb36e956ac)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.py
#	erpnext/accounts/utils.py

* fix(subscription): resolve cherry-pick conflicts for version-16-hotfix backport

---------

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
Co-authored-by: Jatin3128 <jatinsarna8@gmail.com>
2026-06-08 07:33:08 +05:30
mergify[bot]
a761a98e3a ci: add review comments on gettext files (backport #55699) (#55700)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-06-07 23:27:29 +00:00
mergify[bot]
a9926871d6 chore: remove unused whitelisted method from project (backport #55648) (#55673)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-06-07 23:16:02 +05:30
Nabin Hait
0785fa0257 Merge pull request #55698 from frappe/mergify/bp/version-16-hotfix/pr-55101
fix: handle blank rows in financial statement formatter (backport #55101)
2026-06-07 22:55:44 +05:30
Nabin Hait
86ee17614c Merge pull request #55697 from frappe/mergify/bp/version-16-hotfix/pr-54684
fix(profit-loss-report): handle zero base values and prevent null% display (backport #54684)
2026-06-07 22:55:34 +05:30
Abdeali Chharchhoda
f657503ea3 fix: update formatter to handle blank rows in financial statements
(cherry picked from commit 814c11200a)
2026-06-07 16:58:49 +00:00
Abdeali Chharchhoda
e8a6933ff3 fix: update add_total_row_account to control blank row addition
(cherry picked from commit f7c744350c)
2026-06-07 16:58:49 +00:00
Abdeali Chharchhoda
d8afc00ab5 fix: handle separator rows in financial statement formatter
(cherry picked from commit cf597361f6)
2026-06-07 16:58:49 +00:00
Ahmed Reda Abukhatwa
18afcf0c01 fix: skip empty spacer rows in compute_growth_view_data (P&L growth view)
(cherry picked from commit 3592c3086d)
2026-06-07 16:56:54 +00:00
Ahmed Reda Abukhatwa
90ac065930 fix(profit-loss-report): handle zero base values and prevent null% display
(cherry picked from commit 7335011814)
2026-06-07 16:56:54 +00:00
Ahmed Reda Abukhatwa
b3d3f13fc5 fix(profit-and-loss-statement): margin calculation the report showing null% for empty cell
(cherry picked from commit 671555edbc)
2026-06-07 16:56:54 +00:00
Ahmed Reda Abukhatwa
04fe76bf83 fix(profit-and-loss-statement-report): margin calculation the report showing null% for empty cell
(cherry picked from commit df6fd782b7)
2026-06-07 16:56:53 +00:00
rohitwaghchaure
a403e85918 Merge pull request #55664 from frappe/mergify/bp/version-16-hotfix/pr-55661
fix: naming series issue (backport #55661)
2026-06-05 21:06:00 +05:30
rohitwaghchaure
7c46298fb6 chore: fix conflicts
Removed unused import of DateTimeLikeObject from frappe.utils.data.
2026-06-05 20:46:59 +05:30
Rohit Waghchaure
6eecf0701e fix: naming series issue
(cherry picked from commit 3a50056968)

# Conflicts:
#	erpnext/stock/doctype/batch/batch.py
2026-06-05 15:14:22 +00:00
Mihir Kandoi
cfe5d07b4c [codex] Show in-transit status for add-to-transit Stock Entries (backport #55644 to version-16-hotfix) (#55658)
[codex] Show in-transit status for add-to-transit Stock Entries (#55644)

(cherry picked from commit df03524b19)
2026-06-05 11:32:21 +00:00
Khushi Rawat
e7a4d6451e Merge pull request #55653 from frappe/mergify/bp/version-16-hotfix/pr-54853
feat: item prices list view (backport #54853)
2026-06-05 16:26:50 +05:30
Khushi Rawat
12c1940e0b feat: item prices list view (#54853)
* feat: add item prices tab to Item doctype

* feat: item form pricing tab

* fix: remove action button for edit item price

* fix: prevent stale item price rendering after form navigation

* fix: remove stale call to deleted edit_prices_button function

* fix: item price list fixes

* fix: show filtered price list

* fix: show filtered price list

(cherry picked from commit 5873f55cf0)
2026-06-05 10:12:58 +00:00
Mihir Kandoi
32011c3364 fix: work order status should be in process if material transfer is skipped (backport #55641 to version-16-hotfix) (#55642)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 05:37:45 +00:00
mergify[bot]
3f983c9e4d feat: show non stock items and secondary items in work order (backport #55631) (#55636)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-06-05 05:06:50 +00:00
shahzeelahmed
bda915a201 Merge pull request #55619 from frappe/mergify/bp/version-16-hotfix/pr-55536
fix: allow CRM Deal as Quotation To for CRM integration (backport #55536)
2026-06-05 00:01:31 +05:30
Mihir Kandoi
743afc972d feat: create sales invoice from pick list (backport #55594) (#55635) 2026-06-04 17:17:26 +00:00
mergify[bot]
84d205f553 fix: prevent selling items from sample retention warehouse (backport #55613) (#55634)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: prevent selling items from sample retention warehouse (#55613)
2026-06-04 16:50:34 +00:00
mergify[bot]
1823fbea37 refactor: convert rfq_transaction_list to query builder (backport #55497) (#55630)
Co-authored-by: Shllokkk <140623894+Shllokkk@users.noreply.github.com>
2026-06-04 14:26:37 +00:00
shahzeelahmed
f7e6542bcd fix: include CRM Deal in quotation to filters
(cherry picked from commit 519dc0b958)
2026-06-04 06:22:26 +00:00
mergify[bot]
3917415368 fix(UX): Accounts settings cleanup (backport #55470) (#55603)
fix(UX): Accounts settings cleanup (backport #55470)
2026-06-04 11:38:58 +05:30
mergify[bot]
dee7bd8d64 fix(subscription): correct billing/deferred bugs and tighten guards (backport #55554) (#55610)
fix(subscription): correct billing/deferred bugs and tighten guards (#55554)

(cherry picked from commit d54db2e0ca)

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-06-04 05:22:02 +05:30
Khushi Rawat
e112a1933a Merge pull request #55611 from frappe/mergify/bp/version-16-hotfix/pr-55151
fix: minor fixes in report print formats (backport #55151)
2026-06-03 23:24:47 +05:30
Shllokkk
80f7aff3f9 fix: minor fixes in report print formats (#55151)
(cherry picked from commit a75693a81f)
2026-06-03 16:56:11 +00:00
mergify[bot]
808e51db19 fix: duplicating a Customer/Supplier shouldn't inherit the source's primary contact and address (backport #55421) (#55609)
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
Co-authored-by: Antoine Maas <antoine.maas@okte.io>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: duplicating a Customer/Supplier shouldn't inherit the source's primary contact and address (#55421)
2026-06-03 16:03:59 +00:00
mergify[bot]
0274afe560 perf: batch status check for on-hold/closed documents, remove N+1 queries (backport #54798) (#55573)
* perf: batch status check for on-hold/closed documents, remove N+1 queries (#54798)

(cherry picked from commit 5074597d00)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.py

* chore: resolve conflicts

---------

Co-authored-by: Shubh Doshi <124681920+shubhdoshi21@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-06-03 16:00:54 +00:00
mergify[bot]
6a503f834c fix: Add likely missing escapes (backport #55574) (#55581)
Co-authored-by: Ankush Menat <ankush@frappe.io>
fix: Add likely missing escaps (#55574)
2026-06-03 15:53:43 +00:00
mergify[bot]
7de77a8916 fix(stock): add validation for work order seial nos and batch nos (backport #55604) (#55605)
* fix(stock): add validation for work order seial nos and batch nos

(cherry picked from commit 6d3f9d3c6f)

# Conflicts:
#	erpnext/stock/doctype/stock_entry/stock_entry.py

* chore: resolve conflicts

* chore: resolve conflicts

---------

Co-authored-by: pandiyan <pandiyanpalani37@gmail.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-06-03 15:50:50 +00:00
mergify[bot]
142ab3ce2a fix(selling): consider delivered qty (backport #55597) (#55607)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix(selling): consider delivered qty (#55597)
2026-06-03 15:37:29 +00:00
mergify[bot]
9a2549dc32 refactor: minor problems in production plan (backport #55577) (#55595)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-06-03 21:02:31 +05:30
mergify[bot]
40cf77e7f0 fix: spelling of Payment Reconciliation in sidebar (backport #55599) (#55602)
fix: spelling of Payment Reconciliation in sidebar (#55599)

(cherry picked from commit 371b5c7593)

Co-authored-by: Nikhil Kothari <nik.kothari22@live.com>
2026-06-03 19:48:34 +05:30
Nishka Gosalia
6ff9685881 Merge pull request #55598 from frappe/mergify/bp/version-16-hotfix/pr-55309
fix(UX):stock settings form cleanup (backport #55309)
2026-06-03 16:45:52 +05:30
nishkagosalia
f6f542fadc fix(UX): stock settings form cleanup
(cherry picked from commit 0b4e20ae98)
2026-06-03 10:34:43 +00:00
Frappe PR Bot
6bcab7cfc8 chore(release): Bumped to Version 16.21.1
## [16.21.1](https://github.com/frappe/erpnext/compare/v16.21.0...v16.21.1) (2026-06-03)

### Bug Fixes

* item report view ([656d1bd](656d1bd6e3))
2026-06-03 09:43:23 +00:00
Nishka Gosalia
39c8161011 Merge pull request #55593 from frappe/mergify/bp/version-16/pr-55592
fix: item report view (backport #55591) (backport #55592)
2026-06-03 15:11:44 +05:30
nishkagosalia
656d1bd6e3 fix: item report view
(cherry picked from commit bca917380d)
(cherry picked from commit 7dfae51044)
2026-06-03 09:39:24 +00:00
Nishka Gosalia
19c47abb79 Merge pull request #55592 from frappe/mergify/bp/version-16-hotfix/pr-55591
fix: item report view (backport #55591)
2026-06-03 15:08:59 +05:30
nishkagosalia
7dfae51044 fix: item report view
(cherry picked from commit bca917380d)
2026-06-03 09:35:48 +00:00
mergify[bot]
a563d01425 regional(setup): add 0% and 6% VAT rates for Belgium (backport #54719) (#55583)
Co-authored-by: Antoine Maas <antoine.maas@okte.io>
2026-06-03 14:20:44 +05:30
mergify[bot]
5d7e69d8cf fix: add custom dimensions filters in Gross and Net profit report (backport #55110) (#55584)
Co-authored-by: Abdeali Chharchhodawala <99460106+Abdeali099@users.noreply.github.com>
fix: add custom dimensions filters in Gross and Net profit report (#55110)
2026-06-03 14:20:19 +05:30
Khushi Rawat
6c05625e65 Merge pull request #55586 from frappe/mergify/bp/version-16-hotfix/pr-55149
fix(stock): set stock received but not billed account for purchase (backport #55149)
2026-06-03 14:19:07 +05:30
Khushi Rawat
eaadb15bd5 Merge pull request #55588 from frappe/mergify/bp/version-16-hotfix/pr-55150
fix(accounts): include asset items in purchase receipt validation (backport #55150)
2026-06-03 14:18:43 +05:30
mergify[bot]
8f9db3c72d Avoid status updation for purchase invoice from paid to unpaid by issuing a paid debit note against it (backport #54382) (#55576)
Co-authored-by: Shllokkk <140623894+Shllokkk@users.noreply.github.com>
2026-06-03 14:11:25 +05:30
mergify[bot]
37b61f06ae fix: prevent double rounding in inclusive tax calculations (backport #52512) (#55570)
Co-authored-by: Luis Mendoza <mendozal@gmail.com>
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix: prevent double rounding in inclusive tax calculations (#52512)
2026-06-03 14:10:32 +05:30
mergify[bot]
201e62195f fix payment schedule discount date when no discount is applied (backport #55462) (#55568)
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com>
fix payment schedule discount date when no discount is applied (#55462)
2026-06-03 14:10:12 +05:30
mergify[bot]
20af7093ac feat: added cost of goods sold (backport #54974) (#55552)
Co-authored-by: soham7117 <sohampawar626@gmail.com>
Signed-off-by: soham7117 <sohampawar626@gmail.com>
2026-06-03 14:09:37 +05:30
mergify[bot]
44adfbea33 refactor(sales_invoice): replace sql with qb in update_billing_status… (backport #55380) (#55411)
Co-authored-by: Loic Oberle <loic@dokos.io>
2026-06-03 14:09:15 +05:30
mergify[bot]
9eb0e3c82e fix: prevent negative amounts in common party JE on return invoices (backport #55034) (#55064)
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: prevent negative amounts in common party JE on return invoices (#55034)
2026-06-03 14:08:49 +05:30
Pandiyan P
0984c86583 fix(accounts): include asset items in purchase receipt validation (#55150)
(cherry picked from commit d0d9411700)
2026-06-03 07:43:31 +00:00
Pandiyan P
90667b2de2 fix(stock): set stock received but not billed account for purchase (#55149)
(cherry picked from commit c4d28a2612)
2026-06-03 07:41:56 +00:00
ruthra kumar
f6791d5bcf Merge pull request #55572 from frappe/mergify/bp/version-16-hotfix/pr-55478
feat: add New Zealand chart of accounts (backport #55478)
2026-06-03 13:01:30 +05:30
Imesha Sudasingha
93de14c421 fix: simplify New Zealand sales accounts
(cherry picked from commit eebb37f9fd)
2026-06-03 05:48:42 +00:00
Imesha Sudasingha
107a446d98 feat: add New Zealand chart of accounts
(cherry picked from commit f8a123e79d)
2026-06-03 05:48:42 +00:00
Khushi Rawat
af97849c7b Merge pull request #55566 from frappe/mergify/bp/version-16-hotfix/pr-55562
fix: aggregate child cost center data in Budget Variance Report (backport #55562)
2026-06-03 03:37:27 +05:30
khushi8112
a7d42a4edd refactor: replace db.sql with frappe.qb
(cherry picked from commit 41884cfd2a)
2026-06-02 21:49:17 +00:00
khushi8112
4f2611cbe8 fix: aggregate child cost center data in Budget Variance Report
(cherry picked from commit cd7fa56ec4)
2026-06-02 21:49:17 +00:00
Khushi Rawat
91a64692f9 Merge pull request #55565 from frappe/mergify/bp/version-16-hotfix/pr-54840
fix: add company filter to Budget Against dimension options (backport #54840)
2026-06-03 02:50:01 +05:30
khushi8112
3fb6437d26 fix: move Company filter at the start
(cherry picked from commit c34eeee096)
2026-06-02 21:01:53 +00:00
HemilSangani
bfc6f44fb0 fix: add company filter to Budget Against dimension options
(cherry picked from commit bdf0136fc5)
2026-06-02 21:01:53 +00:00
mergify[bot]
fffba84868 fix(item): format integer numeric variant attributes without decimals (backport #55561) (#55564)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix(item): format integer numeric variant attributes without decimals (#55561)
2026-06-02 23:00:04 +02:00
mergify[bot]
6a1c384f9b perf(transaction): exit early before backend query (backport #55556) (#55558)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-06-02 20:51:01 +02:00
Frappe PR Bot
ecb572de92 chore(release): Bumped to Version 16.21.0
# [16.21.0](https://github.com/frappe/erpnext/compare/v16.20.1...v16.21.0) (2026-06-02)

### Bug Fixes

* asset scrap flow related changes ([e3f03a2](e3f03a21c3))
* billing address does not belongs to the company error ([e1f29de](e1f29de078))
* **book_appointment:** when scheduling is disabled, block API endpoints (backport [#55455](https://github.com/frappe/erpnext/issues/55455)) ([#55457](https://github.com/frappe/erpnext/issues/55457)) ([aa5dfde](aa5dfde23b))
* changes as per review ([8b1d981](8b1d9817a6))
* check perm for account (backport [#55479](https://github.com/frappe/erpnext/issues/55479)) ([#55483](https://github.com/frappe/erpnext/issues/55483)) ([0c946f2](0c946f2420))
* **custom_financial_template:** sum account closing balances across dimensions ([3359e20](3359e20d06))
* import DateTimeLikeObject ([d82e03e](d82e03edb6))
* **issue:** check permission before issue status modification (backport [#55458](https://github.com/frappe/erpnext/issues/55458)) ([#55460](https://github.com/frappe/erpnext/issues/55460)) ([7c5d617](7c5d617049))
* item master list view UI cleanup ([2d554c0](2d554c05d6))
* **je:** preserve account on duplicate row when party row exists (backport [#55180](https://github.com/frappe/erpnext/issues/55180)) ([#55512](https://github.com/frappe/erpnext/issues/55512)) ([fe585dc](fe585dc225))
* Make Distributed Discount Amount field read only ([29441b7](29441b7249))
* **manufacturing:** allow to edit batch size while creating a work order (backport [#55058](https://github.com/frappe/erpnext/issues/55058)) ([#55326](https://github.com/frappe/erpnext/issues/55326)) ([ae92a82](ae92a82930))
* material transfer in transit issue ([356bb78](356bb7878f))
* merge conflicts ([b74e365](b74e365421))
* new bom version should not recalculate operations through routing (backport [#55370](https://github.com/frappe/erpnext/issues/55370)) ([#55372](https://github.com/frappe/erpnext/issues/55372)) ([933ac01](933ac0108c))
* over order allowance setting fix ([41b2de3](41b2de35a9))
* pick correct name when creating user from RFQ (backport [#55468](https://github.com/frappe/erpnext/issues/55468)) ([#55472](https://github.com/frappe/erpnext/issues/55472)) ([fc842fb](fc842fb45f))
* **pos:** escape html output in pos page templates (backport [#55527](https://github.com/frappe/erpnext/issues/55527)) ([#55529](https://github.com/frappe/erpnext/issues/55529)) ([224426e](224426e06b))
* **pos:** escape item data on pos item selector (backport [#55503](https://github.com/frappe/erpnext/issues/55503)) ([#55508](https://github.com/frappe/erpnext/issues/55508)) ([5393c93](5393c93675))
* **pos:** preserve contacts and enforce permissions in set_customer_info (backport [#55463](https://github.com/frappe/erpnext/issues/55463)) ([#55466](https://github.com/frappe/erpnext/issues/55466)) ([ef2700b](ef2700bec6))
* **ppr:** make default_advance_account optional ([7a7cc31](7a7cc31523))
* **quotation:** made customer contact column visible (backport [#55433](https://github.com/frappe/erpnext/issues/55433)) ([#55435](https://github.com/frappe/erpnext/issues/55435)) ([2feb8eb](2feb8eb370))
* **regional:** Japanese CT Rate (backport [#54998](https://github.com/frappe/erpnext/issues/54998)) ([#55438](https://github.com/frappe/erpnext/issues/55438)) ([7426aaf](7426aaf1e2))
* resolve conflict ([abe19e1](abe19e1212))
* **selling:** handle None values while grouping opportunities by utm … (backport [#55300](https://github.com/frappe/erpnext/issues/55300)) ([#55328](https://github.com/frappe/erpnext/issues/55328)) ([198970c](198970cdee))
* set a fallback value if no fiscal year set ([1521410](1521410125))
* stock reco for legacy serial nos ([67c922c](67c922cdf3))
* **stock:** add warning message to notify the user to configure the inspection ([1679680](1679680d8e))
* **stock:** allow to create quality inspection after purchase/delivery ([51a140a](51a140a2bd))
* **stock:** change qb to qb get_query to fix filter issues (backport [#55443](https://github.com/frappe/erpnext/issues/55443)) ([#55445](https://github.com/frappe/erpnext/issues/55445)) ([277a072](277a0723ef))
* **stock:** get_actual_qty during cancellations (backport [#55388](https://github.com/frappe/erpnext/issues/55388)) ([#55392](https://github.com/frappe/erpnext/issues/55392)) ([faa1573](faa15731cb))
* **tds:** treat NULL and empty-string tax_withholding_group as equivalent ([82e12d2](82e12d2d52))
* unable to submit subcontracted job card (backport [#55537](https://github.com/frappe/erpnext/issues/55537)) ([#55540](https://github.com/frappe/erpnext/issues/55540)) ([ceb1042](ceb10422ae))
* update default_advance_account type ([0bbc493](0bbc493213))
* use fiscal year instead of calendar year in accounting dashboard number cards ([81d10d3](81d10d32f2))
* use get_query instead of get_all for data fetching ([7cbef15](7cbef15596))
* **UX:** Move title field to More Info ([20592fc](20592fc25d))

### Features

* build and upload assets to GitHub Releases ([4c05ebc](4c05ebc21e))
* over order allowance setting ([08eaaa5](08eaaa5b83))
* **payment-entry:** warn user before cancelling reconciled payment entry ([61d6d2f](61d6d2f344))
2026-06-02 16:55:08 +00:00
Mihir Kandoi
23181b3962 Merge pull request #55547 from frappe/version-16-hotfix 2026-06-02 22:23:38 +05:30
Khushi Rawat
d57e86362a Merge pull request #55549 from frappe/mergify/bp/version-16-hotfix/pr-55484
fix: use fiscal year instead of calendar year in accounting dashboard number cards (backport #55484)
2026-06-02 17:55:57 +05:30
khushi8112
1521410125 fix: set a fallback value if no fiscal year set
(cherry picked from commit c68918bc18)
2026-06-02 11:26:28 +00:00
khushi8112
81d10d32f2 fix: use fiscal year instead of calendar year in accounting dashboard number cards
(cherry picked from commit e8fff2fdad)
2026-06-02 11:26:28 +00:00
ruthra kumar
2213c1ffad Merge pull request #55545 from frappe/mergify/bp/version-16-hotfix/pr-54979
fix(ppr): make default_advance_account optional (backport #54979)
2026-06-02 16:48:36 +05:30
Diptanil Saha
37814bf6cd ci: fix for pull request finding 'CodeQL / Workflow does not contain permissions'
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-06-02 16:36:50 +05:30
mergify[bot]
ceb10422ae fix: unable to submit subcontracted job card (backport #55537) (#55540)
* fix: unable to submit subcontracted job card (#55537)

(cherry picked from commit 0a49403838)

# Conflicts:
#	erpnext/controllers/subcontracting_controller.py

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-06-02 10:47:30 +00:00
Khushi Rawat
072a853fad Merge pull request #55543 from frappe/mergify/bp/version-16-hotfix/pr-55539
feat(payment-entry): warn user before cancelling reconciled payment entry (backport #55539)
2026-06-02 15:54:59 +05:30
Dany Robert
0bbc493213 fix: update default_advance_account type
(cherry picked from commit 30b9e11303)
2026-06-02 10:07:02 +00:00
Dany Robert
7a7cc31523 fix(ppr): make default_advance_account optional
(cherry picked from commit 4b1d369ac6)
2026-06-02 10:07:02 +00:00
khushi8112
61d6d2f344 feat(payment-entry): warn user before cancelling reconciled payment entry
(cherry picked from commit f0ba54d957)
2026-06-02 10:00:28 +00:00
rohitwaghchaure
b89a34970b Merge pull request #55519 from frappe/mergify/bp/version-16-hotfix/pr-55415
fix(stock): allow to create quality inspection after purchase/delivery (backport #55415)
2026-06-02 11:51:45 +05:30
Rushabh Mehta
0fe44e1a67 Merge pull request #55534 from rmehta/feat/build-and-upload-assets-v16
feat: build and upload assets to GitHub Releases
2026-06-02 07:38:15 +05:30
Rushabh Mehta
4c05ebc21e feat: build and upload assets to GitHub Releases 2026-06-02 06:45:25 +05:30
mergify[bot]
224426e06b fix(pos): escape html output in pos page templates (backport #55527) (#55529)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(pos): escape html output in pos page templates (#55527)
2026-06-02 00:46:54 +05:30
rohitwaghchaure
980cefa169 chore: fixed conflicts 2026-06-01 22:10:06 +05:30
rohitwaghchaure
8d12a89558 chore: fixed conflicts 2026-06-01 22:07:42 +05:30
mergify[bot]
d1b2425b2b chore(serial_and_batch_bundle): remove update_serial_or_batch method (backport #55481) (#55516)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-06-01 16:15:54 +00:00
Sudharsanan11
1679680d8e fix(stock): add warning message to notify the user to configure the inspection
(cherry picked from commit e003fe4de0)
2026-06-01 16:14:11 +00:00
Sudharsanan11
51a140a2bd fix(stock): allow to create quality inspection after purchase/delivery
(cherry picked from commit c6a88ab1d2)

# Conflicts:
#	erpnext/controllers/stock_controller.py
2026-06-01 16:14:11 +00:00
rohitwaghchaure
13e1159c41 Merge pull request #55412 from frappe/mergify/bp/version-16-hotfix/pr-55377
refactor(sales_invoice): replace sql with qb in get_all_mode_of_payments (backport #55377)
2026-06-01 21:41:40 +05:30
MochaMind
056f622634 chore: sync translations to version-16-hotfix (#55426) 2026-06-01 21:38:27 +05:30
mergify[bot]
fe585dc225 fix(je): preserve account on duplicate row when party row exists (backport #55180) (#55512)
fix(je): preserve account on duplicate row when party row exists (#55180)

(cherry picked from commit 57dbac712f)

Co-authored-by: Gajendra Nishad <75714258+gajjug004@users.noreply.github.com>
2026-06-01 18:46:07 +05:30
mergify[bot]
5393c93675 fix(pos): escape item data on pos item selector (backport #55503) (#55508)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix(pos): escape item data on pos item selector (#55503)
2026-06-01 18:27:30 +05:30
ruthra kumar
4af265c48f Merge pull request #55502 from frappe/mergify/bp/version-16/pr-55495
fix: opening bal double counting in Process Period Closing Voucher (backport #55495)
2026-06-01 16:00:41 +05:30
ruthra kumar
fdf5439ece Merge pull request #55499 from frappe/mergify/bp/version-16-hotfix/pr-55495
fix: opening bal double counting in Process Period Closing Voucher (backport #55495)
2026-06-01 15:51:29 +05:30
ruthra kumar
ce97a74c5f test: prevent double counting of opening balances
(cherry picked from commit 7f2af123ee)
2026-06-01 09:36:47 +00:00
ruthra kumar
e955b4a3b9 refactor: color coded status in list view
(cherry picked from commit cfeffbb354)
2026-06-01 09:36:46 +00:00
ruthra kumar
de42a9e86e refactor: tabbed view for process period closing voucher
(cherry picked from commit 1960c81619)
2026-06-01 09:36:46 +00:00
ruthra kumar
5206b279b6 refactor: only consider non-opening balance for Balance sheet accounts
(cherry picked from commit a2b8334046)
2026-06-01 09:36:46 +00:00
ruthra kumar
de1256467f test: prevent double counting of opening balances
(cherry picked from commit 7f2af123ee)
2026-06-01 09:33:09 +00:00
ruthra kumar
1029ef46a7 refactor: color coded status in list view
(cherry picked from commit cfeffbb354)
2026-06-01 09:33:08 +00:00
ruthra kumar
c59dc684fe refactor: tabbed view for process period closing voucher
(cherry picked from commit 1960c81619)
2026-06-01 09:33:08 +00:00
ruthra kumar
d2bbf6d32b refactor: only consider non-opening balance for Balance sheet accounts
(cherry picked from commit a2b8334046)
2026-06-01 09:33:08 +00:00
mergify[bot]
0c946f2420 fix: check perm for account (backport #55479) (#55483)
fix: check perm for account (#55479)

(cherry picked from commit dd1d2925d5)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2026-06-01 14:29:16 +05:30
Frappe PR Bot
9af618d6bf chore(release): Bumped to Version 16.20.1
## [16.20.1](https://github.com/frappe/erpnext/compare/v16.20.0...v16.20.1) (2026-06-01)

### Bug Fixes

* billing address does not belongs to the company error ([d6b7791](d6b7791f18))
2026-06-01 06:08:21 +00:00
rohitwaghchaure
3c3cde4362 Merge pull request #55475 from frappe/mergify/bp/version-16/pr-55425
fix: billing address does not belongs to the company error (backport #55417) (backport #55425)
2026-06-01 11:36:44 +05:30
Rohit Waghchaure
d6b7791f18 fix: billing address does not belongs to the company error
(cherry picked from commit 9df07b367a)
(cherry picked from commit e1f29de078)
2026-06-01 06:02:05 +00:00
mergify[bot]
fc842fb45f fix: pick correct name when creating user from RFQ (backport #55468) (#55472)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: pick correct name when creating user from RFQ (#55468)
2026-06-01 05:58:12 +00:00
mergify[bot]
ef2700bec6 fix(pos): preserve contacts and enforce permissions in set_customer_info (backport #55463) (#55466)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix(pos): preserve contacts and enforce permissions in set_customer_info (#55463)
2026-06-01 05:12:48 +05:30
mergify[bot]
7c5d617049 fix(issue): check permission before issue status modification (backport #55458) (#55460)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix(issue): check permission before issue status modification (#55458)
2026-06-01 00:57:21 +05:30
mergify[bot]
2f51c48fd8 refactor: task_info portal pages (backport #55448) (#55454)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-05-31 22:06:47 +05:30
mergify[bot]
aa5dfde23b fix(book_appointment): when scheduling is disabled, block API endpoints (backport #55455) (#55457)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix(book_appointment): when scheduling is disabled, block API endpoints (#55455)
2026-05-31 16:10:20 +00:00
MochaMind
ad267ec295 chore: update POT file (#55451) 2026-05-31 15:05:47 +02:00
mergify[bot]
5c51145984 refactor(pos_profile): migrating raw sql to qb in set_defaults (backport #55447) (#55450)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-05-31 09:45:28 +00:00
mergify[bot]
277a0723ef fix(stock): change qb to qb get_query to fix filter issues (backport #55443) (#55445)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): change qb to qb get_query to fix filter issues (#55443)
2026-05-31 07:09:40 +00:00
mergify[bot]
36a54ca40b chore: mark as out of beta (backport #55439) (#55441)
* chore: mark as out of beta (#55439)

(cherry picked from commit aed957e7d1)

* chore: remove newer property allow_bulk_edit

not supported on v16

* chore(Bank Statement Import): mark as out of beta

---------

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-05-30 19:28:31 +00:00
mergify[bot]
7426aaf1e2 fix(regional): Japanese CT Rate (backport #54998) (#55438)
Co-authored-by: mh35 <mh35jp@gmail.com>
fix(regional): Japanese CT Rate (#54998)
2026-05-30 22:00:04 +05:30
mergify[bot]
2feb8eb370 fix(quotation): made customer contact column visible (backport #55433) (#55435)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix(quotation): made customer contact column visible (#55433)
2026-05-30 19:33:01 +05:30
rohitwaghchaure
22c26f42e9 Merge pull request #55425 from frappe/mergify/bp/version-16-hotfix/pr-55417
fix: billing address does not belongs to the company error (backport #55417)
2026-05-30 12:43:06 +05:30
MochaMind
75465035ae chore: sync translations to version-16-hotfix (#55420) 2026-05-29 23:04:48 +05:30
Rohit Waghchaure
e1f29de078 fix: billing address does not belongs to the company error
(cherry picked from commit 9df07b367a)
2026-05-29 17:24:13 +00:00
mergify[bot]
26d94c5594 ci: configure upstream fetch refspec so git fetch creates tracking refs (backport #55422) (#55423)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 17:01:32 +00:00
mergify[bot]
542aff2677 ci: split sync into orchestrator + per-branch runners, generalise for any app (backport #55414) (#55418)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 20:37:33 +05:30
Loic Oberle
db4e459a5a refactor(sales_invoice): replace sql with qb in get_all_mode_of_payments (#55377)
(cherry picked from commit 618045ec98)
2026-05-29 12:05:16 +00:00
Khushi Rawat
e42c3961a9 Merge pull request #55409 from frappe/mergify/bp/version-16-hotfix/pr-55397
fix: item master list view UI cleanup (backport #55397)
2026-05-29 16:30:05 +05:30
Khushi Rawat
63aff0098c Merge pull request #55254 from frappe/mergify/bp/version-16-hotfix/pr-55126
fix: asset scrap flow related changes (backport #55126)
2026-05-29 15:48:03 +05:30
Khushi Rawat
6d747420a3 Merge pull request #55359 from frappe/mergify/bp/version-16-hotfix/pr-55137
fix: use get_query instead of get_all for data fetching (backport #55137)
2026-05-29 15:36:28 +05:30
Khushi Rawat
d82e03edb6 fix: import DateTimeLikeObject 2026-05-29 15:21:58 +05:30
khushi8112
2d554c05d6 fix: item master list view UI cleanup
(cherry picked from commit 69ee7e93d8)
2026-05-29 09:50:18 +00:00
mergify[bot]
876995a35f ci: fix branch base and per-language commits in sync-hotfix-translations (backport #55405) (#55407)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
fix branch base and per-language commits in sync-hotfix-translations (#55405)
2026-05-29 15:10:40 +05:30
Khushi Rawat
abe19e1212 fix: resolve conflict 2026-05-29 15:05:41 +05:30
Nishka Gosalia
bfc8683e52 Merge pull request #55403 from frappe/mergify/bp/version-16-hotfix/pr-55400
fix: Make Distributed Discount Amount field read only (backport #55400)
2026-05-29 14:09:18 +05:30
Nishka Gosalia
84ce7c720e Merge pull request #55402 from frappe/mergify/bp/version-16-hotfix/pr-55399
fix: over order allowance setting fix (backport #55399)
2026-05-29 13:00:37 +05:30
nishkagosalia
29441b7249 fix: Make Distributed Discount Amount field read only
(cherry picked from commit 512c95529e)
2026-05-29 07:30:01 +00:00
nishkagosalia
41b2de35a9 fix: over order allowance setting fix
(cherry picked from commit 30011963bc)
2026-05-29 07:07:59 +00:00
mergify[bot]
faa15731cb fix(stock): get_actual_qty during cancellations (backport #55388) (#55392)
Co-authored-by: archielister <archie.lister@lush.co.uk>
fix(stock): get_actual_qty during cancellations (#55388)
2026-05-28 22:40:24 +05:30
Nishka Gosalia
0ce697b170 Merge pull request #55373 from frappe/mergify/bp/version-16-hotfix/pr-55367
fix(UX): Move title field to More Info (backport #55367)
2026-05-28 16:24:35 +05:30
mergify[bot]
933ac0108c fix: new bom version should not recalculate operations through routing (backport #55370) (#55372)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: new bom version should not recalculate operations through routing (#55370)
2026-05-28 16:01:52 +05:30
nishkagosalia
b74e365421 fix: merge conflicts 2026-05-28 15:35:10 +05:30
nishkagosalia
20592fc25d fix(UX): Move title field to More Info
(cherry picked from commit 34c24b86fa)

# Conflicts:
#	erpnext/accounts/doctype/pos_invoice/pos_invoice.json
#	erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.json
#	erpnext/buying/doctype/purchase_order/purchase_order.json
#	erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
#	erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
#	erpnext/selling/doctype/quotation/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
2026-05-28 09:39:37 +00:00
Nishka Gosalia
4ac003a804 Merge pull request #55369 from frappe/mergify/bp/version-16-hotfix/pr-55340
feat: over order allowance setting (backport #55340)
2026-05-28 14:38:34 +05:30
nishkagosalia
08eaaa5b83 feat: over order allowance setting
(cherry picked from commit 355d71dbd2)
2026-05-28 08:49:11 +00:00
khushi8112
7cbef15596 fix: use get_query instead of get_all for data fetching
(cherry picked from commit 1fd99337b3)
2026-05-27 19:17:29 +00:00
mergify[bot]
3a7af0e59d ci: add node setup on sync translations to version 16 hotfix (backport #55355) (#55356)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix (#55355)
2026-05-27 18:23:23 +00:00
mergify[bot]
65b6da552e ci: sync translations from develop to version-16-hotfix (backport #55348) (#55353)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
fix (#55348)
2026-05-27 16:30:59 +00:00
MochaMind
91dcb96307 chore: update POT file (#55351) 2026-05-27 21:12:08 +05:30
Lakshit Jain
aa6c45bae1 Merge pull request #55343 from frappe/mergify/bp/version-16-hotfix/pr-55330
fix(tds): treat NULL and empty-string tax_withholding_group as equivalent (backport #55330)
2026-05-27 17:22:29 +05:30
Lakshit Jain
8c4d5d343b Merge pull request #55342 from frappe/mergify/bp/version-16-hotfix/pr-55333
fix(custom_financial_template): sum account closing balances across dimensions (backport #55333)
2026-05-27 17:21:24 +05:30
ljain112
8b1d9817a6 fix: changes as per review
(cherry picked from commit 251e7b623c)
2026-05-27 11:24:51 +00:00
ljain112
82e12d2d52 fix(tds): treat NULL and empty-string tax_withholding_group as equivalent
(cherry picked from commit a85f8a64b1)
2026-05-27 11:24:51 +00:00
ljain112
3359e20d06 fix(custom_financial_template): sum account closing balances across dimensions
(cherry picked from commit 4a49a205b3)
2026-05-27 11:24:13 +00:00
mergify[bot]
198970cdee fix(selling): handle None values while grouping opportunities by utm … (backport #55300) (#55328)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix(selling): handle None values while grouping opportunities by utm … (#55300)
2026-05-27 07:17:24 +00:00
rohitwaghchaure
9919b3d75c Merge pull request #55299 from frappe/mergify/bp/version-16-hotfix/pr-55242
fix: stock reco for legacy serial nos (backport #55242)
2026-05-27 12:16:07 +05:30
mergify[bot]
ae92a82930 fix(manufacturing): allow to edit batch size while creating a work order (backport #55058) (#55326)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(manufacturing): allow to edit batch size while creating a work order (#55058)
2026-05-27 06:22:59 +00:00
mergify[bot]
8b4ad229e7 Merge branch 'version-16-hotfix' into mergify/bp/version-16-hotfix/pr-55242 2026-05-27 06:18:17 +00:00
rohitwaghchaure
64ee4b8d99 Merge pull request #55320 from rohitwaghchaure/fixed-support-69397
fix: material transfer in transit issue
2026-05-27 11:23:21 +05:30
Rohit Waghchaure
356bb7878f fix: material transfer in transit issue 2026-05-27 10:29:46 +05:30
Frappe PR Bot
ff46d20b25 chore(release): Bumped to Version 16.20.0
# [16.20.0](https://github.com/frappe/erpnext/compare/v16.19.1...v16.20.0) (2026-05-27)

### Bug Fixes

* consider batchwise valuation in stock ageing report (backport [#54919](https://github.com/frappe/erpnext/issues/54919)) ([#55230](https://github.com/frappe/erpnext/issues/55230)) ([a1457c7](a1457c759d))
* consumed operation cost calculation (backport [#54858](https://github.com/frappe/erpnext/issues/54858)) ([#55133](https://github.com/frappe/erpnext/issues/55133)) ([dfc9144](dfc91441b4))
* correct description for Is Rate Adjustment Entry (Debit Note) checkbox ([a39733d](a39733ddd0))
* correct remarks for foreign currency payment entries ([f3f8f32](f3f8f327df))
* corrected the pricing rule taking the wrong value (backport [#54894](https://github.com/frappe/erpnext/issues/54894)) ([#55124](https://github.com/frappe/erpnext/issues/55124)) ([1a75c14](1a75c14308))
* default use_for_shopping_cart to 0 in set_taxes ([54be4ee](54be4ee275))
* don't reset net_purchase_amount for Composite Asset if already set ([99642b9](99642b9636))
* edit stock uom qty for purchase documents (backport [#55135](https://github.com/frappe/erpnext/issues/55135)) ([#55179](https://github.com/frappe/erpnext/issues/55179)) ([123b4ad](123b4ad563))
* **employee:** js error if user does not have write permission for date field (backport [#55312](https://github.com/frappe/erpnext/issues/55312)) ([#55314](https://github.com/frappe/erpnext/issues/55314)) ([4dff5a7](4dff5a7820))
* faster range calculation on process period closing voucher ([e56ee38](e56ee383bc))
* fg valuation rate in repack entry when multiple FGs ([7b6adce](7b6adce89a))
* inclusive tax amount not considered while setting LCV from purchase invoice ([bd4c244](bd4c24493c))
* incorrect error message string in sales order (backport [#55090](https://github.com/frappe/erpnext/issues/55090)) ([#55095](https://github.com/frappe/erpnext/issues/55095)) ([17bc2b6](17bc2b691f))
* invalid filter on item_group (backport [#55186](https://github.com/frappe/erpnext/issues/55186)) ([#55188](https://github.com/frappe/erpnext/issues/55188)) ([ea86347](ea863477a4))
* item price with party condition (backport [#55100](https://github.com/frappe/erpnext/issues/55100)) ([#55107](https://github.com/frappe/erpnext/issues/55107)) ([cc438a4](cc438a4600))
* job card buttons color (backport [#55252](https://github.com/frappe/erpnext/issues/55252)) ([#55261](https://github.com/frappe/erpnext/issues/55261)) ([69c6ed3](69c6ed3cd9))
* **manufacturing:** fetch from_bom name in production plan (backport [#55085](https://github.com/frappe/erpnext/issues/55085)) ([#55092](https://github.com/frappe/erpnext/issues/55092)) ([36aca51](36aca51fbb))
* **manufacturing:** remove forecast_qty and adjust_qty fields from sa… (backport [#55129](https://github.com/frappe/erpnext/issues/55129)) ([#55136](https://github.com/frappe/erpnext/issues/55136)) ([bde7f16](bde7f1660e))
* **payment_entry:** sync paid/received amounts for cross-currency entries (backport [#55270](https://github.com/frappe/erpnext/issues/55270)) ([#55272](https://github.com/frappe/erpnext/issues/55272)) ([705814f](705814f066))
* pos profile form cleanup (backport [#52436](https://github.com/frappe/erpnext/issues/52436)) ([#55285](https://github.com/frappe/erpnext/issues/55285)) ([1f14ef2](1f14ef2344))
* prevent AttributeError in batch query filters (backport [#55257](https://github.com/frappe/erpnext/issues/55257)) ([#55279](https://github.com/frappe/erpnext/issues/55279)) ([bfd37dc](bfd37dcc21))
* **project:** update customer and sales order as no copy ([1e61ca1](1e61ca162f))
* removed redundant code ([a7eb3ac](a7eb3acd1a))
* **sales_invoice:** skip stock update for POS invoices linked to Delivery Note (backport [#55311](https://github.com/frappe/erpnext/issues/55311)) ([#55313](https://github.com/frappe/erpnext/issues/55313)) ([cd7e1bb](cd7e1bbff1))
* set bin details when adding item using update items (backport [#55096](https://github.com/frappe/erpnext/issues/55096)) ([#55098](https://github.com/frappe/erpnext/issues/55098)) ([bb87ffc](bb87ffc90a))
* single variant creation error ([82b0372](82b0372d5b))
* slow query ([66c9170](66c9170465))
* **stock:** apply posting datetime filters while fetching available batches (backport [#54976](https://github.com/frappe/erpnext/issues/54976)) ([#55185](https://github.com/frappe/erpnext/issues/55185)) ([edf6bea](edf6bea2ee))
* **stock:** remove precision for valuation rate while creating sle (backport [#55249](https://github.com/frappe/erpnext/issues/55249)) ([#55260](https://github.com/frappe/erpnext/issues/55260)) ([9600ecd](9600ecd61c))
* **stock:** remove recalculate current qty function (backport [#54774](https://github.com/frappe/erpnext/issues/54774)) ([#55075](https://github.com/frappe/erpnext/issues/55075)) ([56a9b37](56a9b37fac))
* use passed posting date in make_reverse_gl_entries ([3ce9cf2](3ce9cf2bd8))
* valuation rate missing for standalone credit notes for moving av… (backport [#55102](https://github.com/frappe/erpnext/issues/55102)) ([#55104](https://github.com/frappe/erpnext/issues/55104)) ([b11365b](b11365b8c2))

### Features

* add get_parent_supplier_groups using query builder ([82793cb](82793cbd4d))
* add party groups functionality to party specific item (backport [#54988](https://github.com/frappe/erpnext/issues/54988)) ([#55245](https://github.com/frappe/erpnext/issues/55245)) ([a618f4c](a618f4cca4))
* allow creation of any number of variants in multiple item variant creation dialog ([27db98d](27db98d222))
* pending qty in job card ([b372e6f](b372e6f118))

### Performance Improvements

* skip delink_original_entry during cancellation when Immutable Ledger is enabled ([#55130](https://github.com/frappe/erpnext/issues/55130)) ([8a4cb28](8a4cb28d90))
* skip delink_original_entry during cancellation when Immutable Ledger is enabled (backport [#55130](https://github.com/frappe/erpnext/issues/55130)) ([#55166](https://github.com/frappe/erpnext/issues/55166)) ([92689e0](92689e05da))
2026-05-27 01:22:47 +00:00
mergify[bot]
d215fa7623 chore: remove frappe-semgrep-rules submodule (backport #55083) (#55319)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-05-27 01:21:08 +00:00
mergify[bot]
8925a6527b chore: remove frappe-semgrep-rules submodule (backport #55083) (#55318)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-05-27 01:00:48 +00:00
Diptanil Saha
bf8f7ba883 Merge pull request #55307 from frappe/version-16-hotfix
chore: release v16
2026-05-27 05:33:15 +05:30
mergify[bot]
cd7e1bbff1 fix(sales_invoice): skip stock update for POS invoices linked to Delivery Note (backport #55311) (#55313)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
fix(sales_invoice): skip stock update for POS invoices linked to Delivery Note (#55311)
2026-05-26 20:32:53 +00:00
mergify[bot]
4dff5a7820 fix(employee): js error if user does not have write permission for date field (backport #55312) (#55314)
Co-authored-by: Himanshu Jain <118419692+trufurs@users.noreply.github.com>
fix(employee): js error if user does not have write permission for date field (#55312)
2026-05-27 01:58:49 +05:30
rohitwaghchaure
1781893c3c Merge pull request #55297 from frappe/mergify/bp/version-16-hotfix/pr-55290
fix: inclusive tax amount not considered while setting LCV from purchase invoice (backport #55290)
2026-05-26 16:13:51 +05:30
Nihantra C. Patel
304de47b48 Merge pull request #55295 from frappe/mergify/bp/version-16-hotfix/pr-55268
fix: use passed posting date for period closing validation in reverse GL entries (backport #55268)
2026-05-26 16:06:56 +05:30
Rohit Waghchaure
67c922cdf3 fix: stock reco for legacy serial nos
(cherry picked from commit 9d5fd11bcd)
2026-05-26 10:29:25 +00:00
Rohit Waghchaure
bd4c24493c fix: inclusive tax amount not considered while setting LCV from purchase invoice
(cherry picked from commit 048ddfc265)
2026-05-26 10:15:26 +00:00
Nihantra Patel
6925b6b645 test: update testcase
(cherry picked from commit 9c39b01f1c)
2026-05-26 10:14:00 +00:00
Nihantra Patel
3ce9cf2bd8 fix: use passed posting date in make_reverse_gl_entries
(cherry picked from commit f040bdf165)
2026-05-26 10:14:00 +00:00
Mihir Kandoi
0ede7759df Merge pull request #55289 from frappe/mergify/bp/version-16-hotfix/pr-55286
fix: single variant creation error (backport #55286)
2026-05-26 13:57:01 +05:30
diptanilsaha
1f14ef2344 fix: pos profile form cleanup (backport #52436) (#55285)
fix: pos profile form cleanup (#52436)
2026-05-26 13:49:39 +05:30
Mihir Kandoi
27db98d222 feat: allow creation of any number of variants in multiple item variant creation dialog
(cherry picked from commit 090c25d848)
2026-05-26 08:05:44 +00:00
Mihir Kandoi
82b0372d5b fix: single variant creation error
(cherry picked from commit bda75135c3)
2026-05-26 08:05:43 +00:00
mergify[bot]
69c6ed3cd9 fix: job card buttons color (backport #55252) (#55261)
Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2026-05-26 13:16:41 +05:30
mergify[bot]
ca6bcb57d3 refactor: remove unused customer field in Item DocType (backport #55277) (#55283)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-26 05:47:16 +00:00
ruthra kumar
03d96c7b85 Merge pull request #55281 from frappe/mergify/bp/version-16-hotfix/pr-55256
refactor: handle processes stuck in running state in process pcv (backport #55256)
2026-05-26 10:56:24 +05:30
mergify[bot]
bfd37dcc21 fix: prevent AttributeError in batch query filters (backport #55257) (#55279)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix: prevent AttributeError in batch query filters (#55257)
2026-05-26 05:20:04 +00:00
mergify[bot]
9600ecd61c fix(stock): remove precision for valuation rate while creating sle (backport #55249) (#55260)
Co-authored-by: Sudharsanan11 <sudharsananashok1975@gmail.com>
2026-05-26 10:29:39 +05:30
ruthra kumar
5dc37b1130 refactor: atomic summarization step for process pcv
(cherry picked from commit 6cb7971342)
2026-05-26 04:58:22 +00:00
ruthra kumar
a19611a2e9 refactor: handle processes stuck in running state in process pcv
(cherry picked from commit f414778486)
2026-05-26 04:58:22 +00:00
ruthra kumar
6755101654 refactor: summarize in background
(cherry picked from commit 1c3a9f7dd9)
2026-05-26 04:58:21 +00:00
mergify[bot]
705814f066 fix(payment_entry): sync paid/received amounts for cross-currency entries (backport #55270) (#55272)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(payment_entry): sync paid/received amounts for cross-currency entries (#55270)
2026-05-25 23:22:02 +05:30
mergify[bot]
1a75c14308 fix: corrected the pricing rule taking the wrong value (backport #54894) (#55124)
fix: corrected the pricing rule taking the wrong value (#54894)

(cherry picked from commit 06477119d1)

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-05-25 16:02:26 +05:30
khushi8112
e3f03a21c3 fix: asset scrap flow related changes
(cherry picked from commit 21bb8fe979)

# Conflicts:
#	erpnext/assets/doctype/asset/depreciation.py
2026-05-25 10:16:25 +00:00
rohitwaghchaure
56d99152f9 Merge pull request #55244 from frappe/mergify/bp/version-16-hotfix/pr-55216
fix: fg valuation rate in repack entry when multiple FGs (backport #55216)
2026-05-25 15:34:16 +05:30
mergify[bot]
a618f4cca4 feat: add party groups functionality to party specific item (backport #54988) (#55245)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-25 12:38:44 +05:30
Rohit Waghchaure
7b6adce89a fix: fg valuation rate in repack entry when multiple FGs
(cherry picked from commit a47e4c04f7)
2026-05-25 06:15:29 +00:00
mergify[bot]
7752f703d2 refactor: stock ageing report (backport #55231) (#55237)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-24 18:30:45 +05:30
MochaMind
7159b13ee2 chore: update POT file (#55234) 2026-05-24 14:48:11 +02:00
mergify[bot]
ea60efd91a refactor: use frappe.db.bulk_update instead of Case queries in subcon… (backport #55232) (#55233)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-24 09:56:53 +00:00
mergify[bot]
a1457c759d fix: consider batchwise valuation in stock ageing report (backport #54919) (#55230)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: consider batchwise valuation in stock ageing report (#54919)
2026-05-24 07:18:07 +00:00
rohitwaghchaure
ab9e30b487 Merge pull request #55183 from frappe/mergify/bp/version-16-hotfix/pr-55091
feat: pending qty in job card (backport #55091)
2026-05-24 09:30:01 +05:30
Nishka Gosalia
9596e6e1e9 Merge pull request #55196 from frappe/mergify/bp/version-16-hotfix/pr-55189
fix(project): update customer and sales order as no copy (backport #55189)
2026-05-23 15:32:06 +05:30
nareshkannasln
1e61ca162f fix(project): update customer and sales order as no copy
(cherry picked from commit 9d8f3863f2)
2026-05-22 12:21:34 +00:00
mergify[bot]
edf6bea2ee fix(stock): apply posting datetime filters while fetching available batches (backport #54976) (#55185)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): apply posting datetime filters while fetching available batches (#54976)
2026-05-22 11:23:24 +00:00
mergify[bot]
ea863477a4 fix: invalid filter on item_group (backport #55186) (#55188)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: invalid filter on item_group (#55186)
2026-05-22 16:49:23 +05:30
rohitwaghchaure
171cd41928 chore: fix conflicts 2026-05-22 15:25:34 +05:30
Rohit Waghchaure
d2a793b03b refactor: better timer and complete button
(cherry picked from commit 1be92f6d05)

# Conflicts:
#	erpnext/manufacturing/doctype/job_card/job_card.js
2026-05-22 09:52:50 +00:00
Rohit Waghchaure
3081368aad refactor: job_card.js code for better readability
(cherry picked from commit 0a215b0717)

# Conflicts:
#	erpnext/manufacturing/doctype/job_card/job_card.js
2026-05-22 09:52:49 +00:00
Rohit Waghchaure
b372e6f118 feat: pending qty in job card
(cherry picked from commit db64f451c1)
2026-05-22 09:52:49 +00:00
rohitwaghchaure
e2558b6e51 Merge pull request #55182 from frappe/mergify/bp/version-16-hotfix/pr-55159
fix: slow query (backport #55159)
2026-05-22 15:22:18 +05:30
Rohit Waghchaure
66c9170465 fix: slow query
(cherry picked from commit d44f574581)
2026-05-22 09:18:04 +00:00
mergify[bot]
123b4ad563 fix: edit stock uom qty for purchase documents (backport #55135) (#55179)
Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
fix: edit stock uom qty for purchase documents (#55135)
2026-05-22 09:14:32 +00:00
ruthra kumar
92689e05da perf: skip delink_original_entry during cancellation when Immutable Ledger is enabled (backport #55130) (#55166)
perf: skip delink_original_entry during cancellation when Immutable Ledger is enabled (#55130)

* perf: get payment ledger and remove update from delink when immutable ledger is enabled

* revert: changes of get_payment_ledger_entries

* perf: skip delink_original_entry during cancellation when Immutable Ledger is enabled

* test: for immutable ledger

* test: add posting_date in create_sales_invoice

* fix: link validation err with immutable ledger on

* test: update testcase of the immutable ledger

* refactor(test): simpler test for immutable invariants

---------

Co-authored-by: ruthra kumar <ruthra@erpnext.com>
(cherry picked from commit 9eeccecd30)

# Conflicts:
#	erpnext/accounts/general_ledger.py

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2026-05-22 14:25:32 +05:30
mergify[bot]
bde7f1660e fix(manufacturing): remove forecast_qty and adjust_qty fields from sa… (backport #55129) (#55136)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix(manufacturing): remove forecast_qty and adjust_qty fields from sa… (#55129)
2026-05-22 14:23:51 +05:30
Nihantra C. Patel
8a4cb28d90 perf: skip delink_original_entry during cancellation when Immutable Ledger is enabled (#55130)
* perf: get payment ledger and remove update from delink when immutable ledger is enabled

* revert: changes of get_payment_ledger_entries

* perf: skip delink_original_entry during cancellation when Immutable Ledger is enabled

* test: for immutable ledger

* test: add posting_date in create_sales_invoice

* fix: link validation err with immutable ledger on

* test: update testcase of the immutable ledger

* refactor(test): simpler test for immutable invariants

---------

Co-authored-by: ruthra kumar <ruthra@erpnext.com>
(cherry picked from commit 9eeccecd30)

# Conflicts:
#	erpnext/accounts/general_ledger.py
2026-05-22 12:49:43 +05:30
diptanilsaha
498bd2fb4b Merge pull request #55144 from frappe/mergify/bp/version-16-hotfix/pr-55127
refactor: migrate get_tax_template to query builder with hierarchical group matching (backport #55127)
2026-05-22 01:48:45 +05:30
Khushi Rawat
bfb7a0e941 Merge pull request #55152 from frappe/mergify/bp/version-16-hotfix/pr-55146
fix: correct remarks for foreign currency payment entries (backport #55146)
2026-05-21 20:33:30 +05:30
khushi8112
f3f8f327df fix: correct remarks for foreign currency payment entries
(cherry picked from commit c6cde700b5)
2026-05-21 14:42:44 +00:00
Khushi Rawat
0d816010dd Merge pull request #55148 from frappe/mergify/bp/version-16-hotfix/pr-55147
fix: correct description for Is Rate Adjustment Entry (Debit Note) checkbox (backport #55147)
2026-05-21 20:08:20 +05:30
khushi8112
a39733ddd0 fix: correct description for Is Rate Adjustment Entry (Debit Note) checkbox
(cherry picked from commit 92c969478e)
2026-05-21 12:38:23 +00:00
Khushi Rawat
5c9149c5a5 Merge pull request #55145 from frappe/mergify/bp/version-16-hotfix/pr-55142
fix: don't reset net_purchase_amount for Composite Asset if already set (backport #55142)
2026-05-21 17:11:24 +05:30
khushi8112
99642b9636 fix: don't reset net_purchase_amount for Composite Asset if already set
(cherry picked from commit 98dae6e43a)
2026-05-21 11:38:28 +00:00
diptanilsaha
a63b344a0a test: add tests for supplier group hierarchy and use_for_shopping_cart filter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
(cherry picked from commit 8c43118725)
2026-05-21 11:36:30 +00:00
diptanilsaha
54be4ee275 fix: default use_for_shopping_cart to 0 in set_taxes
Ensures regular transactions only match tax rules where
use_for_shopping_cart = 0, preventing webshop-specific rules
from applying to standard documents.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
(cherry picked from commit 4d43c74f5f)
2026-05-21 11:36:30 +00:00
diptanilsaha
c45d2a3487 refactor: rewrite get_tax_template using query builder
Migrates from raw frappe.db.sql with string interpolation to frappe.qb.
Adds hierarchical supplier_group matching (mirrors customer_group behaviour).
Removes unused get_customer_group_condition helper.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
(cherry picked from commit f98975f51a)
2026-05-21 11:36:30 +00:00
diptanilsaha
82793cbd4d feat: add get_parent_supplier_groups using query builder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
(cherry picked from commit cb610b79d2)
2026-05-21 11:36:29 +00:00
diptanilsaha
620161c526 refactor: migrate get_parent_customer_groups to query builder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
(cherry picked from commit 91a2a7b0a0)
2026-05-21 11:36:29 +00:00
mergify[bot]
dfc91441b4 fix: consumed operation cost calculation (backport #54858) (#55133)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: consumed operation cost calculation (#54858)
2026-05-21 10:33:43 +00:00
rohitwaghchaure
e630ab64eb Merge pull request #55139 from frappe/mergify/bp/version-16-hotfix/pr-55134
fix: removed redundant code (backport #55134)
2026-05-21 15:56:28 +05:30
Rohit Waghchaure
a7eb3acd1a fix: removed redundant code
(cherry picked from commit 14b17cd8a6)
2026-05-21 09:55:48 +00:00
Mihir Kandoi
02f4d9a4d6 chore: add whitelist (#55113) 2026-05-20 16:33:00 +00:00
mergify[bot]
6d8bbc5b6f chore: migrate Address/Contact custom fields from JSON fixtures to install (backport #55084) (#55088)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
fixtures to install (#55084)
2026-05-20 21:24:40 +05:30
mergify[bot]
cc438a4600 fix: item price with party condition (backport #55100) (#55107)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: item price with party condition (#55100)
2026-05-20 20:24:56 +05:30
mergify[bot]
b11365b8c2 fix: valuation rate missing for standalone credit notes for moving av… (backport #55102) (#55104)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: valuation rate missing for standalone credit notes for moving av… (#55102)
2026-05-20 11:49:54 +00:00
mergify[bot]
bb87ffc90a fix: set bin details when adding item using update items (backport #55096) (#55098)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: set bin details when adding item using update items (#55096)
2026-05-20 16:21:10 +05:30
mergify[bot]
17bc2b691f fix: incorrect error message string in sales order (backport #55090) (#55095)
Co-authored-by: Shllokkk <140623894+Shllokkk@users.noreply.github.com>
fix: incorrect error message string in sales order (#55090)
2026-05-20 09:33:40 +00:00
mergify[bot]
36aca51fbb fix(manufacturing): fetch from_bom name in production plan (backport #55085) (#55092)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix(manufacturing): fetch from_bom name in production plan (#55085)
2026-05-20 09:19:31 +00:00
mergify[bot]
56a9b37fac fix(stock): remove recalculate current qty function (backport #54774) (#55075)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): remove recalculate current qty function (#54774)
2026-05-20 14:41:55 +05:30
Frappe PR Bot
6ef4a2d82c chore(release): Bumped to Version 16.19.1
## [16.19.1](https://github.com/frappe/erpnext/compare/v16.19.0...v16.19.1) (2026-05-20)

### Bug Fixes

* faster range calculation on process period closing voucher ([fa4aa0c](fa4aa0c1b6))
2026-05-20 07:25:32 +00:00
ruthra kumar
e4e796146d Merge pull request #55082 from frappe/mergify/bp/version-16/pr-55072
perf: faster opening balance range calculation in process period closing voucher (backport #55072)
2026-05-20 12:53:58 +05:30
ruthra kumar
ea1d0cc277 refactor: ppcv select with for update and skip locked
(cherry picked from commit eba58b2837)
2026-05-20 06:51:01 +00:00
ruthra kumar
fa4aa0c1b6 fix: faster range calculation on process period closing voucher
(cherry picked from commit ee33574a6d)
2026-05-20 06:51:01 +00:00
ruthra kumar
05f641d3bc Merge pull request #55078 from frappe/mergify/bp/version-16-hotfix/pr-55072
perf: faster opening balance range calculation in process period closing voucher (backport #55072)
2026-05-20 12:06:32 +05:30
ruthra kumar
830d035459 refactor: ppcv select with for update and skip locked
(cherry picked from commit eba58b2837)
2026-05-20 06:19:03 +00:00
ruthra kumar
e56ee383bc fix: faster range calculation on process period closing voucher
(cherry picked from commit ee33574a6d)
2026-05-20 06:19:02 +00:00
Frappe PR Bot
fdfcbf72bd chore(release): Bumped to Version 16.19.0
# [16.19.0](https://github.com/frappe/erpnext/compare/v16.18.3...v16.19.0) (2026-05-20)

### Bug Fixes

* add filter subtitle in print formats ([c4037da](c4037daca8))
* add warehouse vaildation for repack entry (backport [#54866](https://github.com/frappe/erpnext/issues/54866)) ([#54901](https://github.com/frappe/erpnext/issues/54901)) ([596c257](596c2571f6))
* changes to gl print template ([caa524f](caa524f661))
* disallow editing on reversal journals ([6a53982](6a53982f4a))
* **general-ledger:** show raw GL entries when categorize_by is empty (backport [#54816](https://github.com/frappe/erpnext/issues/54816)) ([#54830](https://github.com/frappe/erpnext/issues/54830)) ([c041cd2](c041cd27b5))
* handle None delivery_date when sorting MPS data (backport [#55028](https://github.com/frappe/erpnext/issues/55028)) ([#55059](https://github.com/frappe/erpnext/issues/55059)) ([f272d32](f272d32f80))
* improve design and refactor ar print template ([059372a](059372add5))
* improve filter details render logic to avoid showing duplicate information ([040b31d](040b31d3a7))
* incoming rate for legacy serial no (backport [#54962](https://github.com/frappe/erpnext/issues/54962)) ([#54978](https://github.com/frappe/erpnext/issues/54978)) ([6bce78c](6bce78c66d))
* minor bug fixes for ar print template ([09b19f7](09b19f7a2a))
* minor bugs in print templates ([e1446fc](e1446fc6f4))
* minor changes in print template ([0ead229](0ead2296e6))
* minor changes in print template ([16bc28b](16bc28bd70))
* minor changes in print templates ([0d50e03](0d50e03595))
* minor text issues in print ([daaa4ca](daaa4ca0c8))
* normalize date comparison to avoid datatype mismatch ([42f6cb4](42f6cb40d1))
* **patch:** drop dead procedures first before other changes ([0df9591](0df9591910))
* **payment_entry:** fix paid/received amount calculation for multi-currency accounts (backport [#54963](https://github.com/frappe/erpnext/issues/54963)) ([#54970](https://github.com/frappe/erpnext/issues/54970)) ([48b09eb](48b09eb52e))
* posting date and time ([1c44c60](1c44c60dbd))
* prevent duplicate task execution and timestamp error in transaction deletion (backport [#55021](https://github.com/frappe/erpnext/issues/55021)) ([#55025](https://github.com/frappe/erpnext/issues/55025)) ([9857cc6](9857cc64d6))
* remove parent page ([10b4090](10b409005d))
* remove sql procedure method from AR report ([414319d](414319daeb))
* revamp print formats for accounts receivable summary and accounts payable summary reports ([928fab6](928fab6f7e))
* status not changing for dropshipped POs and SOs (backport [#54934](https://github.com/frappe/erpnext/issues/54934)) ([#54937](https://github.com/frappe/erpnext/issues/54937)) ([3c571a1](3c571a1691))
* stock balance showing incorrect value because of incorrect SLE ([0b3344b](0b3344bad9))
* **stock:** add whole number quantity validation in Stock Reconciliation (backport [#54922](https://github.com/frappe/erpnext/issues/54922)) ([#54925](https://github.com/frappe/erpnext/issues/54925)) ([c499454](c4994548c3))
* **stock:** ignore fetching warehouse account for asset items (backport [#54403](https://github.com/frappe/erpnext/issues/54403)) ([#54961](https://github.com/frappe/erpnext/issues/54961)) ([5e5b5cf](5e5b5cfa0c))
* **stock:** update buying amount calculation in gross profit report (backport [#55020](https://github.com/frappe/erpnext/issues/55020)) ([#55024](https://github.com/frappe/erpnext/issues/55024)) ([8870619](88706192d7))
* styling in trial_balance.html and print format ([9a18d31](9a18d318d9))
* toast message for item price insert ([#55009](https://github.com/frappe/erpnext/issues/55009)) ([c967792](c967792ccb))
* use route_options for Credit Note and Debit Note sidebar links (backport [#55026](https://github.com/frappe/erpnext/issues/55026)) ([#55063](https://github.com/frappe/erpnext/issues/55063)) ([1941c3b](1941c3b136))
* **UX:** Buying settings form cleanup ([#54731](https://github.com/frappe/erpnext/issues/54731)) ([e7ae296](e7ae296614))
* **UX:** Item master form cleanup ([#54538](https://github.com/frappe/erpnext/issues/54538)) ([0eb049c](0eb049cd85))
* validate company region in uae vat 201 (backport [#54899](https://github.com/frappe/erpnext/issues/54899)) ([#55055](https://github.com/frappe/erpnext/issues/55055)) ([4015c2b](4015c2b9a4))
* warn when accounting dimension fieldname conflicts with existing fields (backport [#55036](https://github.com/frappe/erpnext/issues/55036)) ([#55062](https://github.com/frappe/erpnext/issues/55062)) ([68a5eae](68a5eae3ff))

### Features

* add print format for accounts payable report ([1c6dc80](1c6dc80b70))
* introduce print format for Accounts Receivable report ([4e7f2ee](4e7f2eeaa0))
* introduce print formats for financial statements ([3283c46](3283c461f1))
* print format for report trial balance ([1d08448](1d08448d1a))

### Reverts

* Revert "fix: debit credit not equal in purchase transactions for mult… (backport [#54906](https://github.com/frappe/erpnext/issues/54906)) ([#54908](https://github.com/frappe/erpnext/issues/54908)) ([0d07083](0d07083299))
2026-05-20 04:10:54 +00:00
diptanilsaha
fb7f820885 Merge pull request #55051 from frappe/version-16-hotfix
chore: release v16
2026-05-20 09:39:15 +05:30
mergify[bot]
1941c3b136 fix: use route_options for Credit Note and Debit Note sidebar links (backport #55026) (#55063)
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
fix: use route_options for Credit Note and Debit Note sidebar links (#55026)
2026-05-20 00:37:32 +05:30
mergify[bot]
f272d32f80 fix: handle None delivery_date when sorting MPS data (backport #55028) (#55059)
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
fix: handle None delivery_date when sorting MPS data (#55028)
2026-05-20 00:37:14 +05:30
mergify[bot]
68a5eae3ff fix: warn when accounting dimension fieldname conflicts with existing fields (backport #55036) (#55062)
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
fix: warn when accounting dimension fieldname conflicts with existing fields (#55036)
2026-05-19 23:34:44 +05:30
ruthra kumar
1b07844237 Merge pull request #55057 from frappe/mergify/bp/version-16-hotfix/pr-55053
fix(patch): drop dead procedures first before other changes (backport #55053)
2026-05-19 17:05:41 +05:30
mergify[bot]
4015c2b9a4 fix: validate company region in uae vat 201 (backport #54899) (#55055)
Co-authored-by: Ravibharathi <131471282+ravibharathi656@users.noreply.github.com>
fix: validate company region in uae vat 201 (#54899)
2026-05-19 11:29:17 +00:00
ruthra kumar
0df9591910 fix(patch): drop dead procedures first before other changes
(cherry picked from commit 61d24ba55f)
2026-05-19 11:08:51 +00:00
rohitwaghchaure
4403e1c0f4 Merge pull request #55048 from frappe/mergify/bp/version-16-hotfix/pr-55046
fix: stock balance showing incorrect value because of incorrect SLE (backport #55046)
2026-05-19 14:14:34 +05:30
Rohit Waghchaure
0b3344bad9 fix: stock balance showing incorrect value because of incorrect SLE
(cherry picked from commit 94b95d6c2f)
2026-05-19 08:22:34 +00:00
Ravibharathi
5cc335dd53 Merge pull request #55042 from frappe/mergify/bp/version-16-hotfix/pr-54761
fix: normalize date comparison to avoid datatype mismatch (backport #54761)
2026-05-19 11:47:25 +05:30
ervishnucs
42f6cb40d1 fix: normalize date comparison to avoid datatype mismatch
(cherry picked from commit 01e382b106)
2026-05-19 05:57:54 +00:00
mergify[bot]
88706192d7 fix(stock): update buying amount calculation in gross profit report (backport #55020) (#55024)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): update buying amount calculation in gross profit report (#55020)
2026-05-19 09:44:48 +05:30
mergify[bot]
9857cc64d6 fix: prevent duplicate task execution and timestamp error in transaction deletion (backport #55021) (#55025)
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
fix: prevent duplicate task execution and timestamp error in transaction deletion (#55021)
2026-05-18 17:55:05 +00:00
ruthra kumar
ff0533d085 Merge pull request #54818 from frappe/mergify/bp/version-16-hotfix/pr-54783
fix: disallow editing on reversal journals (backport #54783)
2026-05-18 15:41:05 +05:30
ruthra kumar
b0f770780c Merge pull request #55015 from frappe/mergify/bp/version-16-hotfix/pr-55001
fix: remove sql procedure method from AR report (backport #55001)
2026-05-18 14:09:00 +05:30
ruthra kumar
414319daeb fix: remove sql procedure method from AR report
(cherry picked from commit 63a7142b9b)

# Conflicts:
#	erpnext/accounts/doctype/accounts_settings/accounts_settings.json
#	erpnext/accounts/doctype/accounts_settings/accounts_settings.py
#	erpnext/patches.txt
2026-05-18 13:51:16 +05:30
Nishka Gosalia
1945a2fe39 Merge pull request #55011 from frappe/mergify/bp/version-16-hotfix/pr-55009
fix: toast message for item price insert (backport #55009)
2026-05-18 11:59:48 +05:30
Nishka Gosalia
c967792ccb fix: toast message for item price insert (#55009)
(cherry picked from commit ae9c632e39)
2026-05-18 06:11:36 +00:00
Soham Kulkarni
253248c8e8 Merge pull request #55002 from frappe/mergify/bp/version-16-hotfix/pr-55000
fix: remove parent page (backport #55000)
2026-05-18 10:58:22 +05:30
sokumon
10b409005d fix: remove parent page
(cherry picked from commit e13bd9eaa6)
2026-05-18 05:01:35 +00:00
Ejaaz Khan
272ea30031 Merge pull request #54975 from frappe/mergify/bp/version-16-hotfix/pr-54655
refactor: remove dead print format (backport #54655)
2026-05-18 10:07:20 +05:30
MochaMind
098579ffbc chore: update POT file (#54990) 2026-05-17 21:43:32 +02:00
mergify[bot]
6bce78c66d fix: incoming rate for legacy serial no (backport #54962) (#54978)
fix: incoming rate for legacy serial no

(cherry picked from commit 2773b7c002)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2026-05-16 20:48:28 +05:30
mergify[bot]
5e5b5cfa0c fix(stock): ignore fetching warehouse account for asset items (backport #54403) (#54961)
* fix(stock): ignore fetching warehouse account for asset items

(cherry picked from commit 6fe08428c1)

* test(stock): add test to create pr for asset item without checking the stock account

(cherry picked from commit 8cf4402823)

---------

Co-authored-by: Sudharsanan11 <sudharsananashok1975@gmail.com>
2026-05-16 11:52:23 +00:00
Ejaaz Khan
2c78b6c36a refactor: remove dead print format
(cherry picked from commit c933c2bd53)
2026-05-15 11:57:31 +00:00
mergify[bot]
48b09eb52e fix(payment_entry): fix paid/received amount calculation for multi-currency accounts (backport #54963) (#54970)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-05-15 10:33:33 +00:00
ruthra kumar
799d6d159c Merge pull request #54960 from frappe/mergify/bp/version-16/pr-54941
fix: flag to disable opening balance calculation in general ledger (backport #54941)
2026-05-15 14:31:57 +05:30
ruthra kumar
48f59a033f refactor: flag to disable opening balance calculation
(cherry picked from commit 28a2230d02)
2026-05-15 07:32:52 +00:00
ruthra kumar
1716026e11 Merge pull request #54957 from frappe/mergify/bp/version-16-hotfix/pr-54941
fix: flag to disable opening balance calculation in general ledger (backport #54941)
2026-05-15 12:41:25 +05:30
ruthra kumar
b1e356fd97 refactor: flag to disable opening balance calculation
(cherry picked from commit 28a2230d02)
2026-05-15 06:51:20 +00:00
Frappe PR Bot
2807c9f08f chore(release): Bumped to Version 16.18.3
## [16.18.3](https://github.com/frappe/erpnext/compare/v16.18.2...v16.18.3) (2026-05-14)

### Bug Fixes

* status not changing for dropshipped POs and SOs (backport [#54934](https://github.com/frappe/erpnext/issues/54934)) (backport [#54937](https://github.com/frappe/erpnext/issues/54937)) ([#54938](https://github.com/frappe/erpnext/issues/54938)) ([5271773](5271773595))
2026-05-14 09:39:02 +00:00
mergify[bot]
5271773595 fix: status not changing for dropshipped POs and SOs (backport #54934) (backport #54937) (#54938)
fix: status not changing for dropshipped POs and SOs (backport #54934) (#54937)

fix: status not changing for dropshipped POs and SOs (#54934)

* fix: status not changing for dropshipped POs and SOs

* test: change test case to accomodate new flow

(cherry picked from commit 78a79120ea)


(cherry picked from commit 3c571a1691)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-14 09:37:26 +00:00
mergify[bot]
3c571a1691 fix: status not changing for dropshipped POs and SOs (backport #54934) (#54937)
fix: status not changing for dropshipped POs and SOs (#54934)

* fix: status not changing for dropshipped POs and SOs

* test: change test case to accomodate new flow

(cherry picked from commit 78a79120ea)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-14 14:47:35 +05:30
Nishka Gosalia
9a9b330af6 Merge pull request #54910 from frappe/mergify/bp/version-16-hotfix/pr-54731
fix(UX): Buying settings form cleanup (backport #54731)
2026-05-14 11:56:28 +05:30
Frappe PR Bot
dd35cd1f84 chore(release): Bumped to Version 16.18.2
## [16.18.2](https://github.com/frappe/erpnext/compare/v16.18.1...v16.18.2) (2026-05-14)

### Bug Fixes

* posting date and time ([ab09029](ab090295d9))
2026-05-14 05:35:39 +00:00
rohitwaghchaure
77a6299e8b Merge pull request #54931 from frappe/mergify/bp/version-16/pr-54928
fix: posting date and time (backport #54905) (backport #54928)
2026-05-14 11:04:07 +05:30
rohitwaghchaure
b79ec7cbdd chore: fix linter issue
(cherry picked from commit 3c993377aa)
(cherry picked from commit 21ada7799c)
2026-05-14 02:04:52 +00:00
rohitwaghchaure
927360dd1d chore: fixed test case
(cherry picked from commit c740f77a6f)
(cherry picked from commit f4e66914c6)
2026-05-14 02:04:52 +00:00
Rohit Waghchaure
ab090295d9 fix: posting date and time
(cherry picked from commit fb6c05f186)
(cherry picked from commit 1c44c60dbd)
2026-05-14 02:04:51 +00:00
rohitwaghchaure
76204b920d Merge pull request #54928 from frappe/mergify/bp/version-16-hotfix/pr-54905
fix: posting date and time (backport #54905)
2026-05-14 07:33:26 +05:30
rohitwaghchaure
21ada7799c chore: fix linter issue
(cherry picked from commit 3c993377aa)
2026-05-13 18:19:17 +00:00
rohitwaghchaure
f4e66914c6 chore: fixed test case
(cherry picked from commit c740f77a6f)
2026-05-13 18:19:17 +00:00
Rohit Waghchaure
1c44c60dbd fix: posting date and time
(cherry picked from commit fb6c05f186)
2026-05-13 18:19:17 +00:00
mergify[bot]
596c2571f6 fix: add warehouse vaildation for repack entry (backport #54866) (#54901)
fix: add warehouse vaildation for repack entry (#54866)

(cherry picked from commit bc07b2d3e5)

Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
2026-05-13 15:24:51 +00:00
mergify[bot]
c4994548c3 fix(stock): add whole number quantity validation in Stock Reconciliation (backport #54922) (#54925)
fix(stock): add whole number quantity validation in Stock Reconciliation (#54922)

(cherry picked from commit f9dec73042)

Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
2026-05-13 15:03:45 +00:00
Khushi Rawat
604f80f043 Merge pull request #54913 from frappe/mergify/bp/version-16-hotfix/pr-53843
feat: Accounts Payable print template revamp and print format introduction (backport #53843)
2026-05-13 16:07:00 +05:30
Khushi Rawat
4a4757dbc6 Merge pull request #54915 from frappe/mergify/bp/version-16-hotfix/pr-53762
feat: General ledger print template revamp and print format introduction (backport #53762)
2026-05-13 16:06:27 +05:30
Khushi Rawat
436e0269f8 Merge pull request #54914 from frappe/mergify/bp/version-16-hotfix/pr-53822
feat: Accounts Receivable print template revamp and print format introduction (backport #53822)
2026-05-13 16:05:47 +05:30
Khushi Rawat
5d73da5a85 Merge pull request #54912 from frappe/mergify/bp/version-16-hotfix/pr-53870
feat: AR and AP summary reports print template revamp and print format introduction (backport #53870)
2026-05-13 15:57:07 +05:30
Khushi Rawat
886c7cc5a3 Merge pull request #54911 from frappe/mergify/bp/version-16-hotfix/pr-53934
feat: Financial Statements print format introduction (backport #53934)
2026-05-13 15:56:45 +05:30
Frappe PR Bot
c4b7b15824 chore(release): Bumped to Version 16.18.1
## [16.18.1](https://github.com/frappe/erpnext/compare/v16.18.0...v16.18.1) (2026-05-13)

### Reverts

* Revert "fix: debit credit not equal in purchase transactions for mult… (backport [#54906](https://github.com/frappe/erpnext/issues/54906)) (backport [#54908](https://github.com/frappe/erpnext/issues/54908)) ([#54916](https://github.com/frappe/erpnext/issues/54916)) ([cfd3847](cfd3847255))
2026-05-13 10:16:21 +00:00
mergify[bot]
cfd3847255 Revert "fix: debit credit not equal in purchase transactions for mult… (backport #54906) (backport #54908) (#54916)
Revert "fix: debit credit not equal in purchase transactions for mult… (backport #54906) (#54908)

Revert "fix: debit credit not equal in purchase transactions for mult… (#54906)

* Revert "fix: debit credit not equal in purchase transactions for multi currency"

This reverts commit 75bcea57f4.

* Revert "test: add test case"

This reverts commit 1d30a202c3.

* Revert "fix: include rejected qty in tax (purchase receipt)"

This reverts commit 8c9a88abbe.

(cherry picked from commit cf5e8ce878)


(cherry picked from commit 0d07083299)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-13 10:14:46 +00:00
Khushi Rawat
d430736177 Merge pull request #54634 from frappe/mergify/bp/version-16-hotfix/pr-54538
fix(UX): Item master form cleanup (backport #54538)
2026-05-13 15:11:31 +05:30
Shllokkk
caa524f661 fix: changes to gl print template
(cherry picked from commit e8d08df044)
2026-05-13 09:41:22 +00:00
Shllokkk
cd69b66761 refactor: table body data rendering cleanup
(cherry picked from commit 0d4f56bf84)
2026-05-13 09:41:22 +00:00
Shllokkk
040b31d3a7 fix: improve filter details render logic to avoid showing duplicate information
(cherry picked from commit 9660debe28)
2026-05-13 09:41:21 +00:00
Shllokkk
04893ae0e3 refactor: clean and standardize print template for general ledger report
(cherry picked from commit 3ba36212b0)
2026-05-13 09:41:21 +00:00
Shllokkk
0ead2296e6 fix: minor changes in print template
(cherry picked from commit e3019c827c)
2026-05-13 09:40:53 +00:00
Shllokkk
09b19f7a2a fix: minor bug fixes for ar print template
(cherry picked from commit 4228885f1e)
2026-05-13 09:40:52 +00:00
Shllokkk
4e7f2eeaa0 feat: introduce print format for Accounts Receivable report
(cherry picked from commit e6a32a9d02)
2026-05-13 09:40:52 +00:00
Shllokkk
059372add5 fix: improve design and refactor ar print template
(cherry picked from commit ffc59ebc9c)
2026-05-13 09:40:52 +00:00
Shllokkk
16bc28bd70 fix: minor changes in print template
(cherry picked from commit 915fcc0166)
2026-05-13 09:40:24 +00:00
Shllokkk
1c6dc80b70 feat: add print format for accounts payable report
(cherry picked from commit 2bf9d41797)
2026-05-13 09:40:24 +00:00
Shllokkk
748a3d72a3 refactor: revamp print template for accounts payable report
(cherry picked from commit c051536182)
2026-05-13 09:40:23 +00:00
Shllokkk
0d50e03595 fix: minor changes in print templates
(cherry picked from commit 44e0b36093)
2026-05-13 09:39:56 +00:00
Shllokkk
e1446fc6f4 fix: minor bugs in print templates
(cherry picked from commit 86ee9959a2)
2026-05-13 09:39:56 +00:00
Shllokkk
928fab6f7e fix: revamp print formats for accounts receivable summary and accounts payable summary reports
(cherry picked from commit 5bbcb73808)
2026-05-13 09:39:55 +00:00
mergify[bot]
0d07083299 Revert "fix: debit credit not equal in purchase transactions for mult… (backport #54906) (#54908)
Revert "fix: debit credit not equal in purchase transactions for mult… (#54906)

* Revert "fix: debit credit not equal in purchase transactions for multi currency"

This reverts commit 75bcea57f4.

* Revert "test: add test case"

This reverts commit 1d30a202c3.

* Revert "fix: include rejected qty in tax (purchase receipt)"

This reverts commit 8c9a88abbe.

(cherry picked from commit cf5e8ce878)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-13 15:09:38 +05:30
Shllokkk
c4037daca8 fix: add filter subtitle in print formats
(cherry picked from commit e82b4d9ca7)
2026-05-13 09:39:05 +00:00
Shllokkk
9a18d318d9 fix: styling in trial_balance.html and print format
(cherry picked from commit 5858b14071)
2026-05-13 09:39:05 +00:00
Shllokkk
2ff9f00ce0 refactor: print templates for financial statements
(cherry picked from commit e8777a1e34)
2026-05-13 09:39:05 +00:00
Shllokkk
daaa4ca0c8 fix: minor text issues in print
(cherry picked from commit fa0a9085ca)
2026-05-13 09:39:04 +00:00
Shllokkk
1d08448d1a feat: print format for report trial balance
(cherry picked from commit ac7e5271b0)
2026-05-13 09:39:04 +00:00
Shllokkk
3283c461f1 feat: introduce print formats for financial statements
(cherry picked from commit 82cac9c40f)
2026-05-13 09:39:04 +00:00
Nishka Gosalia
e7ae296614 fix(UX): Buying settings form cleanup (#54731)
* fix(UX): Buying settings form cleanup

* fix: controller approach modification

* fix: dark mode support

(cherry picked from commit 45f05fbeaa)
2026-05-13 09:24:12 +00:00
mergify[bot]
c041cd27b5 fix(general-ledger): show raw GL entries when categorize_by is empty (backport #54816) (#54830)
fix(general-ledger): show raw GL entries when categorize_by is empty (#54816)

(cherry picked from commit dfbe847307)

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-05-13 05:42:11 +05:30
Frappe PR Bot
dc914adb62 chore(release): Bumped to Version 16.18.0
# [16.18.0](https://github.com/frappe/erpnext/compare/v16.17.0...v16.18.0) (2026-05-12)

### Bug Fixes

* added permission validation for `deactivate_sales_person` (backport [#54884](https://github.com/frappe/erpnext/issues/54884)) ([#54886](https://github.com/frappe/erpnext/issues/54886)) ([98de025](98de025a09))
* check if item is dropshipped before updating quantity (backport [#54825](https://github.com/frappe/erpnext/issues/54825)) ([#54827](https://github.com/frappe/erpnext/issues/54827)) ([0db7e1e](0db7e1e56b))
* **crm:** handle empty _assign in appointment auto assignment (backport [#54782](https://github.com/frappe/erpnext/issues/54782)) ([#54795](https://github.com/frappe/erpnext/issues/54795)) ([f36bdaa](f36bdaadae))
* decimal issue ([8b9b83a](8b9b83a9df))
* do not rely on client side to update quantities during partial d… (backport [#54804](https://github.com/frappe/erpnext/issues/54804)) ([#54821](https://github.com/frappe/erpnext/issues/54821)) ([f24b556](f24b556336))
* fetch get_item_tax_template while update items (backport [#53708](https://github.com/frappe/erpnext/issues/53708)) ([#54767](https://github.com/frappe/erpnext/issues/54767)) ([4fbaea1](4fbaea17f8))
* incorrect serial nos picked during disassemble (backport [#54757](https://github.com/frappe/erpnext/issues/54757)) ([#54760](https://github.com/frappe/erpnext/issues/54760)) ([66ae590](66ae590adc))
* incorrect validation thrown for drop shipped PI (backport [#54751](https://github.com/frappe/erpnext/issues/54751)) ([#54753](https://github.com/frappe/erpnext/issues/54753)) ([379ebbe](379ebbe8c4))
* raw material should not have target warehouse in manufacture entry (backport [#54849](https://github.com/frappe/erpnext/issues/54849)) ([#54861](https://github.com/frappe/erpnext/issues/54861)) ([3dbadfa](3dbadfadd5))
* rename supplier wise stock analytics report ([7086db1](7086db1e1c))
* **stock:** apply filters for rejected warehouse in pick list (backport [#54733](https://github.com/frappe/erpnext/issues/54733)) ([#54776](https://github.com/frappe/erpnext/issues/54776)) ([cf0d9df](cf0d9dfbfd))
* **stock:** ignore reserved qty for stock levels in batch (backport [#54790](https://github.com/frappe/erpnext/issues/54790)) ([#54797](https://github.com/frappe/erpnext/issues/54797)) ([338d190](338d1904c1))
* **stock:** priorities pick list parent warehouse (backport [#54788](https://github.com/frappe/erpnext/issues/54788)) ([#54793](https://github.com/frappe/erpnext/issues/54793)) ([d3bc629](d3bc629f68))
* **task:** update depends_on for closing date and review date [#54850](https://github.com/frappe/erpnext/issues/54850) (backport [#54852](https://github.com/frappe/erpnext/issues/54852)) ([#54863](https://github.com/frappe/erpnext/issues/54863)) ([b962a1a](b962a1a0cd))
* validate variant values (backport [#54831](https://github.com/frappe/erpnext/issues/54831)) ([#54839](https://github.com/frappe/erpnext/issues/54839)) ([87b798b](87b798b936))

### Features

* partial delivery in dropshipping (backport [#54787](https://github.com/frappe/erpnext/issues/54787)) ([#54800](https://github.com/frappe/erpnext/issues/54800)) ([f64f871](f64f871d45))
* Philippines chart of account (backport [#53918](https://github.com/frappe/erpnext/issues/53918)) ([#54888](https://github.com/frappe/erpnext/issues/54888)) ([8f03108](8f0310859d))
2026-05-12 18:49:27 +00:00
diptanilsaha
41bff45d7a Merge pull request #54865 from frappe/version-16-hotfix
chore: release v16
2026-05-13 00:17:54 +05:30
mergify[bot]
8f0310859d feat: Philippines chart of account (backport #53918) (#54888)
feat: Added Philippines chart of account json file (#53918)

* feat: Added philipinnes chart of account json file



* feat: made changes as per review comments and corrected indentation

* feat: made changes as per review comments

* feat: made changes as per review comments to resolve the issues

* fix: fixed changes as per review comments



* fix: fixed changes as per review comments on bank group account



---------




(cherry picked from commit 5560f6c270)

Signed-off-by: Soham-ambibuzz <soham.pawar@ambibuzz.com>
Signed-off-by: soham7117 <sohampawar626@gmail.com>
Co-authored-by: Soham-ambibuzz <soham.pawar@ambibuzz.com>
Co-authored-by: soham7117 <sohampawar626@gmail.com>
2026-05-12 16:46:05 +00:00
mergify[bot]
98de025a09 fix: added permission validation for deactivate_sales_person (backport #54884) (#54886)
* fix: added permission validation for `deactivate_sales_person` (#54884)

(cherry picked from commit 9134db9cd3)

# Conflicts:
#	erpnext/setup/doctype/employee/employee.py

* chore: resolved conflict

---------

Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-05-12 16:31:21 +00:00
mergify[bot]
b962a1a0cd fix(task): update depends_on for closing date and review date #54850 (backport #54852) (#54863)
fix(task): update depends_on for closing date and review date #54850 (#54852)

(cherry picked from commit 3532c1cc69)

Co-authored-by: Jaypal Lakum <96212547+jp-the-dev@users.noreply.github.com>
2026-05-12 10:13:49 +00:00
mergify[bot]
3dbadfadd5 fix: raw material should not have target warehouse in manufacture entry (backport #54849) (#54861)
fix: raw material should not have target warehouse in manufacture entry (#54849)

(cherry picked from commit b5527cf328)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-12 09:46:45 +00:00
Nishka Gosalia
67ad437dd3 Merge pull request #54854 from frappe/mergify/bp/version-16-hotfix/pr-54835
fix: rename supplier wise stock analytics report (backport #54835)
2026-05-12 14:08:34 +05:30
nishkagosalia
7086db1e1c fix: rename supplier wise stock analytics report
(cherry picked from commit 85206e0278)
2026-05-12 07:08:04 +00:00
mergify[bot]
87b798b936 fix: validate variant values (backport #54831) (#54839)
fix: validate variant values (#54831)

(cherry picked from commit 95705f18aa)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-11 21:23:34 +05:30
ruthra kumar
b894b02ebc Merge pull request #54832 from frappe/mergify/bp/version-16-hotfix/pr-54828
refactor(test): speed up payment reconciliation tests (backport #54828)
2026-05-11 14:28:02 +05:30
ruthra kumar
1d20469c99 refactor(test): speed up payment reconciliation tests
(cherry picked from commit f58242dca7)
2026-05-11 08:40:07 +00:00
mergify[bot]
0db7e1e56b fix: check if item is dropshipped before updating quantity (backport #54825) (#54827)
fix: check if item is dropshipped before updating quantity (#54825)

(cherry picked from commit 23e9ad3fd9)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-11 08:08:09 +00:00
mergify[bot]
f24b556336 fix: do not rely on client side to update quantities during partial d… (backport #54804) (#54821)
* fix: do not rely on client side to update quantities during partial d… (#54804)

fix: do not rely on client side to update quantities during partial dropship
(cherry picked from commit 03acbc3dc9)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.py

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-11 07:40:14 +00:00
ruthra kumar
6a53982f4a fix: disallow editing on reversal journals
(cherry picked from commit 26ca7445eb)
2026-05-11 04:38:45 +00:00
MochaMind
1fcd2837e8 chore: update POT file (#54814) 2026-05-10 13:56:48 +02:00
mergify[bot]
f64f871d45 feat: partial delivery in dropshipping (backport #54787) (#54800)
* feat: partial delivery in dropshipping (#54787)

(cherry picked from commit db74360396)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.py
#	erpnext/buying/doctype/purchase_order_item/purchase_order_item.json

* chore: resolve conflicts

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-09 02:01:42 +00:00
mergify[bot]
f36bdaadae fix(crm): handle empty _assign in appointment auto assignment (backport #54782) (#54795)
fix(crm): handle empty _assign in appointment auto assignment (#54782)

(cherry picked from commit a4a389bd41)

Co-authored-by: Sakthivel Murugan S <129778327+ssakthivelmurugan@users.noreply.github.com>
2026-05-08 12:55:38 +00:00
mergify[bot]
d3bc629f68 fix(stock): priorities pick list parent warehouse (backport #54788) (#54793)
fix(stock): priorities pick list parent warehouse (#54788)

(cherry picked from commit 4e850f31d5)

Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
2026-05-08 12:42:02 +00:00
mergify[bot]
338d1904c1 fix(stock): ignore reserved qty for stock levels in batch (backport #54790) (#54797)
fix(stock): ignore reserved qty for stock levels in batch (#54790)

(cherry picked from commit 0b6a372a52)

Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
2026-05-08 12:35:22 +00:00
mergify[bot]
4fbaea17f8 fix: fetch get_item_tax_template while update items (backport #53708) (#54767)
* fix: fetch get_item_tax_template while update items

(cherry picked from commit 03c9d16ca6)

* fix: resolve item tax template from item group in update items

(cherry picked from commit 97e7916b66)

* fix: resolve item tax template from item group in update items

(cherry picked from commit ad22256b2d)

---------

Co-authored-by: ervishnucs <ervishnucs369@gmail.com>
2026-05-07 16:04:20 +05:30
mergify[bot]
cf0d9dfbfd fix(stock): apply filters for rejected warehouse in pick list (backport #54733) (#54776)
fix(stock): apply filters for rejected warehouse in pick list (#54733)

(cherry picked from commit 0fc96e8f7d)

Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
2026-05-07 10:31:19 +00:00
mergify[bot]
66ae590adc fix: incorrect serial nos picked during disassemble (backport #54757) (#54760)
fix: incorrect serial nos picked during disassemble

(cherry picked from commit 25f7fa548d)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2026-05-06 16:06:03 +05:30
mergify[bot]
379ebbe8c4 fix: incorrect validation thrown for drop shipped PI (backport #54751) (#54753)
* fix: incorrect validation thrown for drop shipped PI (#54751)

(cherry picked from commit 907a809f3f)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-06 05:55:26 +00:00
Frappe PR Bot
7b494dc9e8 chore(release): Bumped to Version 16.17.0
# [16.17.0](https://github.com/frappe/erpnext/compare/v16.16.0...v16.17.0) (2026-05-05)

### Bug Fixes

* accounts and account types in German CoA "SKR 03" (backport [#54711](https://github.com/frappe/erpnext/issues/54711)) ([#54713](https://github.com/frappe/erpnext/issues/54713)) ([982810a](982810a700))
* add missing fields in set_currency_labels (backport [#54689](https://github.com/frappe/erpnext/issues/54689)) ([#54690](https://github.com/frappe/erpnext/issues/54690)) ([bca893a](bca893a508))
* Backfill `not_applicable` on Item Tax Template Details for German companies (backport [#54682](https://github.com/frappe/erpnext/issues/54682)) ([#54686](https://github.com/frappe/erpnext/issues/54686)) ([a22d773](a22d773341))
* copy project from first row to new rows (backport [#53295](https://github.com/frappe/erpnext/issues/53295)) ([#54620](https://github.com/frappe/erpnext/issues/54620)) ([e24ab72](e24ab72c0d))
* correct project filter in buying doctypes (backport [#54644](https://github.com/frappe/erpnext/issues/54644)) ([#54652](https://github.com/frappe/erpnext/issues/54652)) ([86cf256](86cf256358))
* correct titles set to {customer_name} or {supplier_name} text strings (backport [#54656](https://github.com/frappe/erpnext/issues/54656)) ([#54669](https://github.com/frappe/erpnext/issues/54669)) ([38cfeb1](38cfeb1bb7))
* dont show serial/batch button when PR is submitted (backport [#54642](https://github.com/frappe/erpnext/issues/54642)) ([#54646](https://github.com/frappe/erpnext/issues/54646)) ([6dbc17d](6dbc17d71a))
* error when creating quotation from CRM (backport [#54722](https://github.com/frappe/erpnext/issues/54722)) ([#54725](https://github.com/frappe/erpnext/issues/54725)) ([2cd4c1a](2cd4c1a052))
* hide payment and payment request buttons based on permissions in invoices and orders (backport [#53920](https://github.com/frappe/erpnext/issues/53920)) ([#54736](https://github.com/frappe/erpnext/issues/54736)) ([e60490d](e60490dceb))
* incorrect expense account book in purchase return (backport [#54681](https://github.com/frappe/erpnext/issues/54681)) ([#54693](https://github.com/frappe/erpnext/issues/54693)) ([0dade2c](0dade2c38c))
* mark item tax templates as not applicable (backport [#54673](https://github.com/frappe/erpnext/issues/54673)) ([#54677](https://github.com/frappe/erpnext/issues/54677)) ([126e13b](126e13be25))
* **payment_entry:** convert the date args to string type before escaping in `get_outstanding_reference_documents` (backport [#54639](https://github.com/frappe/erpnext/issues/54639)) ([#54648](https://github.com/frappe/erpnext/issues/54648)) ([19a8ebe](19a8ebe8a5))
* **project:** use user.email for invitations and skip disabled users. (backport [#54561](https://github.com/frappe/erpnext/issues/54561)) ([#54667](https://github.com/frappe/erpnext/issues/54667)) ([288cdf3](288cdf3bf0))
* py error on sales forecast doctype (backport [#54641](https://github.com/frappe/erpnext/issues/54641)) ([#54643](https://github.com/frappe/erpnext/issues/54643)) ([7bd360a](7bd360aa29))
* Remove bom stock report link from manufacturing workspace ([0f27881](0f27881fed))
* **selling:** blanket order ordered qty recalculation on sales order status change (backport [#54593](https://github.com/frappe/erpnext/issues/54593)) ([#54623](https://github.com/frappe/erpnext/issues/54623)) ([9db03bc](9db03bc520))
* set valid_from in created Item Price (backport [#54696](https://github.com/frappe/erpnext/issues/54696)) ([#54700](https://github.com/frappe/erpnext/issues/54700)) ([bbb4e79](bbb4e79d0a))
* show correct status in Serial No Ledger (backport [#54567](https://github.com/frappe/erpnext/issues/54567)) ([#54626](https://github.com/frappe/erpnext/issues/54626)) ([d6f2ff6](d6f2ff6b87))
* show in and out qty in the stock ledger report for stock recos ([d27cf48](d27cf48b19))
* skip depreciation rescheduling when asset is fully depreciated on sale ([d3c893d](d3c893d08b))
* skip rescheduling only for asset being disposed ([07a957c](07a957c164))
* use RecoverableErrors isinstance check for repost timeout status (backport [#54543](https://github.com/frappe/erpnext/issues/54543)) ([#54649](https://github.com/frappe/erpnext/issues/54649)) ([b300159](b3001595ab))

### Features

* copy terms attachments to transactions (backport [#53403](https://github.com/frappe/erpnext/issues/53403)) ([#54661](https://github.com/frappe/erpnext/issues/54661)) ([bd932da](bd932da08b))
* **ux:** Naming series dialog ([#54554](https://github.com/frappe/erpnext/issues/54554)) ([48ebb4c](48ebb4ca61))

### Performance Improvements

* max recursion depth error in serial no (backport [#54629](https://github.com/frappe/erpnext/issues/54629)) ([#54631](https://github.com/frappe/erpnext/issues/54631)) ([808214f](808214fd95))
2026-05-05 16:32:20 +00:00
rohitwaghchaure
2bc07f18a7 Merge pull request #54745 from frappe/mergify/bp/version-16-hotfix/pr-54723
fix: decimal issue in stock ageing report (backport #54723)
2026-05-05 22:02:16 +05:30
diptanilsaha
ed69dafbe8 Merge pull request #54740 from frappe/version-16-hotfix 2026-05-05 22:00:39 +05:30
Nishka Gosalia
c985f94009 Merge pull request #54743 from frappe/mergify/bp/version-16-hotfix/pr-54732
fix: Remove bom stock report link from manufacturing workspace (backport #54732)
2026-05-05 16:44:55 +05:30
Rohit Waghchaure
8b9b83a9df fix: decimal issue
(cherry picked from commit 542eb6aca4)
2026-05-05 11:13:04 +00:00
nishkagosalia
0f27881fed fix: Remove bom stock report link from manufacturing workspace
(cherry picked from commit f86568b078)
2026-05-05 10:51:13 +00:00
mergify[bot]
e60490dceb fix: hide payment and payment request buttons based on permissions in invoices and orders (backport #53920) (#54736)
Co-authored-by: Sakthivel Murugan S <129778327+ssakthivelmurugan@users.noreply.github.com>
Co-authored-by: ravibharathi656 <ravibharathi656@gmail.com>
fix: hide payment and payment request buttons based on permissions in invoices and orders (#53920)
2026-05-05 12:17:57 +05:30
mergify[bot]
2cd4c1a052 fix: error when creating quotation from CRM (backport #54722) (#54725)
fix: error when creating quotation from CRM (#54722)

(cherry picked from commit 2d3190effb)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-04 16:04:03 +00:00
mergify[bot]
982810a700 fix: accounts and account types in German CoA "SKR 03" (backport #54711) (#54713)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix: accounts and account types in German CoA "SKR 03" (#54711)
2026-05-03 17:49:02 +00:00
MochaMind
18006b978f chore: update POT file (#54710) 2026-05-03 14:24:28 +02:00
mergify[bot]
bbb4e79d0a fix: set valid_from in created Item Price (backport #54696) (#54700)
* fix: set valid_from in created Item Price (#54696)

Co-authored-by: Kaajal-Chhattani <kaajal.chhattani@aurigait.com>
(cherry picked from commit 6246a9aa6e)

# Conflicts:
#	erpnext/stock/get_item_details.py

* chore: resolve conflicts

---------

Co-authored-by: Kaajalchhattani <89331214+Kaajalchhattani@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-05-02 16:45:52 +00:00
mergify[bot]
bca893a508 fix: add missing fields in set_currency_labels (backport #54689) (#54690)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix: add missing fields in set_currency_labels (#54689)
2026-05-01 14:39:39 +02:00
mergify[bot]
0dade2c38c fix: incorrect expense account book in purchase return (backport #54681) (#54693)
fix: incorrect expense account book in purchase return

(cherry picked from commit 2a720e7008)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2026-05-01 12:47:05 +05:30
mergify[bot]
a22d773341 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)
2026-05-01 04:29:06 +02:00
mergify[bot]
126e13be25 fix: mark item tax templates as not applicable (backport #54673) (#54677)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix: mark item tax templates as not applicable (#54673)
2026-04-30 17:52:24 +02:00
mergify[bot]
288cdf3bf0 fix(project): use user.email for invitations and skip disabled users. (backport #54561) (#54667)
fix(project): use user.email for invitations and skip disabled users. (#54561)

* fix(project): use user.email for invitations and skip disabled users.

* Update erpnext/projects/doctype/project/project.py



* fix(project): remove duplicate loop causing indentation error

* fix(project): resolve pre-commit hook failure

---------


(cherry picked from commit 231dd1856f)

Co-authored-by: Hemil-Sangani <hemil@sanskartechnolab.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-04-30 14:35:12 +05:30
rohitwaghchaure
2422237c1a Merge pull request #54671 from frappe/mergify/bp/version-16-hotfix/pr-54664
fix: show in and out qty in the stock ledger report for stock recos (backport #54664)
2026-04-30 14:34:23 +05:30
mergify[bot]
38cfeb1bb7 fix: correct titles set to {customer_name} or {supplier_name} text strings (backport #54656) (#54669)
Co-authored-by: Trusted Computer <75872475+trustedcomputer@users.noreply.github.com>
Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
fix: correct titles set to {customer_name} or {supplier_name} text strings (#54656)
2026-04-30 08:52:23 +00:00
Rohit Waghchaure
d27cf48b19 fix: show in and out qty in the stock ledger report for stock recos
(cherry picked from commit da081254a6)
2026-04-30 08:44:26 +00:00
Khushi Rawat
c232f1f450 Merge pull request #54659 from frappe/mergify/bp/version-16-hotfix/pr-54658
fix: skip depreciation rescheduling when asset is fully depreciated on sale (backport #54658)
2026-04-30 11:31:15 +05:30
mergify[bot]
bd932da08b feat: copy terms attachments to transactions (backport #53403) (#54661)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-04-29 23:43:28 +02:00
khushi8112
07a957c164 fix: skip rescheduling only for asset being disposed
(cherry picked from commit 88b82383f5)
2026-04-29 21:05:17 +00:00
khushi8112
d3c893d08b fix: skip depreciation rescheduling when asset is fully depreciated on sale
(cherry picked from commit c4155b6c81)
2026-04-29 21:05:17 +00:00
mergify[bot]
b3001595ab fix: use RecoverableErrors isinstance check for repost timeout status (backport #54543) (#54649)
fix: use RecoverableErrors isinstance check for repost timeout status

When a Repost Item Valuation job is killed by an RQ worker timeout
(JobTimeoutException raised via SIGALRM), the existing status detection
relied solely on traceback string matching for 'timeout' or 'Deadlock'.

This is unreliable because SIGALRM can interrupt a C-extension call
(e.g. inside pypika's copy.copy()) before Python records the exception
in the traceback. In that case the traceback shows only the interrupted
frame -- not JobTimeoutException -- so the job is permanently marked
'Failed' instead of 'In Progress', preventing the scheduler from
automatically retrying it.

RecoverableErrors = (JobTimeoutException, QueryDeadlockError,
QueryTimeoutError) is already defined at the top of this file and is
already used further down in the same except block to suppress email
notifications. Extend its use to also guard the status decision.

The traceback string fallback is kept as a secondary check for
forward compatibility with other timeout signals.

Fixes: jobs permanently stuck as 'Failed' after RQ worker timeout,
requiring manual re-queue to resume reposting.

(cherry picked from commit a49e2de866)

Co-authored-by: Assem Bahnasy <bahnasyassem@gmail.com>
2026-04-29 12:02:04 +00:00
mergify[bot]
86cf256358 fix: correct project filter in buying doctypes (backport #54644) (#54652)
fix: correct project filter in buying doctypes (#54644)

(cherry picked from commit a04c028522)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-29 17:28:12 +05:30
mergify[bot]
19a8ebe8a5 fix(payment_entry): convert the date args to string type before escaping in get_outstanding_reference_documents (backport #54639) (#54648)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(payment_entry): convert the date args to string type before escaping in `get_outstanding_reference_documents` (#54639)
2026-04-29 11:45:24 +00:00
mergify[bot]
6dbc17d71a fix: dont show serial/batch button when PR is submitted (backport #54642) (#54646)
fix: dont show serial/batch button when PR is submitted (#54642)

(cherry picked from commit 060defcc2b)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-29 11:32:37 +00:00
mergify[bot]
7bd360aa29 fix: py error on sales forecast doctype (backport #54641) (#54643)
fix: py error on sales forecast doctype (#54641)

fix: py error on sales forecase doctype
(cherry picked from commit d0d8cff48f)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-29 11:13:18 +00:00
Nishka Gosalia
2e438011da Merge pull request #54635 from frappe/mergify/bp/version-16-hotfix/pr-54554 2026-04-29 15:21:22 +05:30
Nishka Gosalia
48ebb4ca61 feat(ux): Naming series dialog (#54554)
(cherry picked from commit 844f3dbc0b)
2026-04-29 09:15:45 +00:00
Khushi Rawat
0eb049cd85 fix(UX): Item master form cleanup (#54538)
* fix: UI improvements for item form

* fix: add descriptions and tooltips to all checkboxes

* feat: show toast notification when item price is created

* fix: do not use selling rate for opening stock entry

* fix: add descriptions and tooltips to item default fields

* fix(test): give valuation rate for opening stock entry creation

* fix: moving naming series toggle before the return

* refactor: more changes in the form UI

(cherry picked from commit 43937acd8b)
2026-04-29 09:15:20 +00:00
mergify[bot]
808214fd95 perf: max recursion depth error in serial no (backport #54629) (#54631)
perf: max recursion depth error in serial no (#54629)

(cherry picked from commit 503b5bf140)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-29 08:53:07 +00:00
mergify[bot]
d6f2ff6b87 fix: show correct status in Serial No Ledger (backport #54567) (#54626)
* refactor: extract SN status logic

(cherry picked from commit cb2e6e1e2e)

* fix: show correct status in Serial No Ledger

(cherry picked from commit 2b3e047143)

---------

Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
2026-04-29 13:55:18 +05:30
mergify[bot]
9db03bc520 fix(selling): blanket order ordered qty recalculation on sales order status change (backport #54593) (#54623)
fix(selling): blanket order ordered qty recalculation on sales order status change (#54593)

(cherry picked from commit d68801e73a)

Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
2026-04-29 06:47:55 +00:00
mergify[bot]
e24ab72c0d fix: copy project from first row to new rows (backport #53295) (#54620)
fix: copy project to new item row from parent

(cherry picked from commit 68cc518497)

Co-authored-by: ravibharathi656 <ravibharathi656@gmail.com>
2026-04-29 11:55:46 +05:30
Frappe PR Bot
4d5c665e22 chore(release): Bumped to Version 16.16.0
# [16.16.0](https://github.com/frappe/erpnext/compare/v16.15.1...v16.16.0) (2026-04-28)

### Bug Fixes

* **`get_stock_balance`:** validate inventory dimension fieldnames (backport [#54587](https://github.com/frappe/erpnext/issues/54587)) ([#54589](https://github.com/frappe/erpnext/issues/54589)) ([9f04fcc](9f04fcc190))
* add filter labels and required filters for financial report validation ([e6f0bb6](e6f0bb66e2))
* add party type for dynamic link support ([c6d4802](c6d4802857))
* always exclude pcv entries except for closing account head ([446c111](446c111653))
* avoid double reduction of pe reference outstanding (backport [#54193](https://github.com/frappe/erpnext/issues/54193)) ([#54613](https://github.com/frappe/erpnext/issues/54613)) ([5de4b01](5de4b013ea))
* correct display depends on condition ([#54556](https://github.com/frappe/erpnext/issues/54556)) ([0df38a8](0df38a841e))
* debit credit not equal in purchase transactions for multi currency (backport [#54456](https://github.com/frappe/erpnext/issues/54456)) ([#54564](https://github.com/frappe/erpnext/issues/54564)) ([d9a9a5b](d9a9a5bcde))
* delivery schedule in the sales order ([386f499](386f49978e))
* duplicate entries being shown in batch exists in future transact… (backport [#54604](https://github.com/frappe/erpnext/issues/54604)) ([#54606](https://github.com/frappe/erpnext/issues/54606)) ([1111771](11117710d3))
* **edi:** restrict Code List imports to files and trusted backend URLs (backport [#54137](https://github.com/frappe/erpnext/issues/54137)) ([#54266](https://github.com/frappe/erpnext/issues/54266)) ([2a244d1](2a244d162b)), closes [#54488](https://github.com/frappe/erpnext/issues/54488)
* ensure fiscal year is checked before validating date filters in financial statements ([fba7871](fba78711cc))
* ensure tax withholding entries respect date range of category ([719d982](719d982a07))
* filter opening entries in first year in custom financial statement ([6bd6e62](6bd6e62c8c))
* filter overdue purchase order items by company (backport [#54099](https://github.com/frappe/erpnext/issues/54099)) ([#54611](https://github.com/frappe/erpnext/issues/54611)) ([8f8bf13](8f8bf13b41))
* hide feature flag controlled fields on install ([45dc2c4](45dc2c40fd))
* make inv dimen reqd only in delivery note (backport [#54546](https://github.com/frappe/erpnext/issues/54546)) ([#54552](https://github.com/frappe/erpnext/issues/54552)) ([d56df96](d56df96f73))
* **manufacturing:** remove conversion factor for stock qty (backport [#54525](https://github.com/frappe/erpnext/issues/54525)) ([#54573](https://github.com/frappe/erpnext/issues/54573)) ([f14751d](f14751d538))
* negative quantity check in validate_item_qty (backport [#54559](https://github.com/frappe/erpnext/issues/54559)) ([#54572](https://github.com/frappe/erpnext/issues/54572)) ([f7fa394](f7fa394aea))
* **payment_entry:** escape arguments on invoice and order fetching sql queries (backport [#54582](https://github.com/frappe/erpnext/issues/54582)) ([#54586](https://github.com/frappe/erpnext/issues/54586)) ([5289aa0](5289aa0ab3))
* **PCV:** set correct filters of `from_date` and `to_date` on General Ledger Report on clicking `Ledger` button (backport [#54522](https://github.com/frappe/erpnext/issues/54522)) ([#54524](https://github.com/frappe/erpnext/issues/54524)) ([f3996fb](f3996fb971))
* preserve inventory dimensions when raw materials are reset (backport [#54440](https://github.com/frappe/erpnext/issues/54440)) ([#54493](https://github.com/frappe/erpnext/issues/54493)) ([456e99b](456e99b352))
* py error on stock ageing report (backport [#54467](https://github.com/frappe/erpnext/issues/54467)) ([#54469](https://github.com/frappe/erpnext/issues/54469)) ([090aab3](090aab33fb))
* skip BudgetValidation when cancelling GL entries ([1b14673](1b146738c4))
* **stock:** add stock entry in batch master connection ([62bbe28](62bbe28a72))
* **stock:** remove validation for transfer_qty field (backport [#54542](https://github.com/frappe/erpnext/issues/54542)) ([#54545](https://github.com/frappe/erpnext/issues/54545)) ([cc85370](cc85370d54))
* **stock:** set incoming rate as zero for outward sle (backport [#54514](https://github.com/frappe/erpnext/issues/54514)) ([#54533](https://github.com/frappe/erpnext/issues/54533)) ([cabea2f](cabea2f288))
* **stock:** show available qty in warehouse link field (backport [#54474](https://github.com/frappe/erpnext/issues/54474)) ([#54484](https://github.com/frappe/erpnext/issues/54484)) ([f7b87ed](f7b87ed0e3))
* **stock:** show item code in serial and batch selector dialog ([85d1eb8](85d1eb8379))
* summing of values could be zero even if values exist ([d51ce66](d51ce66cb2))
* update account identification to avoid using name_field in financial statements ([7b60ec8](7b60ec8457))
* update fiscal year filter to use mandatory_depends_on instead of reqd ([6570796](6570796fba))
* update status of quotation in patch (backport [#54577](https://github.com/frappe/erpnext/issues/54577)) ([#54580](https://github.com/frappe/erpnext/issues/54580)) ([134e4b7](134e4b7446))

### Features

* add setting to hide Subscription references across doctypes ([#54576](https://github.com/frappe/erpnext/issues/54576)) ([15b6633](15b6633fc3))
* Add XLSX styling support to custom financial report templates ([#52612](https://github.com/frappe/erpnext/issues/52612)) ([055ff56](055ff56ce4))
* Add XLSX styling support to custom financial report templates (backport [#52612](https://github.com/frappe/erpnext/issues/52612)) ([#54485](https://github.com/frappe/erpnext/issues/54485)) ([df3fbed](df3fbeded2))
* danish_bosnian_address_template (backport [#54093](https://github.com/frappe/erpnext/issues/54093)) ([#54516](https://github.com/frappe/erpnext/issues/54516)) ([5c0d2cb](5c0d2cb474))
* enhance account category with root type ([#53190](https://github.com/frappe/erpnext/issues/53190)) ([96bab08](96bab08ae0))
2026-04-28 21:03:29 +00:00
diptanilsaha
e09487d140 Merge pull request #54583 from frappe/version-16-hotfix 2026-04-29 02:31:54 +05:30
mergify[bot]
5de4b013ea fix: avoid double reduction of pe reference outstanding (backport #54193) (#54613)
* fix: avoid double reduction of pe reference outstanding (#54193)

Co-authored-by: diptanilsaha <diptanil@frappe.io>
(cherry picked from commit d1a80d40c4)

# Conflicts:
#	erpnext/accounts/utils.py

* chore: remove type hints for function parameters

---------

Co-authored-by: Ravibharathi <131471282+ravibharathi656@users.noreply.github.com>
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-28 20:41:42 +00:00
mergify[bot]
8f8bf13b41 fix: filter overdue purchase order items by company (backport #54099) (#54611)
Co-authored-by: Ravibharathi <131471282+ravibharathi656@users.noreply.github.com>
fix: filter overdue purchase order items by company (#54099)
2026-04-29 01:25:31 +05:30
mergify[bot]
11117710d3 fix: duplicate entries being shown in batch exists in future transact… (backport #54604) (#54606)
fix: duplicate entries being shown in batch exists in future transact… (#54604)

fix: duplicate entries being shown in batch exists in future transactions msg
(cherry picked from commit 54f20de7e3)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-28 22:23:13 +05:30
diptanilsaha
90b07b3db5 Merge branch 'version-16' into version-16-hotfix 2026-04-28 21:49:53 +05:30
Trusted Computer
0d498baa10 refactor: bring back titles on sales transactions and make them optional and visible on purchase transactions (backport #52633) (#54601)
* refactor: bring back titles on sales transactions and make them optional and visible on purchase transactions

* fix: update timestamp in json to UTC
2026-04-28 21:12:41 +05:30
mergify[bot]
deef1696d6 refactor(sms_center): replaced raw SQL queries with Query Builder (backport #54600) (#54603)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-28 15:41:59 +00:00
Lakshit Jain
c6ee18b4d4 Merge pull request #54599 from frappe/mergify/bp/version-16-hotfix/pr-54362
fix: filter opening entries after closing voucher (backport #54362)
2026-04-28 19:04:45 +05:30
Lakshit Jain
2f88fa6731 Merge pull request #54598 from frappe/mergify/bp/version-16-hotfix/pr-54517
fix: always exclude pcv entries except for closing account head (backport #54517)
2026-04-28 19:03:09 +05:30
Lakshit Jain
9c5c87b354 Merge pull request #54594 from frappe/mergify/bp/version-16-hotfix/pr-54479
fix:  Handle mandantory filters for financial statements report (backport #54479)
2026-04-28 18:45:05 +05:30
Smit Vora
64a724baea test: include both accounts to test sum = 0
(cherry picked from commit 590f2ffe28)
2026-04-28 13:13:46 +00:00
Smit Vora
7f32c3aca7 test: opening entries after period closing
(cherry picked from commit 5fc3ca1d4b)
2026-04-28 13:13:46 +00:00
Smit Vora
4675921077 chore: comment
(cherry picked from commit c94b8c41f3)
2026-04-28 13:13:46 +00:00
Smit Vora
d51ce66cb2 fix: summing of values could be zero even if values exist
(cherry picked from commit 7ae91cac01)
2026-04-28 13:13:45 +00:00
vorasmit
6bd6e62c8c fix: filter opening entries in first year in custom financial statement
(cherry picked from commit 3c8a066484)
2026-04-28 13:13:45 +00:00
Smit Vora
fa901946ce test: pcv is excluded from PL accounts
(cherry picked from commit 84aa54c540)
2026-04-28 13:13:18 +00:00
Smit Vora
446c111653 fix: always exclude pcv entries except for closing account head
(cherry picked from commit 0349e7a0b8)
2026-04-28 13:13:18 +00:00
Abdeali Chharchhoda
859b24dd95 chore: minor fix
(cherry picked from commit 3854d2cbf6)
2026-04-28 12:01:21 +00:00
Abdeali Chharchhoda
7b60ec8457 fix: update account identification to avoid using name_field in financial statements
(cherry picked from commit 1fd6c3ba1a)
2026-04-28 12:01:21 +00:00
Abdeali Chharchhoda
e6f0bb66e2 fix: add filter labels and required filters for financial report validation
(cherry picked from commit 4274c2aba3)
2026-04-28 12:01:21 +00:00
Abdeali Chharchhoda
6570796fba fix: update fiscal year filter to use mandatory_depends_on instead of reqd
(cherry picked from commit 79d6a51e1e)
2026-04-28 12:01:20 +00:00
Abdeali Chharchhoda
fba78711cc fix: ensure fiscal year is checked before validating date filters in financial statements
(cherry picked from commit 5a915cb45e)
2026-04-28 12:01:20 +00:00
mergify[bot]
9f04fcc190 fix(get_stock_balance): validate inventory dimension fieldnames (backport #54587) (#54589)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(`get_stock_balance`): validate inventory dimension fieldnames (#54587)
2026-04-28 11:35:16 +00:00
mergify[bot]
5289aa0ab3 fix(payment_entry): escape arguments on invoice and order fetching sql queries (backport #54582) (#54586)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(payment_entry): escape arguments on invoice and order fetching sql queries (#54582)
2026-04-28 10:48:41 +00:00
ruthra kumar
185ef4e273 Merge pull request #54553 from frappe/mergify/bp/version-16-hotfix/pr-54509
fix: hide feature flag controlled fields on install (backport #54509)
2026-04-28 16:04:42 +05:30
ruthra kumar
45dc2c40fd fix: hide feature flag controlled fields on install
(cherry picked from commit 889fdf2f11)
2026-04-28 15:44:28 +05:30
mergify[bot]
386a373c9b chore(sidebar): moved Inactive Customers from CRM to Selling Workspace Sidebar (backport #54578) (#54581)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-28 15:41:36 +05:30
mergify[bot]
134e4b7446 fix: update status of quotation in patch (backport #54577) (#54580)
fix: update status of quotation in patch (#54577)

(cherry picked from commit 2088a01c19)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-28 09:44:16 +00:00
Jatin3128
15b6633fc3 feat: add setting to hide Subscription references across doctypes (#54576) 2026-04-28 13:09:50 +05:30
mergify[bot]
f14751d538 fix(manufacturing): remove conversion factor for stock qty (backport #54525) (#54573)
fix(manufacturing): remove conversion factor for stock qty (#54525)

(cherry picked from commit 6f9089dd5b)

Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
2026-04-28 05:38:29 +00:00
mergify[bot]
f7fa394aea fix: negative quantity check in validate_item_qty (backport #54559) (#54572)
fix: negative quantity check in validate_item_qty (#54559)

Fix negative quantity check in validate_item_qty

When saving a Blanket Order with a blank qty field in the items table, the following error is raised:

TypeError: '<' not supported between instances of 'NoneType' and 'int'

Root cause: The validate_item_qty method compares d.qty < 0 directly. When the qty field is left empty, its value is None, and Python cannot compare None with an integer.

Fix
Wrap d.qty with flt(), which safely converts None (and any non-numeric value) to 0.0 before the comparison.

# Before
if d.qty < 0:

# After
if flt(d.qty) < 0:

(cherry picked from commit 63edd5ddc6)

Co-authored-by: Vinay Mishra <39999379+vinaymishraofficial@users.noreply.github.com>
2026-04-28 05:33:55 +00:00
mergify[bot]
d9a9a5bcde fix: debit credit not equal in purchase transactions for multi currency (backport #54456) (#54564)
fix: debit credit not equal in purchase transactions for multi currency (#54456)

(cherry picked from commit 601581d6f8)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-27 15:23:05 +00:00
Mihir Kandoi
0df38a841e fix: correct display depends on condition (#54556) 2026-04-27 10:08:47 +00:00
mergify[bot]
d56df96f73 fix: make inv dimen reqd only in delivery note (backport #54546) (#54552)
fix: make inv dimen reqd only in delivery note (#54546)

(cherry picked from commit 0aadd1e3a5)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-27 15:10:44 +05:30
mergify[bot]
cc85370d54 fix(stock): remove validation for transfer_qty field (backport #54542) (#54545)
fix(stock): remove validation for transfer_qty field (#54542)

(cherry picked from commit 60a6b38c31)

Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
2026-04-27 07:20:16 +00:00
mergify[bot]
ac9aa7f154 refactor: quality inspection item query (backport #54511) (#54540)
* refactor: quality inspection item query (#54511)

(cherry picked from commit be2a4b7b2a)

# Conflicts:
#	erpnext/stock/doctype/quality_inspection/quality_inspection.py

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-27 05:50:37 +00:00
MochaMind
23cac0df83 chore: update POT file (#54535) 2026-04-26 18:55:31 +02:00
mergify[bot]
5c0d2cb474 feat: danish_bosnian_address_template (backport #54093) (#54516)
feat: danish_bosnian_address_template (#54093)

(cherry picked from commit e517eeaaa2)

Co-authored-by: mahsem <137205921+mahsem@users.noreply.github.com>
2026-04-26 21:06:52 +05:30
mergify[bot]
cabea2f288 fix(stock): set incoming rate as zero for outward sle (backport #54514) (#54533)
fix(stock): set incoming rate as zero for outward sle

(cherry picked from commit ce37530e70)

Co-authored-by: Sudharsanan11 <sudharsananashok1975@gmail.com>
2026-04-26 20:24:52 +05:30
rohitwaghchaure
4c95daaca5 Merge pull request #54531 from frappe/mergify/bp/version-16-hotfix/pr-54530
fix(stock): show item code in serial and batch selector dialog (backport #54530)
2026-04-26 10:25:51 +05:30
Sudharsanan11
62bbe28a72 fix(stock): add stock entry in batch master connection
(cherry picked from commit fee5bcadb2)
2026-04-26 04:35:42 +00:00
Sudharsanan11
85d1eb8379 fix(stock): show item code in serial and batch selector dialog
(cherry picked from commit f572bc51e1)
2026-04-26 04:35:42 +00:00
mergify[bot]
8de9ac4e34 refactor(UX): selling settings form (backport #54412) (#54527) 2026-04-25 18:01:07 +05:30
mergify[bot]
f3996fb971 fix(PCV): set correct filters of from_date and to_date on General Ledger Report on clicking Ledger button (backport #54522) (#54524)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(PCV): set correct filters of `from_date` and `to_date` on General Ledger Report on clicking `Ledger` button (#54522)
2026-04-25 00:08:27 +05:30
mergify[bot]
764c775e19 refactor: tax witholding report (backport #54449) (backport #54477) (#54519)
* refactor: use consistent report column names

(cherry picked from commit 6dca96b423)
(cherry picked from commit 9276cd7343)

* refactor: how data is built

(cherry picked from commit c3e7f7f02f)
(cherry picked from commit be0e58fb23)

* refactor: better label for entity type

(cherry picked from commit 53666974a3)
(cherry picked from commit fffaf834fd)

* refactor: updated key for withholding_date

(cherry picked from commit 07b023a934)
(cherry picked from commit e6cfdb8e4d)

* test: None is better than zero, as no values exist

(cherry picked from commit b5550f747e)
(cherry picked from commit 40466be9ef)

* refactor: make report extensible by regional apps

(cherry picked from commit f0ea20e579)
(cherry picked from commit 6392126ca5)

* fix: add party type for dynamic link support

(cherry picked from commit b925469c4d)
(cherry picked from commit c6d4802857)

---------

Co-authored-by: Smit Vora <smitvora203@gmail.com>
2026-04-24 14:39:42 +00:00
Frappe PR Bot
66ec6a4d20 chore(release): Bumped to Version 16.15.1
## [16.15.1](https://github.com/frappe/erpnext/compare/v16.15.0...v16.15.1) (2026-04-24)

### Bug Fixes

* preserve inventory dimensions when raw materials are reset (backport [#54440](https://github.com/frappe/erpnext/issues/54440)) (backport [#54493](https://github.com/frappe/erpnext/issues/54493)) ([#54513](https://github.com/frappe/erpnext/issues/54513)) ([610735d](610735d1c5))
2026-04-24 12:35:07 +00:00
mergify[bot]
610735d1c5 fix: preserve inventory dimensions when raw materials are reset (backport #54440) (backport #54493) (#54513)
* fix: preserve inventory dimensions when raw materials are reset (backport #54440) (#54493)

fix: preserve inventory dimensions when raw materials are reset (#54440)

* fix: preserve inventory dimensions when raw materials are reset

* test: add test case

(cherry picked from commit 0e20e35842)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
(cherry picked from commit 456e99b352)

# Conflicts:
#	erpnext/patches.txt

* chore: resolve conflicts

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-24 12:33:34 +00:00
Khushi Rawat
8a5fa64e1d Merge pull request #54504 from frappe/mergify/bp/version-16-hotfix/pr-53314
fix: skip budget validation when cancelling GL entries (backport #53314)
2026-04-24 17:39:05 +05:30
Smit Vora
aecf2c1c0e Merge pull request #54505 from frappe/mergify/bp/version-16-hotfix/pr-54476
fix: ensure tax withholding entries respect date range of category (backport #54476)
2026-04-24 13:39:54 +05:30
ljain112
719d982a07 fix: ensure tax withholding entries respect date range of category
(cherry picked from commit 9ead8d4e3f)
2026-04-24 07:48:53 +00:00
nareshkannasln
1b146738c4 fix: skip BudgetValidation when cancelling GL entries
(cherry picked from commit fa34ebea94)
2026-04-24 06:45:16 +00:00
mergify[bot]
c4010b0581 ci: fix timezone for python mariadb tests (backport #54464) (#54465)
ci: fix timezone for python mariadb tests (#54464)

(cherry picked from commit 0d2da6d86c)

Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-23 22:31:16 +00:00
mergify[bot]
456e99b352 fix: preserve inventory dimensions when raw materials are reset (backport #54440) (#54493)
fix: preserve inventory dimensions when raw materials are reset (#54440)

* fix: preserve inventory dimensions when raw materials are reset

* test: add test case

(cherry picked from commit 0e20e35842)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-23 17:37:04 +00:00
mergify[bot]
2a244d162b fix(edi): restrict Code List imports to files and trusted backend URLs (backport #54137) (#54266)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix(edi): restrict Code List imports to files and trusted backend URLs (#54137)
fix(edi): hardcode "Code List" DocType in importer (#54488)
2026-04-23 15:36:35 +00:00
mergify[bot]
ddc9ea16cc ci: test correctness pattern (backport #54186) (#54473)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-04-23 13:29:15 +00:00
mergify[bot]
f7b87ed0e3 fix(stock): show available qty in warehouse link field (backport #54474) (#54484)
fix(stock): show available qty in warehouse link field (#54474)

(cherry picked from commit ab19b16fe2)

Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
2026-04-23 18:19:28 +05:30
Smit Vora
01b22254e7 Merge pull request #54486 from frappe/mergify/bp/version-16-hotfix/pr-53190 2026-04-23 17:54:28 +05:30
Smit Vora
df3fbeded2 feat: Add XLSX styling support to custom financial report templates (backport #52612) (#54485)
Co-authored-by: Abdeali Chharchhodawala <99460106+Abdeali099@users.noreply.github.com>
2026-04-23 17:50:52 +05:30
Abdeali Chharchhodawala
96bab08ae0 feat: enhance account category with root type (#53190)
(cherry picked from commit f6639db0e9)
2026-04-23 12:05:07 +00:00
Abdeali Chharchhodawala
055ff56ce4 feat: Add XLSX styling support to custom financial report templates (#52612)
(cherry picked from commit c35221852a)
2026-04-23 11:46:01 +00:00
Smit Vora
4f8184ec70 Merge pull request #54477 from frappe/mergify/bp/version-16-hotfix/pr-54449 2026-04-23 15:18:46 +05:30
Smit Vora
c6d4802857 fix: add party type for dynamic link support
(cherry picked from commit b925469c4d)
2026-04-23 09:27:53 +00:00
Smit Vora
6392126ca5 refactor: make report extensible by regional apps
(cherry picked from commit f0ea20e579)
2026-04-23 09:27:53 +00:00
Smit Vora
40466be9ef test: None is better than zero, as no values exist
(cherry picked from commit b5550f747e)
2026-04-23 09:27:53 +00:00
Smit Vora
e6cfdb8e4d refactor: updated key for withholding_date
(cherry picked from commit 07b023a934)
2026-04-23 09:27:53 +00:00
Smit Vora
fffaf834fd refactor: better label for entity type
(cherry picked from commit 53666974a3)
2026-04-23 09:27:52 +00:00
Smit Vora
be0e58fb23 refactor: how data is built
(cherry picked from commit c3e7f7f02f)
2026-04-23 09:27:52 +00:00
Smit Vora
9276cd7343 refactor: use consistent report column names
(cherry picked from commit 6dca96b423)
2026-04-23 09:27:52 +00:00
rohitwaghchaure
dd2763aabc Merge pull request #54472 from frappe/mergify/bp/version-16-hotfix/pr-54471
fix: delivery schedule in the sales order (backport #54471)
2026-04-22 22:11:01 +05:30
Rohit Waghchaure
386f49978e fix: delivery schedule in the sales order
(cherry picked from commit 435db260ee)
2026-04-22 16:33:12 +00:00
mergify[bot]
090aab33fb fix: py error on stock ageing report (backport #54467) (#54469)
fix: py error on stock ageing report (#54467)

(cherry picked from commit f5357c233d)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-22 14:41:13 +00:00
ruthra kumar
99bc2c174b Merge pull request #54463 from frappe/mergify/bp/version-16-hotfix/pr-54447
refactor(test): remove explicit sql delete calls (backport #54447)
2026-04-22 11:34:10 +05:30
ruthra kumar
91a748d9bf refactor(test): remove explicit sql delete calls
(cherry picked from commit b16dd3f2dd)
2026-04-22 05:43:48 +00:00
Frappe PR Bot
c99b9e1b64 chore(release): Bumped to Version 16.15.0
# [16.15.0](https://github.com/frappe/erpnext/compare/v16.14.0...v16.15.0) (2026-04-22)

### Bug Fixes

* **accounts:** fetch project name from payment entry to journal entry (backport [#54307](https://github.com/frappe/erpnext/issues/54307)) ([#54453](https://github.com/frappe/erpnext/issues/54453)) ([62a9a76](62a9a761b7))
* add portal user ownership check to supplier quotation (backport [#54298](https://github.com/frappe/erpnext/issues/54298)) ([#54300](https://github.com/frappe/erpnext/issues/54300)) ([d7da5b0](d7da5b047d))
* add project filter to accounts payable and receivable reports (backport [#54344](https://github.com/frappe/erpnext/issues/54344)) ([#54442](https://github.com/frappe/erpnext/issues/54442)) ([57cd2a0](57cd2a06e8))
* append row level user remarks in gl map ([aa359ad](aa359aded4))
* changed qty validation from qty field to stock_qty (backport [#54352](https://github.com/frappe/erpnext/issues/54352)) ([#54357](https://github.com/frappe/erpnext/issues/54357)) ([fa76e8a](fa76e8ac7f))
* clear conditions table when calculate_based_on is set to Fixed ([7849733](78497336c7))
* clear shipping rule conditions for fixed shipping rule ([319d769](319d769c6f))
* **dashboard-trends:** set default fiscal year and company before val… (backport [#54339](https://github.com/frappe/erpnext/issues/54339)) ([#54400](https://github.com/frappe/erpnext/issues/54400)) ([b1825c0](b1825c0cbe))
* default company perms for HR manager ([47abaf7](47abaf70b2))
* default perm for HR manager & HR user ([95213fb](95213fb9b8))
* default perm for HR manager & HR user ([a7b1fec](a7b1fec21d))
* default permission for HR manager role ([534891a](534891aac4))
* default permission for HR User role ([0d6d64f](0d6d64ff05))
* Disallow negative rates in Purchase invoice (backport [#54254](https://github.com/frappe/erpnext/issues/54254)) ([#54393](https://github.com/frappe/erpnext/issues/54393)) ([cac9073](cac907383b))
* dropship logic should come above non stock logic in gross profit… (backport [#54383](https://github.com/frappe/erpnext/issues/54383)) ([#54385](https://github.com/frappe/erpnext/issues/54385)) ([78aaf6c](78aaf6c7e8))
* fetch item tax template from item group when creating item (backport [#54258](https://github.com/frappe/erpnext/issues/54258)) ([#54368](https://github.com/frappe/erpnext/issues/54368)) ([3914d5d](3914d5d1b7))
* hide operations field in bom creator if phantom (backport [#54336](https://github.com/frappe/erpnext/issues/54336)) ([#54337](https://github.com/frappe/erpnext/issues/54337)) ([b252ad4](b252ad49b7))
* make Target Warehouse mandatory on UI ([46f5de0](46f5de0b1c))
* **manufacturing:** handle empty list in query builder ([d2cc549](d2cc549696))
* move make_dimension_in_accounting_doctypes from after_insert to on_update ([f287edd](f287edd8c2))
* negative batch report showing same batch-warehouse multiple times ([493f36b](493f36b3ce))
* non-collapsible in customer quick entry ([101f68c](101f68c8e8))
* **pos_invoice_item:** fetch `grant_commission` from `item_code` (backport [#54413](https://github.com/frappe/erpnext/issues/54413)) ([#54418](https://github.com/frappe/erpnext/issues/54418)) ([dd6d4d1](dd6d4d1910))
* **purchase_register:** filter tax rows by parenttype in invoice tax map query (backport [#54272](https://github.com/frappe/erpnext/issues/54272)) ([#54444](https://github.com/frappe/erpnext/issues/54444)) ([01aff64](01aff6492c))
* recalculate operating costs if workstation type is changed (backport [#54390](https://github.com/frappe/erpnext/issues/54390)) ([#54398](https://github.com/frappe/erpnext/issues/54398)) ([cfcba1f](cfcba1fcf2))
* remove unwanted perm for HR user role ([4940aeb](4940aeb712))
* reset base_rounded_total when rounded_total resets (backport [#54241](https://github.com/frappe/erpnext/issues/54241)) ([#54304](https://github.com/frappe/erpnext/issues/54304)) ([45052ce](45052ce8a7))
* resolve conflict ([9e6300b](9e6300bf76))
* sales order is not valid when creating WO from MR from PP (backport [#54435](https://github.com/frappe/erpnext/issues/54435)) ([#54436](https://github.com/frappe/erpnext/issues/54436)) ([5397b7d](5397b7da25))
* Table row in dialog should not have delete row option ([5916e57](5916e570af))
* **taxes_and_totals:** apply conversion_rate to taxable_amount in get_itemised_tax ([d506e57](d506e574d2))
* **test:** missing repost allowed defaults ([d49c343](d49c34389b))
* use qty instead of stock qty dropship gross profit report (backport [#54389](https://github.com/frappe/erpnext/issues/54389)) ([#54391](https://github.com/frappe/erpnext/issues/54391)) ([7556550](7556550158))
* validate south africa company in vat audit report (backport [#54030](https://github.com/frappe/erpnext/issues/54030)) ([#54394](https://github.com/frappe/erpnext/issues/54394)) ([aa2cba9](aa2cba9780))
* zero valuation rate popup on SI (backport [#54376](https://github.com/frappe/erpnext/issues/54376)) ([#54377](https://github.com/frappe/erpnext/issues/54377)) ([104eac2](104eac21e8))

### Features

* add option to create production plan from sales order (backport [#53662](https://github.com/frappe/erpnext/issues/53662)) ([#54323](https://github.com/frappe/erpnext/issues/54323)) ([b487f69](b487f69b59))
* add support for 'not applicable' tax in item tax templates ([#50898](https://github.com/frappe/erpnext/issues/50898)) ([52a4ca9](52a4ca9c41))
* backflush based on in BOM ([2c73e37](2c73e37f80))
* make fg phantom-able in bom creator (backport [#54332](https://github.com/frappe/erpnext/issues/54332)) ([#54333](https://github.com/frappe/erpnext/issues/54333)) ([10dbfd3](10dbfd310f))
* use single remark field with custom remark toggle ([27c5dab](27c5dab7e4))
2026-04-22 00:21:02 +00:00
diptanilsaha
a9747213f5 Merge pull request #54437 from frappe/version-16-hotfix 2026-04-22 05:49:31 +05:30
mergify[bot]
5923618df3 refactor(test): move contact and address creation to bootstrap (backport #54406) (#54410)
Co-authored-by: ruthra kumar <ruthra@erpnext.com>
2026-04-22 00:24:36 +05:30
MochaMind
193a44f298 chore: update POT file (#54401) 2026-04-22 00:16:52 +05:30
Khushi Rawat
d9731d7c72 Merge pull request #54427 from frappe/mergify/bp/version-16-hotfix/pr-54131
feat: use single remark field with custom remark toggle (backport #54131)
2026-04-22 00:05:24 +05:30
mergify[bot]
457adcee95 refactor: fix test cases in tax withholding details report (backport #54422) (#54445)
Co-authored-by: ljain112 <ljain112@gmail.com>
2026-04-21 23:58:57 +05:30
mergify[bot]
01aff6492c fix(purchase_register): filter tax rows by parenttype in invoice tax map query (backport #54272) (#54444)
fix(purchase_register): filter tax rows by parenttype in invoice tax map query

(cherry picked from commit 3aeb7d6b01)

Co-authored-by: ljain112 <ljain112@gmail.com>
2026-04-21 23:58:25 +05:30
mergify[bot]
57cd2a06e8 fix: add project filter to accounts payable and receivable reports (backport #54344) (#54442)
Co-authored-by: ljain112 <ljain112@gmail.com>
2026-04-21 23:56:35 +05:30
mergify[bot]
62a9a761b7 fix(accounts): fetch project name from payment entry to journal entry (backport #54307) (#54453)
Co-authored-by: sarathibalamurugan <sarathigreen4@gmail.com>
2026-04-21 23:54:56 +05:30
Khushi Rawat
9e6300bf76 fix: resolve conflict 2026-04-21 16:15:21 +05:30
mergify[bot]
5397b7da25 fix: sales order is not valid when creating WO from MR from PP (backport #54435) (#54436)
fix: sales order is not valid when creating WO from MR from PP (#54435)

(cherry picked from commit e65b9fc2ae)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-21 15:44:26 +05:30
mergify[bot]
37d080bdb4 refactor: Sales Partner Commission Summary and Sales Partner Transaction Summary report (backport #54268) (#54431)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-21 09:21:10 +05:30
khushi8112
aa359aded4 fix: append row level user remarks in gl map
(cherry picked from commit 84e5272f5d)
2026-04-20 19:16:59 +00:00
khushi8112
27c5dab7e4 feat: use single remark field with custom remark toggle
(cherry picked from commit 697f521e14)

# Conflicts:
#	erpnext/accounts/doctype/journal_entry/journal_entry.json
2026-04-20 19:16:58 +00:00
Ravibharathi
4e05277695 Merge pull request #54424 from frappe/mergify/bp/version-16-hotfix/pr-54415
fix: clear conditions table when calculate_based_on is set to Fixed (backport #54415)
2026-04-20 19:44:19 +05:30
ravibharathi656
319d769c6f fix: clear shipping rule conditions for fixed shipping rule
(cherry picked from commit d6bb0ae093)
2026-04-20 13:53:25 +00:00
sarathibalamurugan
78497336c7 fix: clear conditions table when calculate_based_on is set to Fixed
(cherry picked from commit d73920be12)
2026-04-20 13:53:25 +00:00
rohitwaghchaure
d5ea039e07 Merge pull request #54414 from frappe/mergify/bp/version-16-hotfix/pr-54350
feat: backflush based on in BOM (backport #54350)
2026-04-20 17:57:33 +05:30
mergify[bot]
4bb30a9157 test(BootStrapTestData): create sales_partner test data while bootstrapping (backport #54416) (#54421)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-20 12:03:23 +00:00
mergify[bot]
dd6d4d1910 fix(pos_invoice_item): fetch grant_commission from item_code (backport #54413) (#54418)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(pos_invoice_item): fetch `grant_commission` from `item_code` (#54413)
2026-04-20 11:47:15 +00:00
Rohit Waghchaure
2c73e37f80 feat: backflush based on in BOM
(cherry picked from commit 877d99c5a5)
2026-04-20 11:07:19 +00:00
Raheel Khan
3bee79b90d Merge pull request #54407 from frappe/mergify/bp/version-16-hotfix/pr-53756
fix(hrms): default permission for HR roles (backport #53756)
2026-04-20 12:21:31 +05:30
iamkhanraheel
47abaf70b2 fix: default company perms for HR manager
(cherry picked from commit 2018a90ad8)
2026-04-20 05:50:43 +00:00
iamkhanraheel
4940aeb712 fix: remove unwanted perm for HR user role
(cherry picked from commit d26cd69fe5)
2026-04-20 05:50:42 +00:00
iamkhanraheel
95213fb9b8 fix: default perm for HR manager & HR user
(cherry picked from commit 41103a0622)
2026-04-20 05:50:42 +00:00
iamkhanraheel
a7b1fec21d fix: default perm for HR manager & HR user
(cherry picked from commit f02b3b6166)
2026-04-20 05:50:42 +00:00
iamkhanraheel
534891aac4 fix: default permission for HR manager role
(cherry picked from commit 5ec66169a7)
2026-04-20 05:50:42 +00:00
iamkhanraheel
0d6d64ff05 fix: default permission for HR User role
(cherry picked from commit 7b0bfe76cc)
2026-04-20 05:50:41 +00:00
mergify[bot]
fa76e8ac7f fix: changed qty validation from qty field to stock_qty (backport #54352) (#54357)
fix: changed qty validation from qty field to stock_qty (#54352)

(cherry picked from commit ba01d66c24)

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-04-20 10:54:04 +05:30
ruthra kumar
abed348121 Merge pull request #54366 from frappe/mergify/bp/version-16-hotfix/pr-50898
feat: add support for 'not applicable' tax in item tax templates (backport #50898)
2026-04-20 10:17:00 +05:30
mergify[bot]
b1825c0cbe fix(dashboard-trends): set default fiscal year and company before val… (backport #54339) (#54400)
* fix(dashboard-trends): set default fiscal year and company before val… (#54339)

* fix(dashboard-trends): set default fiscal year and company before validating filters Ensure  and  are populated with default values

* fix(dashboard-trends): ensure fiscal_year and company are properly set before validation to avoid empty filter issues

* Update erpnext/controllers/trends.py

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
(cherry picked from commit d61b5fd5f6)

# Conflicts:
#	erpnext/controllers/trends.py

* chore: fix conflicts

---------

Co-authored-by: Ahmed AbuKhatwa <82771130+AhmedAbokhatwa@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-19 09:52:45 +00:00
mergify[bot]
cfcba1fcf2 fix: recalculate operating costs if workstation type is changed (backport #54390) (#54398)
fix: recalculate operating costs if workstation type is changed (#54390)

* fix: recalculate operating costs if workstation type is changed

* fix: do not overwrite op costs on every save

(cherry picked from commit 28f3429a54)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-19 08:06:09 +00:00
mergify[bot]
d542a72da5 Fix : None handling in pricing rule free item quantity calculation (backport #54375) (#54396)
Fix : None handling in pricing rule free item quantity calculation (#54375)

* fix(pricing_rule): handle None qty in transaction_qty calculation

* Update erpnext/accounts/doctype/pricing_rule/utils.py

---------



(cherry picked from commit 82438d6c72)

Co-authored-by: Jaganath-Tridots <jaganath@tridotstech.com>
Co-authored-by: Jagan <jagan@DESKTOP-HPDMQ06.localdomain>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-19 08:02:03 +00:00
mergify[bot]
aa2cba9780 fix: validate south africa company in vat audit report (backport #54030) (#54394)
fix: validate south africa company in vat audit report (#54030)

* fix: validate south africa company in vat audit report

* fix: use qb to get invoice data

* fix: validate company region in south africa vat settings

(cherry picked from commit 1c65cc1088)

Co-authored-by: Ravibharathi <131471282+ravibharathi656@users.noreply.github.com>
2026-04-19 07:57:13 +00:00
mergify[bot]
cac907383b fix: Disallow negative rates in Purchase invoice (backport #54254) (#54393)
fix: Disallow negative rates in Purchase invoice (#54254)

(cherry picked from commit 23768ae0a5)

Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
2026-04-19 07:46:21 +00:00
mergify[bot]
7556550158 fix: use qty instead of stock qty dropship gross profit report (backport #54389) (#54391)
fix: use qty instead of stock qty dropship gross profit report (#54389)

(cherry picked from commit d6b379b936)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-19 12:52:15 +05:30
mergify[bot]
78aaf6c7e8 fix: dropship logic should come above non stock logic in gross profit… (backport #54383) (#54385)
fix: dropship logic should come above non stock logic in gross profit… (#54383)

fix: dropship logic should come above non stock logic in gross profit report
(cherry picked from commit 40bcaa7bc3)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-18 16:37:43 +00:00
mergify[bot]
104eac21e8 fix: zero valuation rate popup on SI (backport #54376) (#54377)
fix: zero valuation rate popup on SI (#54376)

(cherry picked from commit 3ef6c24f07)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-18 12:05:36 +00:00
mergify[bot]
3914d5d1b7 fix: fetch item tax template from item group when creating item (backport #54258) (#54368)
fix: fetch item tax template from item group when creating item (#54258)

(cherry picked from commit b93f2350ee)

Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
2026-04-18 06:49:44 +00:00
Lakshit Jain
52a4ca9c41 feat: add support for 'not applicable' tax in item tax templates (#50898)
* feat: add support for 'not applicable' tax in item tax templates

* refactor: remove unused imports

* fix: import NOT_APPLICABLE_TAX in get_item_tax_map function

* fix: add item wise tax details for not applicable taxes

* test: added test case for `not_applicable`

* fix: do not create item wise tax details for not applicable tax

* fix: ensure tax rate is set to 0 for not applicable tax rows

* refactor: changes as per review

* test: update selling settings

* test: correct settings

* fix: return both net and current tax amounts for not applicable tax

(cherry picked from commit 453fe376ab)
2026-04-18 06:05:36 +00:00
rohitwaghchaure
de66fd0c58 Merge pull request #54361 from frappe/mergify/bp/version-16-hotfix/pr-54355
fix(manufacturing): handle empty list in query builder (backport #54355)
2026-04-17 21:43:14 +05:30
rohitwaghchaure
450b4c2f5f Merge pull request #54360 from frappe/mergify/bp/version-16-hotfix/pr-54354
fix: negative batch report showing same batch-warehouse multiple times (backport #54354)
2026-04-17 21:32:28 +05:30
Pandiyan37
d2cc549696 fix(manufacturing): handle empty list in query builder
(cherry picked from commit 9e5d94c1e6)
2026-04-17 15:52:18 +00:00
Rohit Waghchaure
493f36b3ce fix: negative batch report showing same batch-warehouse multiple times
(cherry picked from commit 700572980d)
2026-04-17 15:42:03 +00:00
Nishka Gosalia
cd605d35c5 Merge pull request #54348 from frappe/mergify/bp/version-16-hotfix/pr-54074
fix: Table row in dialog should not have delete row option (backport #54074)
2026-04-17 17:07:40 +05:30
nishkagosalia
5916e570af fix: Table row in dialog should not have delete row option
(cherry picked from commit eb89903dec)
2026-04-17 10:40:26 +00:00
Nishka Gosalia
4d300f7d34 Merge pull request #54347 from frappe/mergify/bp/version-16-hotfix/pr-54345 2026-04-17 16:08:41 +05:30
nishkagosalia
36cc39ddc6 refactor(UX): Batch Form Cleanup
(cherry picked from commit de747fe625)
2026-04-17 09:44:19 +00:00
rohitwaghchaure
afd25508d6 Merge pull request #54343 from frappe/mergify/bp/version-16-hotfix/pr-54342
fix: make Target Warehouse mandatory on UI for WO (backport #54342)
2026-04-17 13:27:35 +05:30
Rohit Waghchaure
46f5de0b1c fix: make Target Warehouse mandatory on UI
(cherry picked from commit 2a8267e10a)
2026-04-17 07:54:10 +00:00
mergify[bot]
b252ad49b7 fix: hide operations field in bom creator if phantom (backport #54336) (#54337) 2026-04-16 16:11:45 +00:00
mergify[bot]
10dbfd310f feat: make fg phantom-able in bom creator (backport #54332) (#54333) 2026-04-16 19:17:51 +05:30
ruthra kumar
07bcaab33b Merge pull request #54328 from frappe/mergify/bp/version-16-hotfix/pr-54327
fix(test): missing repost allowed defaults (backport #54327)
2026-04-16 17:20:04 +05:30
ruthra kumar
9d969d5af5 Merge pull request #54321 from frappe/mergify/bp/version-16-hotfix/pr-54301
refactor(ux): merge repost settings to accounts settings (backport #54301)
2026-04-16 17:19:48 +05:30
ruthra kumar
2e7c4776d4 refactor: delete redundent repost setting
(cherry picked from commit 6a04c159ca)
2026-04-16 16:55:38 +05:30
ruthra kumar
5a2933df8f refactor: limit reposting to only supported doctypes
(cherry picked from commit 940d3cfe0a)
2026-04-16 16:55:38 +05:30
ruthra kumar
fa5e4dee17 refactor: remove redundant field from filter
(cherry picked from commit ece85c770f)
2026-04-16 16:55:38 +05:30
ruthra kumar
3ba400a02b refactor(ux): better error message
(cherry picked from commit 3093409933)
2026-04-16 16:55:38 +05:30
ruthra kumar
5c064331cb refactor(test): use new source for repost setting
(cherry picked from commit b8207d5ed1)
2026-04-16 16:55:38 +05:30
ruthra kumar
151864079b refactor: move allowed doctypes to accounts settings
- dropped 'allowed' field

(cherry picked from commit d5c58277cb)
2026-04-16 16:55:37 +05:30
ruthra kumar
f785f36ad6 refactor: merge reposting settings to accounts settings
(cherry picked from commit 89ebf48544)
2026-04-16 16:55:26 +05:30
ruthra kumar
d49c34389b fix(test): missing repost allowed defaults
(cherry picked from commit 257865deb2)
2026-04-16 10:33:04 +00:00
mergify[bot]
ead7744f81 refactor: add category field to uom (backport #54290) (#54325)
* refactor: add category field to uom (#54290)

(cherry picked from commit e04a2e6da2)

# Conflicts:
#	erpnext/patches.txt

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-16 10:16:28 +00:00
mergify[bot]
b487f69b59 feat: add option to create production plan from sales order (backport #53662) (#54323)
Co-authored-by: sudarsan2001 <frankel9675@gmail.com>
Co-authored-by: Venkatesh <47534423+venkat102@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-16 15:16:34 +05:30
ruthra kumar
d74e632934 Merge pull request #54318 from frappe/mergify/bp/version-16-hotfix/pr-54172
fix: move make_dimension_in_accounting_doctypes from after_insert to on_update (backport #54172)
2026-04-16 11:29:50 +05:30
ruthra kumar
29ba701432 Merge pull request #54316 from frappe/mergify/bp/version-16-hotfix/pr-52923
fix(taxes_and_totals): apply conversion_rate to taxable_amount in get_itemised_tax (backport #52923)
2026-04-16 11:12:15 +05:30
Shllokkk
f287edd8c2 fix: move make_dimension_in_accounting_doctypes from after_insert to on_update
(cherry picked from commit ee067e6015)
2026-04-16 05:37:36 +00:00
Dharanidharan2813
d506e574d2 fix(taxes_and_totals): apply conversion_rate to taxable_amount in get_itemised_tax
(cherry picked from commit 2e577ed25b)
2026-04-16 05:22:40 +00:00
mergify[bot]
45052ce8a7 fix: reset base_rounded_total when rounded_total resets (backport #54241) (#54304)
* fix: reset base_rounded_total when rounded_total resets

(cherry picked from commit f8d278b733)

# Conflicts:
#	erpnext/controllers/tests/test_taxes_and_totals.py

* chore: spelling mistake

(cherry picked from commit e2ac476587)

* chore: resolve conflicts

---------

Co-authored-by: ljain112 <ljain112@gmail.com>
2026-04-16 10:39:17 +05:30
NaviN
4f9f90738a Merge pull request #54309 from frappe/mergify/bp/version-16-hotfix/pr-54306
fix: non-collapsible in customer quick entry (backport #54306)
2026-04-15 17:32:56 +05:30
PKSowmiya05
101f68c8e8 fix: non-collapsible in customer quick entry
(cherry picked from commit 53e120269d)
2026-04-15 11:56:54 +00:00
ruthra kumar
ffebb86846 refactor(company): don't force set service expense account on save (backport #54275) (#54305)
* refactor(company): don't force set service expense account on save

(cherry picked from commit 927f40b296)

* refactor(test): set dependant value in company master

(cherry picked from commit 299e141cee)

---------

Co-authored-by: ruthra kumar <ruthra@erpnext.com>
2026-04-15 15:55:53 +05:30
ruthra kumar
6cc560a579 refactor(test): set dependant value in company master
(cherry picked from commit 299e141cee)
2026-04-15 10:04:00 +00:00
ruthra kumar
47e78bd4b9 refactor(company): don't force set service expense account on save
(cherry picked from commit 927f40b296)
2026-04-15 10:03:59 +00:00
mergify[bot]
d7da5b047d fix: add portal user ownership check to supplier quotation (backport #54298) (#54300)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: add portal user ownership check to supplier quotation (#54298)
2026-04-15 06:13:11 +00:00
Frappe PR Bot
9312781dcd chore(release): Bumped to Version 16.14.0
# [16.14.0](https://github.com/frappe/erpnext/compare/v16.13.3...v16.14.0) (2026-04-14)

### Bug Fixes

* account change in warehouse (backport [#54182](https://github.com/frappe/erpnext/issues/54182)) ([#54205](https://github.com/frappe/erpnext/issues/54205)) ([b42e239](b42e23993d))
* add closing div tab ([7e5297a](7e5297a305))
* add drop ship logic in gross profit report (backport [#54220](https://github.com/frappe/erpnext/issues/54220)) ([#54277](https://github.com/frappe/erpnext/issues/54277)) ([bd6269b](bd6269b9e7))
* add permission validation when prompting company details for incomplete letterhead data ([f2450ea](f2450eaf60))
* add quotation print format in the list ([bb77018](bb77018f7b))
* banner to enable serial / batch feature ([dea2d21](dea2d21580))
* batch/serial should use parent's posting datetime for naming (backport [#54206](https://github.com/frappe/erpnext/issues/54206)) ([#54209](https://github.com/frappe/erpnext/issues/54209)) ([3bdac5c](3bdac5c30a))
* conflicting issue ([57e458c](57e458cc1e))
* conflicting issue ([29be73c](29be73c256))
* fetch correct expense account for operations in stock entry (backport [#54278](https://github.com/frappe/erpnext/issues/54278)) ([#54281](https://github.com/frappe/erpnext/issues/54281)) ([63ec36a](63ec36a6f9))
* handle multi uom conversion factor for manufacture entry (backport [#54285](https://github.com/frappe/erpnext/issues/54285)) ([#54286](https://github.com/frappe/erpnext/issues/54286)) ([d5143ed](d5143edcce))
* hardcoded precision causing decimal issues ([e361afb](e361afb6bc))
* inventory dimension patch (backport [#54141](https://github.com/frappe/erpnext/issues/54141)) ([#54146](https://github.com/frappe/erpnext/issues/54146)) ([f2b3ade](f2b3adec0f))
* inventory dimension patch (backport [#54147](https://github.com/frappe/erpnext/issues/54147)) ([#54149](https://github.com/frappe/erpnext/issues/54149)) ([943ddff](943ddff6aa))
* inventory dimensions should not be mandatory unnecesarily (backport [#54064](https://github.com/frappe/erpnext/issues/54064)) ([#54134](https://github.com/frappe/erpnext/issues/54134)) ([7b0d34e](7b0d34e979))
* last SLE not updated in the file ([60a1da0](60a1da0a1b))
* make operation mandatory when any sub operation row is added (backport [#54245](https://github.com/frappe/erpnext/issues/54245)) ([#54248](https://github.com/frappe/erpnext/issues/54248)) ([394eb93](394eb93677))
* **manufacturing:** check remaining qty to calculate operating cost (backport [#53983](https://github.com/frappe/erpnext/issues/53983)) ([#54128](https://github.com/frappe/erpnext/issues/54128)) ([856ba24](856ba24194))
* not able to submit the PO (backport [#54257](https://github.com/frappe/erpnext/issues/54257)) ([#54261](https://github.com/frappe/erpnext/issues/54261)) ([9d90fc4](9d90fc4a84))
* preserve asset movement field properties after save ([b7f1677](b7f1677eef))
* quality inspection item code fetch perm issue (backport [#54121](https://github.com/frappe/erpnext/issues/54121)) ([#54127](https://github.com/frappe/erpnext/issues/54127)) ([9d31712](9d317129f4))
* remove unneccessary function for serial no status updation (backport [#54191](https://github.com/frappe/erpnext/issues/54191)) ([#54197](https://github.com/frappe/erpnext/issues/54197)) ([4e828fd](4e828fd897))
* remove unused print format ([f5a9657](f5a9657a91))
* replace raw SQL with qb in get_against_jv to prevent SQL injection ([8f86a28](8f86a2879c))
* **sales invoice:** toggle Get Items From button based on is_return and POS view (backport [#52594](https://github.com/frappe/erpnext/issues/52594)) ([#54139](https://github.com/frappe/erpnext/issues/54139)) ([fe2161e](fe2161ea0c))
* **selling:** enable selling_settings creation through fixtures (backport [#54177](https://github.com/frappe/erpnext/issues/54177)) ([#54215](https://github.com/frappe/erpnext/issues/54215)) ([d2745f3](d2745f3ec9))
* set default posting time in RIV ([1086a72](1086a72373))
* Set remarks blank instead of No remarks in Sales/Purchase Invoices ([a71814a](a71814a483))
* **stock:** ignore delivery note on delivery trip on_cancel trigger (backport [#54120](https://github.com/frappe/erpnext/issues/54120)) ([#54123](https://github.com/frappe/erpnext/issues/54123)) ([864a7fd](864a7fdab5))
* **stock:** remove float precision to fix precision issue (backport [#54284](https://github.com/frappe/erpnext/issues/54284)) ([#54289](https://github.com/frappe/erpnext/issues/54289)) ([6e3549d](6e3549d185))
* **stock:** update bin to zero when no previous sle exists (backport [#54236](https://github.com/frappe/erpnext/issues/54236)) ([#54264](https://github.com/frappe/erpnext/issues/54264)) ([2c292f4](2c292f4770))
* **test:** Remove usage of No remark as remark in tests ([6993255](699325506f))
* timer not showing in job card (backport [#53839](https://github.com/frappe/erpnext/issues/53839)) ([#54212](https://github.com/frappe/erpnext/issues/54212)) ([7d8f59e](7d8f59eb0a))
* update return value in workstation list view indicator (backport [#54198](https://github.com/frappe/erpnext/issues/54198)) ([#54201](https://github.com/frappe/erpnext/issues/54201)) ([22774fd](22774fd810))
* update_nsm only in warehouse creation ([#54165](https://github.com/frappe/erpnext/issues/54165)) ([abb896e](abb896ecf1))
* wrong operation time calculation (backport [#53796](https://github.com/frappe/erpnext/issues/53796)) ([#54274](https://github.com/frappe/erpnext/issues/54274)) ([d0bff47](d0bff47272))

### Features

* Allowing operation level quality inspection check in BOM (backport [#53859](https://github.com/frappe/erpnext/issues/53859)) ([#54144](https://github.com/frappe/erpnext/issues/54144)) ([233dc7c](233dc7c07b))
* default print format for Quotation ([a8769bf](a8769bfb77))
2026-04-14 18:28:38 +00:00
diptanilsaha
e65596fc0f Merge pull request #54283 from frappe/version-16-hotfix 2026-04-14 23:57:09 +05:30
rohitwaghchaure
bd50a0f318 Merge pull request #54294 from frappe/mergify/bp/version-16-hotfix/pr-54279
fix: banner to enable serial / batch feature (backport #54279)
2026-04-14 23:37:38 +05:30
Rohit Waghchaure
dea2d21580 fix: banner to enable serial / batch feature
(cherry picked from commit 08e8cc8575)
2026-04-14 17:45:19 +00:00
mergify[bot]
2353bcc3fc Revert "fix: sync paid and received amount" (backport #54238) (#54293)
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com>
fix: sync paid and received amount" (#54238)
2026-04-14 22:27:15 +05:30
mergify[bot]
6e3549d185 fix(stock): remove float precision to fix precision issue (backport #54284) (#54289)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): remove float precision to fix precision issue (#54284)
2026-04-14 11:36:24 +00:00
mergify[bot]
d5143edcce fix: handle multi uom conversion factor for manufacture entry (backport #54285) (#54286)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: handle multi uom conversion factor for manufacture entry (#54285)
2026-04-14 16:22:14 +05:30
mergify[bot]
63ec36a6f9 fix: fetch correct expense account for operations in stock entry (backport #54278) (#54281)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: fetch correct expense account for operations in stock entry (#54278)
2026-04-14 16:08:21 +05:30
mergify[bot]
bd6269b9e7 fix: add drop ship logic in gross profit report (backport #54220) (#54277)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: add drop ship logic in gross profit report (#54220)
2026-04-14 09:59:16 +00:00
mergify[bot]
d0bff47272 fix: wrong operation time calculation (backport #53796) (#54274)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: wrong operation time calculation (#53796)
2026-04-14 09:35:00 +00:00
mergify[bot]
9d90fc4a84 fix: not able to submit the PO (backport #54257) (#54261)
Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2026-04-13 21:44:12 +05:30
mergify[bot]
2c292f4770 fix(stock): update bin to zero when no previous sle exists (backport #54236) (#54264)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): update bin to zero when no previous sle exists (#54236)
2026-04-13 15:57:31 +00:00
mergify[bot]
394eb93677 fix: make operation mandatory when any sub operation row is added (backport #54245) (#54248)
Co-authored-by: Sudarshan <73628063+sudarsan2001@users.noreply.github.com>
fix: make operation mandatory when any sub operation row is added (#54245)
2026-04-13 21:06:01 +05:30
Khushi Rawat
fbb3ccbc28 Merge pull request #54251 from frappe/mergify/bp/version-16-hotfix/pr-54244
fix: replace raw SQL with qb in get_against_jv to prevent SQL injection (backport #54244)
2026-04-13 16:12:43 +05:30
Nishka Gosalia
708b59b519 Merge pull request #54252 from frappe/mergify/bp/version-16-hotfix/pr-54249 2026-04-13 16:10:39 +05:30
Khushi Rawat
de08a972b6 Merge pull request #53745 from frappe/mergify/bp/version-16-hotfix/pr-53588
feat: default print format for Quotation (backport #53588)
2026-04-13 16:04:20 +05:30
Khushi Rawat
512a35a0ab Merge pull request #54253 from frappe/mergify/bp/version-16-hotfix/pr-54190
fix: add permission validation when prompting company details for incomplete letterhead data (backport #54190)
2026-04-13 15:58:05 +05:30
Khushi Rawat
71a563428d Merge branch 'version-16-hotfix' into mergify/bp/version-16-hotfix/pr-53588 2026-04-13 15:41:39 +05:30
khushi8112
57e458cc1e fix: conflicting issue 2026-04-13 15:30:56 +05:30
khushi8112
f2450eaf60 fix: add permission validation when prompting company details for incomplete letterhead data
(cherry picked from commit 256a258b38)
2026-04-13 09:55:12 +00:00
nishkagosalia
847919bf4e refactor(UX): Stock ledger serial and batch number fields
(cherry picked from commit 3e2b40ad4a)
2026-04-13 09:51:46 +00:00
khushi8112
29be73c256 fix: conflicting issue 2026-04-13 15:21:39 +05:30
khushi8112
8f86a2879c fix: replace raw SQL with qb in get_against_jv to prevent SQL injection
(cherry picked from commit c133f7156d)

# Conflicts:
#	erpnext/accounts/doctype/journal_entry/journal_entry.py
2026-04-13 09:44:19 +00:00
ruthra kumar
eb80a3704a Merge pull request #54239 from frappe/mergify/bp/version-16-hotfix/pr-54237
refactor: boldface for group accounts in financial statements (backport #54237)
2026-04-13 12:02:19 +05:30
ruthra kumar
bfe58b2d68 refactor: boldface for group accounts in financial statements
(cherry picked from commit 545e9e069a)
2026-04-13 06:11:05 +00:00
MochaMind
39848ffb1e chore: update POT file (#54229) 2026-04-12 10:10:15 +00:00
mergify[bot]
d2745f3ec9 fix(selling): enable selling_settings creation through fixtures (backport #54177) (#54215)
Co-authored-by: mgicking-bmi <mgicking@bmi.com>
Fix(selling): enable selling_settings creation through fixtures (#54177)
2026-04-11 05:32:11 +00:00
mergify[bot]
3bdac5c30a fix: batch/serial should use parent's posting datetime for naming (backport #54206) (#54209) 2026-04-11 05:06:40 +00:00
Frappe PR Bot
a1c43ae913 chore(release): Bumped to Version 16.13.3
## [16.13.3](https://github.com/frappe/erpnext/compare/v16.13.2...v16.13.3) (2026-04-11)

### Bug Fixes

* timer not showing in job card (backport [#53839](https://github.com/frappe/erpnext/issues/53839)) (backport [#54212](https://github.com/frappe/erpnext/issues/54212)) ([#54213](https://github.com/frappe/erpnext/issues/54213)) ([93ede5b](93ede5b764))
2026-04-11 05:05:14 +00:00
mergify[bot]
93ede5b764 fix: timer not showing in job card (backport #53839) (backport #54212) (#54213)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
fix: timer not showing in job card (backport #53839) (#54212)
2026-04-11 10:33:45 +05:30
mergify[bot]
7d8f59eb0a fix: timer not showing in job card (backport #53839) (#54212)
Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2026-04-11 10:32:32 +05:30
mergify[bot]
66fdd061e7 Fix(bom): refetch the rate of item when 'source_from_supplier' is updated (backport #54187) (#54208)
Co-authored-by: Sambhav Saxena <76242518+sambhavsaxena@users.noreply.github.com>
Fix(bom): refetch the rate of item when 'source_from_supplier' is updated (#54187)
2026-04-10 23:44:42 +05:30
mergify[bot]
b42e23993d fix: account change in warehouse (backport #54182) (#54205)
Co-authored-by: nishkagosalia <nishka.gosalia@gmail.com>
2026-04-10 20:32:45 +05:30
mergify[bot]
22774fd810 fix: update return value in workstation list view indicator (backport #54198) (#54201)
Co-authored-by: Praveenkumar Dhanasekar <164200710+Praveenku-mar@users.noreply.github.com>
fix: update return value in workstation list view indicator (#54198)
2026-04-10 11:20:49 +00:00
mergify[bot]
4e828fd897 fix: remove unneccessary function for serial no status updation (backport #54191) (#54197)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: remove unneccessary function for serial no status updation (#54191)
2026-04-10 10:58:57 +00:00
Nishka Gosalia
3cf90e804d Merge pull request #54180 from frappe/revert-54171-mergify/bp/version-16-hotfix/pr-54165
fix: update_nsm only in warehouse creation (backport #54165)"
2026-04-09 18:31:39 +05:30
Khushi Rawat
1f5d0c58f2 Merge pull request #54166 from frappe/mergify/bp/version-16-hotfix/pr-54142
fix: Set remarks blank instead of No remarks in Sales/Purchase Invoices (backport #54142)
2026-04-09 18:16:04 +05:30
Nishka Gosalia
720a79588d Revert "fix: update_nsm only in warehouse creation (backport #54165)" 2026-04-09 18:13:39 +05:30
Nishka Gosalia
bc03f2399a Merge pull request #54171 from frappe/mergify/bp/version-16-hotfix/pr-54165
fix: update_nsm only in warehouse creation (backport #54165)
2026-04-09 16:29:24 +05:30
Nishka Gosalia
abb896ecf1 fix: update_nsm only in warehouse creation (#54165)
(cherry picked from commit b0e3fa3979)
2026-04-09 10:28:32 +00:00
Frappe PR Bot
c98ded52b2 chore(release): Bumped to Version 16.13.2
## [16.13.2](https://github.com/frappe/erpnext/compare/v16.13.1...v16.13.2) (2026-04-09)

### Bug Fixes

* set default posting time in RIV ([3ce6dcc](3ce6dcc7a7))
2026-04-09 09:59:33 +00:00
rohitwaghchaure
03474c0589 Merge pull request #54164 from frappe/mergify/bp/version-16/pr-54163
fix: set default posting time in RIV (backport #54161) (backport #54163)
2026-04-09 15:27:59 +05:30
khushi8112
699325506f fix(test): Remove usage of No remark as remark in tests
(cherry picked from commit 56416d18d3)
2026-04-09 09:24:51 +00:00
khushi8112
a71814a483 fix: Set remarks blank instead of No remarks in Sales/Purchase Invoices
(cherry picked from commit 2515bf3aff)
2026-04-09 09:24:50 +00:00
Rohit Waghchaure
3ce6dcc7a7 fix: set default posting time in RIV
(cherry picked from commit a7ece65536)
(cherry picked from commit 1086a72373)
2026-04-09 08:55:10 +00:00
rohitwaghchaure
93def4dd13 Merge pull request #54163 from frappe/mergify/bp/version-16-hotfix/pr-54161
fix: set default posting time in RIV (backport #54161)
2026-04-09 14:24:33 +05:30
Rohit Waghchaure
1086a72373 fix: set default posting time in RIV
(cherry picked from commit a7ece65536)
2026-04-09 08:27:15 +00:00
Aarol D'Souza
379a1da254 Merge pull request #54158 from frappe/mergify/bp/version-16-hotfix/pr-54129
refactor: update reset password method name (backport #54129)
2026-04-09 12:32:54 +05:30
mergify[bot]
6ec64216ce Merge branch 'version-16-hotfix' into mergify/bp/version-16-hotfix/pr-54129 2026-04-09 06:42:41 +00:00
mergify[bot]
fe2161ea0c fix(sales invoice): toggle Get Items From button based on is_return and POS view (backport #52594) (#54139)
Co-authored-by: NaviN <118178330+Navin-S-R@users.noreply.github.com>
Co-authored-by: Navin-S-R <navin@aerele.in>
fix(sales invoice): toggle Get Items From button based on is_return and POS view (#52594)
2026-04-09 11:58:02 +05:30
AarDG10
21cf83b915 refactor: update reset password method name
(cherry picked from commit c4d74483e1)
2026-04-09 06:23:58 +00:00
Frappe PR Bot
62448d98de chore(release): Bumped to Version 16.13.1
## [16.13.1](https://github.com/frappe/erpnext/compare/v16.13.0...v16.13.1) (2026-04-09)

### Bug Fixes

* last SLE not updated in the file ([96446ed](96446ed78d))
2026-04-09 04:50:03 +00:00
rohitwaghchaure
3eb58b8d36 Merge pull request #54152 from frappe/mergify/bp/version-16/pr-54151
fix: last SLE not updated in the file (backport #54132) (backport #54151)
2026-04-09 10:18:32 +05:30
mergify[bot]
943ddff6aa fix: inventory dimension patch (backport #54147) (#54149)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: inventory dimension patch (#54147)
2026-04-09 09:46:08 +05:30
Rohit Waghchaure
96446ed78d fix: last SLE not updated in the file
(cherry picked from commit 38ed425ee2)
(cherry picked from commit 60a1da0a1b)
2026-04-09 03:38:10 +00:00
rohitwaghchaure
5866fc6cb4 Merge pull request #54151 from frappe/mergify/bp/version-16-hotfix/pr-54132
fix: last SLE not updated in the file (backport #54132)
2026-04-09 09:07:02 +05:30
Rohit Waghchaure
60a1da0a1b fix: last SLE not updated in the file
(cherry picked from commit 38ed425ee2)
2026-04-09 02:53:27 +00:00
mergify[bot]
f2b3adec0f fix: inventory dimension patch (backport #54141) (#54146)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: inventory dimension patch (#54141)
2026-04-09 02:09:46 +00:00
mergify[bot]
233dc7c07b feat: Allowing operation level quality inspection check in BOM (backport #53859) (#54144)
Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-09 02:02:35 +00:00
mergify[bot]
526c8d0418 refactor(lost_opportunity_report): replaced raw_sql with query builder (backport #54136) (#54140)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-08 18:30:35 +00:00
mergify[bot]
7b0d34e979 fix: inventory dimensions should not be mandatory unnecesarily (backport #54064) (#54134)
* fix: inventory dimensions should not be mandatory unnecesarily (#54064)

(cherry picked from commit 6e44b8913e)

# Conflicts:
#	erpnext/patches.txt

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-04-08 14:43:01 +00:00
mergify[bot]
856ba24194 fix(manufacturing): check remaining qty to calculate operating cost (backport #53983) (#54128)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(manufacturing): check remaining qty to calculate operating cost (#53983)
2026-04-08 12:15:28 +00:00
mergify[bot]
9d317129f4 fix: quality inspection item code fetch perm issue (backport #54121) (#54127)
Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: quality inspection item code fetch perm issue (#54121)
2026-04-08 12:14:41 +00:00
mergify[bot]
864a7fdab5 fix(stock): ignore delivery note on delivery trip on_cancel trigger (backport #54120) (#54123)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): ignore delivery note on delivery trip on_cancel trigger (#54120)
2026-04-08 17:18:35 +05:30
rohitwaghchaure
0bdb7e7894 Merge pull request #54119 from frappe/mergify/bp/version-16-hotfix/pr-54102
fix: hardcoded precision causing decimal issues (backport #54102)
2026-04-08 14:04:23 +05:30
Rohit Waghchaure
e361afb6bc fix: hardcoded precision causing decimal issues
(cherry picked from commit 90fd6f2e40)
2026-04-08 06:50:17 +00:00
Khushi Rawat
7b154c3069 Merge pull request #54117 from frappe/mergify/bp/version-16-hotfix/pr-54103
fix: preserve asset movement field properties after save (backport #54103)
2026-04-08 12:15:55 +05:30
ravibharathi656
b7f1677eef fix: preserve asset movement field properties after save
(cherry picked from commit 4a004a2a82)
2026-04-08 06:28:27 +00:00
Frappe PR Bot
1134e25bb6 chore(release): Bumped to Version 16.13.0
# [16.13.0](https://github.com/frappe/erpnext/compare/v16.12.0...v16.13.0) (2026-04-07)

### Bug Fixes

* add support to fetch items based on manufacture stock entry; fix how it's done from work order ([4232640](4232640a8b))
* add tax_id handling in Tax Withholding Entry (backport [#53598](https://github.com/frappe/erpnext/issues/53598)) ([#54081](https://github.com/frappe/erpnext/issues/54081)) ([dc58754](dc58754a60))
* auto-set source_stock_entry ([eead8d6](eead8d6d8c))
* avg stock entries for disassembly from WO ([0ceb084](0ceb084104))
* conflicts ([66ee208](66ee208cb2))
* correct warehouse preference for disassemble ([919cbd5](919cbd5c02))
* create source_stock_entry to refer to original manufacturing entry ([b91af5b](b91af5b2b9))
* custom button to disassemble manufactured stock entry with work order ([84a063a](84a063a9bf))
* dif_inward_from_outward_workspace_sidebar (backport [#54083](https://github.com/frappe/erpnext/issues/54083)) ([#54088](https://github.com/frappe/erpnext/issues/54088)) ([e6722c8](e6722c84fa))
* disassembly prompt with source stock entry field ([c9d03d0](c9d03d049c))
* divide sub-assembly cost by qty to get per-unit rate in BOM Creator (backport [#54090](https://github.com/frappe/erpnext/issues/54090)) ([#54091](https://github.com/frappe/erpnext/issues/54091)) ([454271a](454271ad68))
* do not repost GL if no change in valuation ([89e3e3c](89e3e3c59e))
* do not show inv dimension unnecessarily in stock entry (backport [#53946](https://github.com/frappe/erpnext/issues/53946)) ([#53951](https://github.com/frappe/erpnext/issues/53951)) ([573a1a0](573a1a0dcb))
* dynamic labels on invoice type change ([4705f53](4705f53d2c))
* ensure accurate rounding for item-wise tax and taxable amounts ([c4c76cc](c4c76cc1b2))
* GL entries for different exchange rate in the purchase invoice ([5719992](5719992cda))
* handle disassembly for secondary / scrap items ([d50279b](d50279b718))
* hide fields related to track Semi-Finished Goods if feature has disabled ([5a7d0d2](5a7d0d2765))
* include rejected qty in tax (purchase receipt) (backport [#53624](https://github.com/frappe/erpnext/issues/53624)) ([#53972](https://github.com/frappe/erpnext/issues/53972)) ([e230f72](e230f72e0b))
* manufacture entry with group_by support ([31ac46a](31ac46ae4c))
* **manufacturing:** handle null cur_dialog in BOM work order dialog (backport [#54011](https://github.com/frappe/erpnext/issues/54011)) ([#54015](https://github.com/frappe/erpnext/issues/54015)) ([01610b2](01610b2fa7))
* Party Field only visibile when party type selected ([f42a1e8](f42a1e8a14))
* prevent selection of group type customer group in customer master ([04cced2](04cced2fb5))
* print hide unnecessary fields ([cd98312](cd98312083))
* process loss with bom path disassembly ([0a257ea](0a257ea63d))
* **promotional_scheme:** toggle enable state between Buying and Selli… (backport [#54110](https://github.com/frappe/erpnext/issues/54110)) ([#54112](https://github.com/frappe/erpnext/issues/54112)) ([4a6fe47](4a6fe477d4))
* rejected serial no field showing even if serial / batch feature not enabled ([2c81f79](2c81f79df7))
* remove null from link_filters ([21f36f5](21f36f5c21))
* remove reference in serial/batch when document is cancelled (backport [#53979](https://github.com/frappe/erpnext/issues/53979)) ([#53989](https://github.com/frappe/erpnext/issues/53989)) ([5aaca83](5aaca83fe4))
* remove title field from purchase receipt (backport [#54051](https://github.com/frappe/erpnext/issues/54051)) ([#54065](https://github.com/frappe/erpnext/issues/54065)) ([84382db](84382db5ca))
* remove unnecessary param, and use value from self ([7bef954](7bef9542d4))
* resolve user permission error on status change by updating user … (backport [#54033](https://github.com/frappe/erpnext/issues/54033)) ([#54060](https://github.com/frappe/erpnext/issues/54060)) ([62b83ca](62b83cacce))
* screen freezes if consumed qty set in SCR ([bd67ef8](bd67ef8d26))
* set bom details on disassembly; abs batch qty ([fb1d865](fb1d865e9b))
* set serial and batch from source stock entry - on disassemble ([ff104ed](ff104edf12))
* set_query for source stock entry ([5f67ef7](5f67ef70bb))
* show current stock qty in Stock Entry PDF (backport [#53761](https://github.com/frappe/erpnext/issues/53761)) ([#54032](https://github.com/frappe/erpnext/issues/54032)) ([ab08162](ab08162f34))
* skip discount amount validation when not saving ([8941699](8941699a34))
* skip validate_stock_accounts in Journal Entry when perpetual inventory is disabled (backport [#53554](https://github.com/frappe/erpnext/issues/53554)) ([#53558](https://github.com/frappe/erpnext/issues/53558)) ([7062b71](7062b7153e))
* **stock:** update stock queue in SABE for return entries ([fc5a04d](fc5a04db2e))
* support creating disassembly (without link of WO) ([1c4b2a7](1c4b2a7148))
* sync paid and received amount (backport [#53039](https://github.com/frappe/erpnext/issues/53039)) ([#54108](https://github.com/frappe/erpnext/issues/54108)) ([df3f242](df3f242331))
* task gantt popup text not visible in light theme (backport [#53882](https://github.com/frappe/erpnext/issues/53882)) ([#54094](https://github.com/frappe/erpnext/issues/54094)) ([995a29e](995a29e3e1))
* **taxes:** improve tax calculation accuracy and update test assertions ([6ad5e89](6ad5e89607))
* **taxes:** increase rounding threshold for tax breakup calculations ([3592637](3592637b5c))
* **test:** do not use is_group enabled customer group in test ([8674aaf](8674aafc86))
* **tests:** update item code and quantity in tax detail test case ([6689b17](6689b17b88))
* transactions where update stock is 0 should not create SLEs (backport [#54035](https://github.com/frappe/erpnext/issues/54035)) ([#54077](https://github.com/frappe/erpnext/issues/54077)) ([af81ed8](af81ed874b))
* update min date based on transaction_date (backport [#53803](https://github.com/frappe/erpnext/issues/53803)) ([#54025](https://github.com/frappe/erpnext/issues/54025)) ([bc86e2c](bc86e2c1f2))
* use get_value ([e4eb88d](e4eb88d80b))
* **ux:** refresh grid to correctly persist the state of fields ([273caa3](273caa38d9))
* validate qty that can be disassembled from source stock entry. ([1237f9a](1237f9a0b1))
* validate work order consistency in stock entry ([b030eea](b030eeafb8))
* **warehouse_capacity_dashboard:** removed `escape` from template (backport [#53907](https://github.com/frappe/erpnext/issues/53907)) ([#53909](https://github.com/frappe/erpnext/issues/53909)) ([a478fb7](a478fb7131))

### Features

* co product by product support ([#52979](https://github.com/frappe/erpnext/issues/52979)) ([#53975](https://github.com/frappe/erpnext/issues/53975)) ([8db397b](8db397bdae))
* croatian_address_template (backport [#53888](https://github.com/frappe/erpnext/issues/53888)) ([#54058](https://github.com/frappe/erpnext/issues/54058)) ([ff26265](ff262655bb))
* **Payment Request:** Added a toggle for using the payment schedule (backport [#53922](https://github.com/frappe/erpnext/issues/53922)) ([#53928](https://github.com/frappe/erpnext/issues/53928)) ([5ade905](5ade905ee8))

### Performance Improvements

* optimize account balance data fetching for Chart Of Accounts (backport [#53044](https://github.com/frappe/erpnext/issues/53044)) ([#53802](https://github.com/frappe/erpnext/issues/53802)) ([093ca87](093ca8745d))
2026-04-07 17:58:52 +00:00
diptanilsaha
aaea4dfcc1 Merge pull request #54100 from frappe/version-16-hotfix 2026-04-07 23:05:35 +05:30
mergify[bot]
7b91566435 refactor: financial report template enhancements (backport #52687) (#54113)
Co-authored-by: Abdeali Chharchhodawala <99460106+Abdeali099@users.noreply.github.com>
2026-04-07 17:10:42 +00:00
mergify[bot]
4a6fe477d4 fix(promotional_scheme): toggle enable state between Buying and Selli… (backport #54110) (#54112)
Co-authored-by: Ahmed AbuKhatwa <82771130+AhmedAbokhatwa@users.noreply.github.com>
Co-authored-by: AhmedAbukhatwa <Ahmedabukhatwa1@gmail.com>
fix(promotional_scheme): toggle enable state between Buying and Selli… (#54110)
2026-04-07 21:55:18 +05:30
mergify[bot]
df3f242331 fix: sync paid and received amount (backport #53039) (#54108)
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com>
fix: sync paid and received amount (#53039)
2026-04-07 13:06:39 +00:00
mergify[bot]
7062b7153e fix: skip validate_stock_accounts in Journal Entry when perpetual inventory is disabled (backport #53554) (#53558)
Co-authored-by: Saeed Kola <mohammedsaeedk@gmail.com>
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-04-07 12:05:33 +00:00
mergify[bot]
093ca8745d perf: optimize account balance data fetching for Chart Of Accounts (backport #53044) (#53802)
Co-authored-by: Shllokkk <140623894+Shllokkk@users.noreply.github.com>
2026-04-07 16:20:17 +05:30
Smit Vora
52ac36ef02 Merge pull request #54098 from frappe/mergify/bp/version-16-hotfix/pr-53964
fix: consistently disassemble based on source  > SE / WO / BOM (backport #53964)
2026-04-07 15:20:29 +05:30
Smit Vora
9e83badbf5 chore: resolve conflicts 2026-04-07 14:57:56 +05:30
Smit Vora
7bef9542d4 fix: remove unnecessary param, and use value from self
(cherry picked from commit 98dfd64f63)
2026-04-07 08:48:19 +00:00
Smit Vora
6cebea314d test: enhance tests as per review comments
(cherry picked from commit f13d37fbf9)
2026-04-07 08:48:19 +00:00
Smit Vora
d4fde552f4 test: maintain sufficient stock for scrap item
(cherry picked from commit b892139342)
2026-04-07 08:48:19 +00:00
Smit Vora
fb1d865e9b fix: set bom details on disassembly; abs batch qty
(cherry picked from commit ab1fc22431)
2026-04-07 08:48:18 +00:00
Smit Vora
0a257ea63d fix: process loss with bom path disassembly
(cherry picked from commit 93ad48bc1b)
2026-04-07 08:48:18 +00:00
Smit Vora
b030eeafb8 fix: validate work order consistency in stock entry
(cherry picked from commit ea392b2009)
2026-04-07 08:48:18 +00:00
vorasmit
e4eb88d80b fix: use get_value
(cherry picked from commit a71e8bb116)
2026-04-07 08:48:17 +00:00
vorasmit
0ceb084104 fix: avg stock entries for disassembly from WO
(cherry picked from commit 71fd18bdf9)
2026-04-07 08:48:17 +00:00
vorasmit
31ac46ae4c fix: manufacture entry with group_by support
(cherry picked from commit 3cf1ce8360)
2026-04-07 08:48:16 +00:00
Smit Vora
901e626729 test: disassembly for scrap / secondary item
(cherry picked from commit a6d41151ff)
2026-04-07 08:48:16 +00:00
Smit Vora
d50279b718 fix: handle disassembly for secondary / scrap items
(cherry picked from commit 2be8313819)
2026-04-07 08:48:16 +00:00
Smit Vora
e1a4d9fab4 test: disassembly of items with batch and serial numbers
(cherry picked from commit 1693698fed)
2026-04-07 08:48:15 +00:00
Smit Vora
8444778f74 test: additional items in stock entry considered with disassembly
(cherry picked from commit d32977e3a9)
2026-04-07 08:48:15 +00:00
Smit Vora
4c0ebee15b test: disassemble with source stock entry reference
(cherry picked from commit 6988e2cbbc)
2026-04-07 08:48:15 +00:00
Smit Vora
195a10efb3 test: disassembly from wo
(cherry picked from commit 342a14d340)
2026-04-07 08:48:14 +00:00
Smit Vora
ff104edf12 fix: set serial and batch from source stock entry - on disassemble
(cherry picked from commit 13b019ab8e)
2026-04-07 08:48:14 +00:00
Smit Vora
919cbd5c02 fix: correct warehouse preference for disassemble
(cherry picked from commit d3d6b5c660)
2026-04-07 08:48:14 +00:00
Smit Vora
eead8d6d8c fix: auto-set source_stock_entry
(cherry picked from commit 2e4e8bcaa7)
2026-04-07 08:48:13 +00:00
Smit Vora
4232640a8b fix: add support to fetch items based on manufacture stock entry; fix how it's done from work order
(cherry picked from commit 1ed0124ad7)
2026-04-07 08:48:13 +00:00
Smit Vora
1237f9a0b1 fix: validate qty that can be disassembled from source stock entry.
(cherry picked from commit 6394dead72)

# Conflicts:
#	erpnext/manufacturing/doctype/work_order/work_order.py
2026-04-07 08:48:13 +00:00
Smit Vora
1c4b2a7148 fix: support creating disassembly (without link of WO)
(cherry picked from commit dba82720b6)
2026-04-07 08:48:13 +00:00
Smit Vora
84a063a9bf fix: custom button to disassemble manufactured stock entry with work order
(cherry picked from commit b64f86148c)
2026-04-07 08:48:12 +00:00
Smit Vora
5f67ef70bb fix: set_query for source stock entry
(cherry picked from commit b47dfacb3e)
2026-04-07 08:48:12 +00:00
Smit Vora
c9d03d049c fix: disassembly prompt with source stock entry field
(cherry picked from commit 68e97808c5)

# Conflicts:
#	erpnext/manufacturing/doctype/work_order/work_order.py
2026-04-07 08:48:12 +00:00
Smit Vora
b91af5b2b9 fix: create source_stock_entry to refer to original manufacturing entry
(cherry picked from commit d4baa9a74a)
2026-04-07 08:48:11 +00:00
Khushi Rawat
ae89407840 Merge pull request #54095 from frappe/mergify/bp/version-16-hotfix/pr-53394
fix: remove null from link_filters (backport #53394)
2026-04-07 12:57:04 +05:30
ervishnucs
21f36f5c21 fix: remove null from link_filters
(cherry picked from commit a518a735f3)
2026-04-07 07:00:44 +00:00
mergify[bot]
995a29e3e1 fix: task gantt popup text not visible in light theme (backport #53882) (#54094)
Co-authored-by: Sakthivel Murugan S <129778327+ssakthivelmurugan@users.noreply.github.com>
fix: task gantt popup text not visible in light theme (#53882)
2026-04-07 06:40:45 +00:00
mergify[bot]
454271ad68 fix: divide sub-assembly cost by qty to get per-unit rate in BOM Creator (backport #54090) (#54091) 2026-04-07 05:55:55 +00:00
mergify[bot]
ff262655bb feat: croatian_address_template (backport #53888) (#54058)
Co-authored-by: mahsem <137205921+mahsem@users.noreply.github.com>
2026-04-07 10:25:44 +05:30
mergify[bot]
62b83cacce fix: resolve user permission error on status change by updating user … (backport #54033) (#54060)
Co-authored-by: Krishna Shirsath <shirsathkrishna19@gmail.com>
2026-04-07 10:25:13 +05:30
mergify[bot]
e6722c84fa fix: dif_inward_from_outward_workspace_sidebar (backport #54083) (#54088)
Co-authored-by: mahsem <137205921+mahsem@users.noreply.github.com>
fix: dif_inward_from_outward_workspace_sidebar (#54083)
2026-04-07 04:14:45 +00:00
mergify[bot]
dc58754a60 fix: add tax_id handling in Tax Withholding Entry (backport #53598) (#54081)
Co-authored-by: Lakshit Jain <ljain112@gmail.com>
fix: add tax_id handling in Tax Withholding Entry (#53598)
2026-04-06 17:18:45 +00:00
mergify[bot]
af81ed874b fix: transactions where update stock is 0 should not create SLEs (backport #54035) (#54077)
Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
fix: transactions where update stock is 0 should not create SLEs (#54035)
2026-04-06 15:17:11 +00:00
Smit Vora
14868ab98f Merge pull request #54070 from frappe/mergify/bp/version-16-hotfix/pr-53973
fix(ux): refresh grid to correctly persist the state of fields (backport #53973)
2026-04-06 19:38:55 +05:30
rohitwaghchaure
957a5e1a65 Merge pull request #54069 from frappe/mergify/bp/version-16-hotfix/pr-54050
fix: GL entries for different exchange rate in the purchase invoice (backport #54050)
2026-04-06 17:48:45 +05:30
mergify[bot]
84382db5ca fix: remove title field from purchase receipt (backport #54051) (#54065)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: remove title field from purchase receipt (#54051)
2026-04-06 12:00:04 +00:00
Smit Vora
273caa38d9 fix(ux): refresh grid to correctly persist the state of fields
(cherry picked from commit da778edf48)
2026-04-06 11:56:42 +00:00
Rohit Waghchaure
5719992cda fix: GL entries for different exchange rate in the purchase invoice
(cherry picked from commit a953709640)
2026-04-06 11:53:06 +00:00
Khushi Rawat
2de51be5ae Merge pull request #54062 from frappe/mergify/bp/version-16-hotfix/pr-54052
fix: print hide unnecessary fields (backport #54052)
2026-04-06 16:59:08 +05:30
Khushi Rawat
66ee208cb2 fix: conflicts 2026-04-06 16:19:53 +05:30
khushi8112
cd98312083 fix: print hide unnecessary fields
(cherry picked from commit 8f83616b60)

# Conflicts:
#	erpnext/selling/doctype/sales_order_item/sales_order_item.json
2026-04-06 10:43:49 +00:00
diptanilsaha
7c34cb1134 Merge pull request #54047 from frappe/mergify/bp/version-16-hotfix/pr-54042
fix: skip discount amount validation when not saving (backport #54042)
2026-04-06 13:44:31 +05:30
Sagar Vora
9bc0e3b2ce test: add test for discount amount on partial purchase receipt
Co-authored-by: ravibharathi656 <131471282+ravibharathi656@users.noreply.github.com>
(cherry picked from commit 135cb5fd67)
2026-04-06 07:31:09 +00:00
Sagar Vora
8941699a34 fix: skip discount amount validation when not saving
(cherry picked from commit 0975583388)
2026-04-06 07:31:08 +00:00
rohitwaghchaure
fe6a7ee7ff Merge pull request #54029 from frappe/mergify/bp/version-16-hotfix/pr-54004
fix: do not repost GL if no change in valuation (backport #54004)
2026-04-06 11:47:35 +05:30
mergify[bot]
ab08162f34 fix: show current stock qty in Stock Entry PDF (backport #53761) (#54032) 2026-04-06 05:42:53 +00:00
Rohit Waghchaure
89e3e3c59e fix: do not repost GL if no change in valuation
(cherry picked from commit bb53cce228)
2026-04-06 03:38:41 +00:00
rohitwaghchaure
5c3daee1bb Merge pull request #54010 from frappe/mergify/bp/version-16-hotfix/pr-53994
fix(stock): update stock queue in SABE for return entries (backport #53994)
2026-04-06 09:07:08 +05:30
rohitwaghchaure
baa714b00f Merge pull request #54016 from frappe/mergify/bp/version-16-hotfix/pr-54005
fix: screen freezes if consumed qty set in SCR (backport #54005)
2026-04-05 22:55:44 +05:30
mergify[bot]
bc86e2c1f2 fix: update min date based on transaction_date (backport #53803) (#54025)
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com>
fix: update min date based on transaction_date (#53803)
2026-04-05 21:16:31 +05:30
MochaMind
1c0956c6e2 chore: update POT file (#54017) 2026-04-05 16:02:11 +02:00
Rohit Waghchaure
bd67ef8d26 fix: screen freezes if consumed qty set in SCR
(cherry picked from commit dd7be2b370)
2026-04-05 07:50:38 +00:00
mergify[bot]
01610b2fa7 fix(manufacturing): handle null cur_dialog in BOM work order dialog (backport #54011) (#54015) 2026-04-05 07:19:23 +00:00
kavin-114
d3f1bfc628 test(stock): add unit test to update stock queue for return
(cherry picked from commit e537896df8)
2026-04-04 21:17:30 +00:00
kavin-114
fc5a04db2e fix(stock): update stock queue in SABE for return entries
(cherry picked from commit 0af8077bcc)
2026-04-04 21:17:30 +00:00
rohitwaghchaure
fddf9f381b Merge pull request #53980 from frappe/mergify/bp/version-16-hotfix/pr-53963
fix: hide fields related to track Semi-Finished Goods if feature has disabled (backport #53963)
2026-04-02 18:03:35 +05:30
mergify[bot]
5aaca83fe4 fix: remove reference in serial/batch when document is cancelled (backport #53979) (#53989) 2026-04-02 08:11:20 +00:00
Rohit Waghchaure
5a7d0d2765 fix: hide fields related to track Semi-Finished Goods if feature has disabled
(cherry picked from commit 399faf0ced)
2026-04-01 11:08:10 +00:00
Lakshit Jain
53fc0beae5 Merge pull request #53969 from frappe/mergify/bp/version-16-hotfix/pr-53961
fix: ensure accurate rounding for item-wise tax and taxable amounts (backport #53961)
2026-04-01 14:43:15 +05:30
Mihir Kandoi
8db397bdae feat: co product by product support (#52979) (#53975) 2026-04-01 07:41:39 +00:00
mergify[bot]
e230f72e0b fix: include rejected qty in tax (purchase receipt) (backport #53624) (#53972)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: include rejected qty in tax (purchase receipt) (#53624)
2026-03-31 15:51:58 +00:00
ljain112
9386c1328a test: improve test case
(cherry picked from commit b73b161cbe)
2026-03-31 14:21:12 +00:00
ljain112
c4c76cc1b2 fix: ensure accurate rounding for item-wise tax and taxable amounts
(cherry picked from commit 9b37f2d95c)
2026-03-31 14:21:12 +00:00
Khushi Rawat
240d27274b Merge pull request #53957 from frappe/mergify/bp/version-16-hotfix/pr-53811
fix: prevent selection of group type customer group in customer master (backport #53811)
2026-03-31 18:13:29 +05:30
Nishka Gosalia
e55d0ce1f8 Merge pull request #53966 from frappe/mergify/bp/version-16-hotfix/pr-53965
fix: Party Field only visibile when party type selected (backport #53965)
2026-03-31 18:10:00 +05:30
nishkagosalia
f42a1e8a14 fix: Party Field only visibile when party type selected
(cherry picked from commit e9e510a76e)
2026-03-31 12:38:31 +00:00
khushi8112
8674aafc86 fix(test): do not use is_group enabled customer group in test
(cherry picked from commit 75fa2b2277)
2026-03-31 11:17:17 +00:00
khushi8112
04cced2fb5 fix: prevent selection of group type customer group in customer master
(cherry picked from commit 6068dc959f)
2026-03-31 11:17:17 +00:00
Khushi Rawat
16bd04dd97 Merge pull request #53943 from frappe/mergify/bp/version-16-hotfix/pr-53939
fix: dynamic labels on invoice type change (backport #53939)
2026-03-31 16:47:02 +05:30
ruthra kumar
d129e5f5bc Merge pull request #53948 from frappe/mergify/bp/version-16-hotfix/pr-53795
refactor(test): enforce ERPNextTestSuite across repo (backport #53795)
2026-03-31 16:30:56 +05:30
mergify[bot]
573a1a0dcb fix: do not show inv dimension unnecessarily in stock entry (backport #53946) (#53951)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: do not show inv dimension unnecessarily in stock entry (#53946)
2026-03-31 16:29:29 +05:30
rohitwaghchaure
7c503b33f8 Merge pull request #53954 from frappe/mergify/bp/version-16-hotfix/pr-53953
fix: rejected serial no field showing even if serial / batch feature disabled (backport #53953)
2026-03-31 16:20:56 +05:30
Rohit Waghchaure
2c81f79df7 fix: rejected serial no field showing even if serial / batch feature not enabled
(cherry picked from commit c2f419ac3d)
2026-03-31 10:41:44 +00:00
ruthra kumar
05f47bbf6e refactor(test): remove AccountsTestMixin from Sales Order
(cherry picked from commit 2aecf0103a)
2026-03-31 15:05:19 +05:30
ruthra kumar
ee61d79631 refactor(test): remove AccountsTestMixin from reactivity
(cherry picked from commit d2ee967383)
2026-03-31 15:05:17 +05:30
ruthra kumar
85b08e4706 refactor(test): remove AccountsTestMixin from distributed discount
(cherry picked from commit 0b6546ea06)
2026-03-31 09:32:44 +00:00
ruthra kumar
013aea6b7e refactor(test): move logic from AccountsTestMixin to ERPNextTestSuite
(cherry picked from commit 2b37d7514d)
2026-03-31 09:32:44 +00:00
ruthra kumar
a8d0fb5ac9 refactor(test): erpnext testsuite should be primary superclass
(cherry picked from commit f3148e052c)
2026-03-31 09:32:44 +00:00
Lakshit Jain
924983794b Merge pull request #53933 from frappe/mergify/bp/version-16-hotfix/pr-53925
fix(taxes): increase rounding threshold for tax breakup calculations (backport #53925)
2026-03-31 12:34:33 +05:30
mergify[bot]
5ade905ee8 feat(Payment Request): Added a toggle for using the payment schedule (backport #53922) (#53928)
* feat(Payment Request): Added a toggle for using the payment schedule

(cherry picked from commit 8ec15b537e)

---------

Co-authored-by: Jatin3128 <jatinsarna8@gmail.com>
Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-03-31 12:26:29 +05:30
khushi8112
4705f53d2c fix: dynamic labels on invoice type change
(cherry picked from commit 820bd15e1e)
2026-03-31 06:37:19 +00:00
mergify[bot]
8be7793f89 chore: remove inter warehouse transfer settings (backport #53860) (#53941)
Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
2026-03-31 06:09:44 +00:00
ljain112
0dcacad793 chore: resolve conflicts 2026-03-31 11:05:46 +05:30
mergify[bot]
a478fb7131 fix(warehouse_capacity_dashboard): removed escape from template (backport #53907) (#53909)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(warehouse_capacity_dashboard): removed `escape` from template (#53907)
2026-03-30 23:33:22 +05:30
Frappe PR Bot
ddef35c333 chore(release): Bumped to Version 16.12.0
# [16.12.0](https://github.com/frappe/erpnext/compare/v16.11.0...v16.12.0) (2026-03-30)

### Bug Fixes

* **accounts:** set supplier name as title field in Purchase Invoice ([#53710](https://github.com/frappe/erpnext/issues/53710)) ([f2195fa](f2195fa67d))
* add missing type hints to whitelisted function arguments ([b115913](b115913fc9))
* avoid setting unnecessary fields ([3023302](3023302700))
* **bank_account:** added validation to fetch bank account details using `get_bank_account_details` (backport [#53926](https://github.com/frappe/erpnext/issues/53926)) ([#53930](https://github.com/frappe/erpnext/issues/53930)) ([8cb8f66](8cb8f66b22))
* change in functionality ([6d92792](6d92792634))
* change shipment parcel dimension fields from Int to Float (backport [#53867](https://github.com/frappe/erpnext/issues/53867)) ([#53873](https://github.com/frappe/erpnext/issues/53873)) ([2907c41](2907c411f3))
* **contract_template:** restrict `create`, `write` and `delete` access only to `System Manager` (backport [#53787](https://github.com/frappe/erpnext/issues/53787)) ([#53789](https://github.com/frappe/erpnext/issues/53789)) ([737cb37](737cb371d7))
* correct item valuation when "Deduct" is used in Purchase Invoice and Receipt. ([c6fe5be](c6fe5be95a))
* corrected logic to retry reposting if timeout occurs after dependent SLE processing ([8fbb86d](8fbb86d53e))
* do not check for sub assembly reference for rm of fg (backport [#53758](https://github.com/frappe/erpnext/issues/53758)) ([#53759](https://github.com/frappe/erpnext/issues/53759)) ([1872dcc](1872dccb0a))
* **email_campaign:** prevent unsubscribing entire campaign when email group member unsubscribes ([00bb07a](00bb07aaa3))
* employee user creation ([1ddadb7](1ddadb72b7))
* **employee:** add 'set_only_once' property to 'Create User Automatically' field ([eadf78d](eadf78d694))
* fallback to Personal Email for user creation just like client-side ([553bc87](553bc87ac7))
* flaky currency exchange test (backport [#53813](https://github.com/frappe/erpnext/issues/53813)) ([#53817](https://github.com/frappe/erpnext/issues/53817)) ([3d79dce](3d79dce8b3))
* hide Create User Automatically checkbox if user is already selected ([c12ad79](c12ad7910a))
* invalid dynamic link filter for address doctype (backport [#53849](https://github.com/frappe/erpnext/issues/53849)) ([#53852](https://github.com/frappe/erpnext/issues/53852)) ([1c1369f](1c1369fea8))
* **item_dashboard:** escaping `warehouse`, `item_code`, `stock_uom` and `item_name` on `get_data` (backport [#53904](https://github.com/frappe/erpnext/issues/53904)) ([#53914](https://github.com/frappe/erpnext/issues/53914)) ([4ac6347](4ac6347cc5))
* item-wh reposting, code cleanup ([8d2c4da](8d2c4da931))
* keep from and to time blank until added explicitly (backport [#53798](https://github.com/frappe/erpnext/issues/53798)) ([#53801](https://github.com/frappe/erpnext/issues/53801)) ([09a4f63](09a4f630e1))
* maintain state during reposting ([544c914](544c91441b))
* **manufacturing:** apply work order status filter in job card (backport [#53766](https://github.com/frappe/erpnext/issues/53766)) ([#53768](https://github.com/frappe/erpnext/issues/53768)) ([37b68a0](37b68a07aa))
* **manufacturing:** close work order status when stock reservation is… (backport [#53714](https://github.com/frappe/erpnext/issues/53714)) ([#53721](https://github.com/frappe/erpnext/issues/53721)) ([c36f9e9](c36f9e9b1b))
* **manufacturing:** update condition for base hour rate calculation (backport [#53753](https://github.com/frappe/erpnext/issues/53753)) ([#53771](https://github.com/frappe/erpnext/issues/53771)) ([a93d715](a93d715916))
* **manufacturing:** update the qty precision (backport [#53874](https://github.com/frappe/erpnext/issues/53874)) ([#53885](https://github.com/frappe/erpnext/issues/53885)) ([f6fa972](f6fa9726f9))
* move Joining section before Exit, relabel Employee Exit -> Exit ([7414a9a](7414a9a694))
* only validate auto user creation before insert ([2f13b33](2f13b33e3d))
* **opening_invoice_creation_tool:** sanitize summary content for dashboard (backport [#53917](https://github.com/frappe/erpnext/issues/53917)) ([#53924](https://github.com/frappe/erpnext/issues/53924)) ([8c35a93](8c35a939cb))
* party name not updating correctly ([a205733](a2057331e3))
* **Payment Entry:** split orders as per the schedules in the refrence table ([2693ffe](2693ffe680))
* pick correct dependant sle during reposting ([15739b5](15739b5d81))
* purchase invoice for internal transfers should not require PO (backport [#53791](https://github.com/frappe/erpnext/issues/53791)) ([#53793](https://github.com/frappe/erpnext/issues/53793)) ([72efbc2](72efbc2b42))
* purchase invoice missing item ([bfb5132](bfb51326ed))
* Removed quick access link from selling workspace ([25fa66f](25fa66f90c))
* reset employee listview empty state, add import btn instead ([341bfb0](341bfb0bd9))
* reset User ID and make it read-only if 'Create User Automatically' is set ([af94ed8](af94ed865a))
* resolve POS crash and correct is_return typo in TransactionBase ([adc2960](adc2960f5b))
* sanitize genericode import inputs and secure XML parser ([d7902d0](d7902d0477))
* set create user perm to 1 by default + persist option while saving employee ([e8ca394](e8ca394e8b))
* set default print format for when downlod pdf ([a5250f8](a5250f8827))
* skip overwriting existing asset fields with accounting dimensions ([a35a3e9](a35a3e9627))
* **stock:** add warehouse filter to pick work order raw materials (backport [#53748](https://github.com/frappe/erpnext/issues/53748)) ([#53898](https://github.com/frappe/erpnext/issues/53898)) ([ad3c1e5](ad3c1e520e))
* **stock:** handle legacy single sle recon entries ([dd0613a](dd0613a4a8))
* **stock:** ignore qty validation for pick list (backport [#53871](https://github.com/frappe/erpnext/issues/53871)) ([#53892](https://github.com/frappe/erpnext/issues/53892)) ([319ba31](319ba31b77))
* **stock:** update company validation for expense account in lcv ([9d46d81](9d46d8151a))
* support translated search in get_party_type and refactor raw sql to qb (backport [#53191](https://github.com/frappe/erpnext/issues/53191)) ([#53832](https://github.com/frappe/erpnext/issues/53832)) ([675b94b](675b94b7a2))
* **templates:** escape attachment `file_url` and `file_name` in `order.html` and `projects.html` ([38bc5d6](38bc5d69cd))
* **templates:** using correct syntax of `include` in `projects.html` ([c3cb9cc](c3cb9cc003))
* test case ([5039f89](5039f896bf))
* test file deletion ([3a8e1e3](3a8e1e3faa))
* **test:** enable perpetual inventory ([ad96646](ad966468b1))
* uncollapse User Details section in new form ([d093b71](d093b71946))
* **UX:** improve party selection UX with party name field ([f80b974](f80b974d6f))
* validate if quantity greater than 0 in item dashboard (backport [#53846](https://github.com/frappe/erpnext/issues/53846)) ([#53848](https://github.com/frappe/erpnext/issues/53848)) ([9a2851f](9a2851f221))
* **warehouse_capacity_dashboard:** escaping `warehouse`, `item_code` and `company` on `get_data` (backport [#53894](https://github.com/frappe/erpnext/issues/53894)) ([#53900](https://github.com/frappe/erpnext/issues/53900)) ([f01f7e7](f01f7e7974))

### Features

* Bom stock analysis report ([8a5e2cc](8a5e2cc0a6))
* default print format for Request for Quotation ([ab0e215](ab0e215290))
* **employee:** Add automatic user creation feature and related validations. Create User on Import. ([8f8b487](8f8b48746b))
* **employee:** Add birthdays and work anniversaries indicator in form ,list view enhancements and new empty state. ([0b3c912](0b3c9120c3))
* **employee:** Create User button and form. ([cd0a25c](cd0a25ca17))
* **report:** add service start/end date and amount with roll-ups in deferred revenue/expense report ([407c3cd](407c3cd575))
2026-03-30 18:03:06 +00:00
diptanilsaha
f3a5afc11f Merge pull request #53915 from frappe/version-16-hotfix 2026-03-30 23:31:28 +05:30
mergify[bot]
8cb8f66b22 fix(bank_account): added validation to fetch bank account details using get_bank_account_details (backport #53926) (#53930)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(bank_account): added validation to fetch bank account details using `get_bank_account_details` (#53926)
2026-03-30 20:56:31 +05:30
ljain112
5922d25210 test: update item-wise tax detail test for high conversion rates
(cherry picked from commit fc8437c499)

# Conflicts:
#	erpnext/controllers/tests/test_item_wise_tax_details.py
2026-03-30 15:17:09 +00:00
Smit Vora
6ad5e89607 fix(taxes): improve tax calculation accuracy and update test assertions
(cherry picked from commit a18196f584)
2026-03-30 15:17:09 +00:00
ljain112
6689b17b88 fix(tests): update item code and quantity in tax detail test case
(cherry picked from commit 3449ab063a)
2026-03-30 15:17:09 +00:00
ljain112
3592637b5c fix(taxes): increase rounding threshold for tax breakup calculations
(cherry picked from commit 7f87a5e5c6)
2026-03-30 15:17:08 +00:00
Lakshit Jain
63828dfc00 Merge pull request #53932 from frappe/mergify/bp/version-16-hotfix/pr-53406
fix: correct item valuation when "Deduct" is used in Purchase Invoice and Receipt. (backport #53406)
2026-03-30 20:37:24 +05:30
ljain112
c6fe5be95a fix: correct item valuation when "Deduct" is used in Purchase Invoice and Receipt.
(cherry picked from commit e68f149d3a)
2026-03-30 14:24:46 +00:00
mergify[bot]
8c35a939cb fix(opening_invoice_creation_tool): sanitize summary content for dashboard (backport #53917) (#53924)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(opening_invoice_creation_tool): sanitize summary content for dashboard (#53917)
2026-03-30 12:47:25 +00:00
mergify[bot]
4ac6347cc5 fix(item_dashboard): escaping warehouse, item_code, stock_uom and item_name on get_data (backport #53904) (#53914)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(item_dashboard): escaping `warehouse`, `item_code`, `stock_uom` and `item_name` on `get_data` (#53904)
2026-03-30 09:52:17 +00:00
rohitwaghchaure
e85919478e Merge pull request #53911 from frappe/mergify/bp/version-16-hotfix/pr-53906
fix: purchase invoice missing item (backport #53906)
2026-03-30 15:08:56 +05:30
rohitwaghchaure
6ffd716ee2 Merge pull request #53896 from frappe/mergify/bp/version-16-hotfix/pr-53799
fix(stock): update company validation for expense account in lcv (backport #53799)
2026-03-30 14:45:49 +05:30
Rohit Waghchaure
bfb51326ed fix: purchase invoice missing item
(cherry picked from commit af994c1a22)
2026-03-30 09:15:18 +00:00
rohitwaghchaure
3af5b67e43 Merge pull request #53905 from frappe/mergify/bp/version-16-hotfix/pr-53902
fix: item-wh reposting, code cleanup (backport #53902)
2026-03-30 14:22:35 +05:30
Rohit Waghchaure
8d2c4da931 fix: item-wh reposting, code cleanup
(cherry picked from commit e0ca34ae39)
2026-03-30 08:31:48 +00:00
mergify[bot]
f01f7e7974 fix(warehouse_capacity_dashboard): escaping warehouse, item_code and company on get_data (backport #53894) (#53900)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(warehouse_capacity_dashboard): escaping `warehouse`, `item_code` and `company` on `get_data` (#53894)
2026-03-30 13:48:25 +05:30
mergify[bot]
ad3c1e520e fix(stock): add warehouse filter to pick work order raw materials (backport #53748) (#53898)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): add warehouse filter to pick work order raw materials (#53748)
2026-03-30 08:12:48 +00:00
Sudharsanan11
ad966468b1 fix(test): enable perpetual inventory
(cherry picked from commit 875a2e4947)
2026-03-30 07:34:51 +00:00
Sudharsanan11
9d46d8151a fix(stock): update company validation for expense account in lcv
(cherry picked from commit 913168e8b6)
2026-03-30 07:34:51 +00:00
mergify[bot]
319ba31b77 fix(stock): ignore qty validation for pick list (backport #53871) (#53892)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): ignore qty validation for pick list (#53871)
2026-03-30 06:59:29 +00:00
rohitwaghchaure
68d93a2dae Merge pull request #53810 from frappe/mergify/bp/version-16-hotfix/pr-53216
fix(stock): handle legacy single sle recon entries (backport #53216)
2026-03-30 11:34:36 +05:30
mergify[bot]
b2cba0286e refactor: setup wizard stages and demo data creation (backport #53866) (#53868)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-03-29 17:05:36 +00:00
mergify[bot]
f6fa9726f9 fix(manufacturing): update the qty precision (backport #53874) (#53885)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(manufacturing): update the qty precision (#53874)
2026-03-29 16:43:26 +00:00
MochaMind
83cac15755 chore: update POT file (#53875) 2026-03-29 14:55:38 +02:00
rohitwaghchaure
e3f144cb28 Merge pull request #53880 from frappe/mergify/bp/version-16-hotfix/pr-53878
fix: maintain state during reposting (backport #53878)
2026-03-29 16:32:07 +05:30
Rohit Waghchaure
544c91441b fix: maintain state during reposting
(cherry picked from commit f8738a791b)
2026-03-29 10:43:06 +00:00
mergify[bot]
2907c411f3 fix: change shipment parcel dimension fields from Int to Float (backport #53867) (#53873)
Co-authored-by: Kaushal Shriwas <64089478+kaulith@users.noreply.github.com>
fix: change shipment parcel dimension fields from Int to Float (#53867)
2026-03-29 07:10:14 +00:00
rohitwaghchaure
0b324b2892 Merge pull request #53856 from frappe/mergify/bp/version-16-hotfix/pr-53853
fix: corrected logic to retry reposting if timeout occurs after dependant SLE processing  (backport #53853)
2026-03-27 22:35:42 +05:30
Rohit Waghchaure
8fbb86d53e fix: corrected logic to retry reposting if timeout occurs after dependent SLE processing
(cherry picked from commit 90b9ab0bc8)
2026-03-27 15:56:46 +00:00
mergify[bot]
1c1369fea8 fix: invalid dynamic link filter for address doctype (backport #53849) (#53852) 2026-03-27 12:45:50 +00:00
mergify[bot]
9a2851f221 fix: validate if quantity greater than 0 in item dashboard (backport #53846) (#53848)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: validate if quantity greater than 0 in item dashboard (#53846)
2026-03-27 10:34:18 +00:00
mergify[bot]
c9953580b2 ci: semgrep to prevent test regression (backport #53837) (#53840)
ci: semgrep to prevent test regression

(cherry picked from commit be4496e4ab)

Co-authored-by: ruthra kumar <ruthra@erpnext.com>
2026-03-27 08:32:29 +00:00
mergify[bot]
675b94b7a2 fix: support translated search in get_party_type and refactor raw sql to qb (backport #53191) (#53832)
* fix: support translated search in get_party_type and refactor raw sql to qb

(cherry picked from commit d987688058)

# Conflicts:
#	erpnext/setup/doctype/party_type/party_type.py

* fix: resolve merge conflicts in party_type.py

---------

Co-authored-by: Shllokkk <140623894+Shllokkk@users.noreply.github.com>
2026-03-27 13:42:46 +05:30
rohitwaghchaure
bec83c1944 Merge pull request #53805 from frappe/mergify/bp/version-16-hotfix/pr-52152
Refactor reposting feature (backport #52152)
2026-03-27 12:36:22 +05:30
Nishka Gosalia
fbd72ff232 Merge pull request #53835 from frappe/mergify/bp/version-16-hotfix/pr-53704 2026-03-27 12:27:28 +05:30
Rohit Waghchaure
15739b5d81 fix: pick correct dependant sle during reposting 2026-03-27 12:10:45 +05:30
Rohit Waghchaure
f663f9b27e refactor: storing of current status of reposting
(cherry picked from commit daa2420996)
2026-03-27 12:10:45 +05:30
Rohit Waghchaure
5bbecbf7c4 refactor: reposting for better peformance
(cherry picked from commit 20787ef5da)
2026-03-27 12:10:45 +05:30
nishkagosalia
3a8e1e3faa fix: test file deletion 2026-03-27 12:03:20 +05:30
Ravibharathi
c78a5af073 Merge pull request #53820 from frappe/mergify/bp/version-16-hotfix/pr-53710
fix(accounts): set supplier name as title field in Purchase Invoice (backport #53710)
2026-03-27 11:59:39 +05:30
kavin-114
dd0613a4a8 fix(stock): handle legacy single sle recon entries
(cherry picked from commit 7e6bbcc3fb)
2026-03-27 11:49:45 +05:30
nishkagosalia
5039f896bf fix: test case
(cherry picked from commit 3a78af7f42)
2026-03-27 06:09:18 +00:00
nishkagosalia
d1a3571918 chore: Dropping bom stock report and bom stock calculated report
(cherry picked from commit 3bedc6cf7e)

# Conflicts:
#	erpnext/manufacturing/report/bom_stock_calculated/test_bom_stock_calculated.py
2026-03-27 06:09:17 +00:00
nishkagosalia
6d92792634 fix: change in functionality
(cherry picked from commit c1874cb7d5)
2026-03-27 06:09:17 +00:00
nishkagosalia
8a5e2cc0a6 feat: Bom stock analysis report
(cherry picked from commit 5d088350dc)
2026-03-27 06:09:17 +00:00
ravibharathi656
d12b54c50a chore: resolve conflict 2026-03-27 11:24:35 +05:30
rohitwaghchaure
d7237519a2 Merge pull request #53826 from rohitwaghchaure/fixed-test-case-for-process-loss
test: fixed test case
2026-03-27 11:17:13 +05:30
ruthra kumar
f1af745932 Merge pull request #53830 from frappe/mergify/bp/version-16-hotfix/pr-53429
feat(report): add service start/end date and amount with roll-ups in deferred revenue/expense report (backport #53429)
2026-03-27 10:59:54 +05:30
ruthra kumar
610052d487 Merge pull request #53828 from frappe/mergify/bp/version-16-hotfix/pr-53343
fix(email_campaign): prevent unsubscribing entire campaign when email group member unsubscribes (backport #53343)
2026-03-27 10:48:46 +05:30
Shllokkk
407c3cd575 feat(report): add service start/end date and amount with roll-ups in deferred revenue/expense report
(cherry picked from commit 8e5692d8a3)
2026-03-27 05:00:50 +00:00
Shllokkk
00bb07aaa3 fix(email_campaign): prevent unsubscribing entire campaign when email group member unsubscribes
(cherry picked from commit 56f597f5ad)
2026-03-27 04:57:50 +00:00
Rohit Waghchaure
10f58112ae test: fixed test case 2026-03-27 10:04:55 +05:30
mergify[bot]
3d79dce8b3 fix: flaky currency exchange test (backport #53813) (#53817) 2026-03-26 15:09:13 +00:00
Pandiyan P
f2195fa67d fix(accounts): set supplier name as title field in Purchase Invoice (#53710)
fix(accounts): update title field in purchase order and purchase invoice

(cherry picked from commit 5b1fa81451)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.json
2026-03-26 13:30:44 +00:00
mergify[bot]
09a4f630e1 fix: keep from and to time blank until added explicitly (backport #53798) (#53801)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: keep from and to time blank until added explicitly (#53798)
2026-03-26 07:42:54 +00:00
mergify[bot]
72efbc2b42 fix: purchase invoice for internal transfers should not require PO (backport #53791) (#53793)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: purchase invoice for internal transfers should not require PO (#53791)
2026-03-26 04:24:43 +05:30
mergify[bot]
737cb371d7 fix(contract_template): restrict create, write and delete access only to System Manager (backport #53787) (#53789)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(contract_template): restrict `create`, `write` and `delete` access only to `System Manager` (#53787)
2026-03-25 15:26:34 +00:00
Khushi Rawat
b072dd4497 Merge pull request #53728 from frappe/mergify/bp/version-16-hotfix/pr-53646
feat: default print format for Request for Quotation (backport #53646)
2026-03-25 17:32:17 +05:30
diptanilsaha
62dc3ce6d8 Merge pull request #53781 from frappe/mergify/bp/version-16-hotfix/pr-53779
fix(template): escape attachment `file_url` and `file_name` and jinja syntax (backport #53779)
2026-03-25 15:20:20 +05:30
diptanilsaha
c3cb9cc003 fix(templates): using correct syntax of include in projects.html
(cherry picked from commit bc6561cdd0)
2026-03-25 09:28:37 +00:00
diptanilsaha
38bc5d69cd fix(templates): escape attachment file_url and file_name in order.html and projects.html
(cherry picked from commit d9760bbf4f)
2026-03-25 09:28:36 +00:00
mergify[bot]
a93d715916 fix(manufacturing): update condition for base hour rate calculation (backport #53753) (#53771)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(manufacturing): update condition for base hour rate calculation (#53753)
2026-03-25 06:29:08 +00:00
mergify[bot]
37b68a07aa fix(manufacturing): apply work order status filter in job card (backport #53766) (#53768)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix(manufacturing): apply work order status filter in job card (#53766)
2026-03-25 05:52:27 +00:00
mergify[bot]
1872dccb0a fix: do not check for sub assembly reference for rm of fg (backport #53758) (#53759)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: do not check for sub assembly reference for rm of fg (#53758)
2026-03-25 11:10:16 +05:30
ruthra kumar
47438a44d3 Merge pull request #53752 from frappe/mergify/bp/version-16-hotfix/pr-53657
refactor(test): move remaining commits inside test guard (backport #53657)
2026-03-24 18:24:58 +05:30
ruthra kumar
e91cbd94b4 refactor(test): process statement of acc remove commit
(cherry picked from commit bc2b8da597)
2026-03-24 17:52:41 +05:30
ruthra kumar
7f29245eb6 refactor(test): move location creation to bootstrap in asset movement
(cherry picked from commit fd2b76a4d2)
2026-03-24 17:52:41 +05:30
ruthra kumar
f0aa82cc6d refactor(test): make stock entry deterministic
(cherry picked from commit 8fd65d7afa)
2026-03-24 17:52:41 +05:30
ruthra kumar
37ad0665c6 refactor(test): make asset capitalization deterministic
(cherry picked from commit 2c53cf3902)
2026-03-24 17:52:41 +05:30
ruthra kumar
8ea9133caa refactor(test): make ledger merge deterministic
(cherry picked from commit d3cf8cb851)
2026-03-24 17:52:41 +05:30
ruthra kumar
0ba03ce851 refactor(test): SLA move company creation to bootstrap
(cherry picked from commit 77f41e120d)
2026-03-24 17:52:41 +05:30
ruthra kumar
ad2cf0624f refactor(test): move webform custom dt creation to boostrap
(cherry picked from commit 426b7db3c8)
2026-03-24 17:52:41 +05:30
ruthra kumar
cdc77caf6a refactor(test): move custom doctype data setup to bootstrap
(cherry picked from commit 934740205a)
2026-03-24 17:52:41 +05:30
ruthra kumar
d41e7098bd refactor(test): move tax category custom field creation to bootstrap
(cherry picked from commit 4454af8efd)
2026-03-24 17:52:41 +05:30
ruthra kumar
ebe45add4c refactor(test): move trial company creation to bootstrap
(cherry picked from commit 11fb00c21d)
2026-03-24 17:52:41 +05:30
ruthra kumar
bb42d3ddbe refactor(test): move purchase invoice dimension setup to bootstrap
(cherry picked from commit 31ce09204f)
2026-03-24 17:52:41 +05:30
ruthra kumar
ee72ed94d5 refactor(test): move company setup to bootstrap
(cherry picked from commit 9ed072ac83)
2026-03-24 17:52:41 +05:30
ruthra kumar
941375877e refactor(test): move dimension setup to test data bootstrap
and remove create_dimension() and disable_dimension()

(cherry picked from commit 342ce65401)
2026-03-24 17:52:37 +05:30
ruthra kumar
4148d7d414 Merge pull request #53750 from frappe/mergify/bp/version-16-hotfix/pr-52285
fix(Payment Entry): split orders as per the schedules in the reference table (backport #52285)
2026-03-24 17:49:48 +05:30
ruthra kumar
9669a2c56f refactor(test): move commits inside test guard clause
(cherry picked from commit ed76d6699a)
2026-03-24 12:14:03 +00:00
Jatin3128
2693ffe680 fix(Payment Entry): split orders as per the schedules in the refrence table
(cherry picked from commit a9e52833fe)
2026-03-24 11:59:33 +00:00
Nishka Gosalia
f9bbf7bee4 Merge pull request #53747 from frappe/mergify/bp/version-16-hotfix/pr-53738 2026-03-24 16:48:34 +05:30
nishkagosalia
0571830720 refactor: item master ux improvements
(cherry picked from commit be55082751)
2026-03-24 10:59:06 +00:00
khushi8112
bb77018f7b fix: add quotation print format in the list
(cherry picked from commit da41057cd6)
2026-03-24 10:06:58 +00:00
khushi8112
f5a9657a91 fix: remove unused print format
(cherry picked from commit b9083411cc)
2026-03-24 10:06:58 +00:00
khushi8112
7e5297a305 fix: add closing div tab
(cherry picked from commit c99cec1071)
2026-03-24 10:06:58 +00:00
khushi8112
a8769bfb77 feat: default print format for Quotation
(cherry picked from commit 4307cd5b1c)

# Conflicts:
#	erpnext/controllers/accounts_controller.py
#	erpnext/public/js/print.js
#	erpnext/setup/install.py
2026-03-24 10:06:57 +00:00
Khushi Rawat
6239e336ae Merge pull request #53729 from frappe/mergify/bp/version-16-hotfix/pr-53680
fix(UX): improve party selection UX with party name field (backport #53680)
2026-03-24 12:03:37 +05:30
ruthra kumar
2291a0539b Merge pull request #53740 from frappe/mergify/bp/version-16-hotfix/pr-52802
fix: Removed quick access link from selling workspace (backport #52802)
2026-03-24 11:50:42 +05:30
ruthra kumar
70984763a1 Merge pull request #53739 from frappe/mergify/bp/version-16-hotfix/pr-53302
fix: sanitize genericode import inputs and secure XML parser (backport #53302)
2026-03-24 11:47:45 +05:30
Nabin Hait
25fa66f90c fix: Removed quick access link from selling workspace
(cherry picked from commit d7c48d645a)
2026-03-24 06:01:15 +00:00
Shllokkk
d7902d0477 fix: sanitize genericode import inputs and secure XML parser
(cherry picked from commit 17eb983c40)
2026-03-24 05:57:53 +00:00
ruthra kumar
e78386f49a Merge pull request #53737 from frappe/mergify/bp/version-16-hotfix/pr-53730
fix: skip overwriting existing asset fields with accounting dimensions (backport #53730)
2026-03-24 11:25:09 +05:30
Rucha Mahabal
0a8e4675dc Merge pull request #53711 from frappe/mergify/bp/version-16-hotfix/pr-52726
feat(employee): Create User button and form. (backport #52726)
2026-03-24 11:06:15 +05:30
khushi8112
a35a3e9627 fix: skip overwriting existing asset fields with accounting dimensions
(cherry picked from commit 2859a143f2)
2026-03-24 05:35:26 +00:00
ruthra kumar
645308fc05 Merge pull request #53725 from Raghav0201/backport-52654
fix: resolve POS crash and correct is_return typo in TransactionBase
2026-03-24 10:59:00 +05:30
khushi8112
a2057331e3 fix: party name not updating correctly
(cherry picked from commit 469bb0ba4e)
2026-03-23 20:06:32 +00:00
khushi8112
f80b974d6f fix(UX): improve party selection UX with party name field
(cherry picked from commit 8fd9b88cd9)
2026-03-23 20:06:31 +00:00
khushi8112
a5250f8827 fix: set default print format for when downlod pdf
(cherry picked from commit 6b9fb77772)
2026-03-23 20:04:45 +00:00
khushi8112
ab0e215290 feat: default print format for Request for Quotation
(cherry picked from commit 2af0d9cf6c)
2026-03-23 20:04:45 +00:00
Raghav0201
adc2960f5b fix: resolve POS crash and correct is_return typo in TransactionBase 2026-03-23 22:13:29 +05:30
Frappe PR Bot
372fc96f0c chore(release): Bumped to Version 16.11.0
# [16.11.0](https://github.com/frappe/erpnext/compare/v16.10.1...v16.11.0) (2026-03-23)

### Bug Fixes

* Adding validation for operation time in BOM ([c38b252](c38b252289))
* batch validation for subcontracting receipt ([604739d](604739d1dc))
* check for `submit` permissions instead of `write` permissions when updating status (backport [#53697](https://github.com/frappe/erpnext/issues/53697)) ([#53703](https://github.com/frappe/erpnext/issues/53703)) ([cd1dfee](cd1dfeeab3))
* check posting_date in args (backport [#53303](https://github.com/frappe/erpnext/issues/53303)) ([#53612](https://github.com/frappe/erpnext/issues/53612)) ([f394ead](f394ead878))
* consider returned qty in subcontracting report (backport [#53616](https://github.com/frappe/erpnext/issues/53616)) ([#53621](https://github.com/frappe/erpnext/issues/53621)) ([7edcef1](7edcef1248))
* deadlock issue for SLE ([de41aba](de41abaaf2))
* do not overwrite expense account in stock entry (backport [#53658](https://github.com/frappe/erpnext/issues/53658)) ([#53661](https://github.com/frappe/erpnext/issues/53661)) ([077f397](077f39721a))
* do not update float precision on setup ([0af4cd9](0af4cd9098))
* ignore cost center (backport [#53063](https://github.com/frappe/erpnext/issues/53063)) ([#53614](https://github.com/frappe/erpnext/issues/53614)) ([2ccac6c](2ccac6c479))
* incorrect sle calculation when doc has project ([#53599](https://github.com/frappe/erpnext/issues/53599)) ([55bad49](55bad49cf0))
* **manufacturing:** update non-stock item dict (backport [#53689](https://github.com/frappe/erpnext/issues/53689)) ([#53699](https://github.com/frappe/erpnext/issues/53699)) ([0d9af60](0d9af60f8a))
* merge conflict ([f1c93d4](f1c93d4b98))
* **payment_schedule:** using `show_alert` instead of `msgprint` for non-selection of payment schedule (backport [#53623](https://github.com/frappe/erpnext/issues/53623)) ([#53631](https://github.com/frappe/erpnext/issues/53631)) ([a94bf6d](a94bf6db06))
* PO should not be required for internal transfers (backport [#53681](https://github.com/frappe/erpnext/issues/53681)) ([#53684](https://github.com/frappe/erpnext/issues/53684)) ([5f9533f](5f9533f089))
* python error in manufacture entry if transfer against is job card (backport [#53615](https://github.com/frappe/erpnext/issues/53615)) ([#53618](https://github.com/frappe/erpnext/issues/53618)) ([10a40a6](10a40a6d9b))
* set customer details on customer creation at login (backport [#53509](https://github.com/frappe/erpnext/issues/53509)) ([#53629](https://github.com/frappe/erpnext/issues/53629)) ([5b4e3e9](5b4e3e92df))
* shipping rule applied twice on non stock items (backport [#53655](https://github.com/frappe/erpnext/issues/53655)) ([#53687](https://github.com/frappe/erpnext/issues/53687)) ([9805745](9805745a66))
* stock queue for SABB ([f570a4c](f570a4cb5d))
* **stock:** add company filter while fetching batches (backport [#53369](https://github.com/frappe/erpnext/issues/53369)) ([#53581](https://github.com/frappe/erpnext/issues/53581)) ([91ee45a](91ee45a698))
* **stock:** fix email error message (backport [#53606](https://github.com/frappe/erpnext/issues/53606)) ([#53633](https://github.com/frappe/erpnext/issues/53633)) ([48e8944](48e8944a86))
* **stock:** handle NoneType error (backport [#53593](https://github.com/frappe/erpnext/issues/53593)) ([#53627](https://github.com/frappe/erpnext/issues/53627)) ([2d1dd03](2d1dd03483))
* test case ([aac60b4](aac60b4c13))
* **test:** Use the system-configured float precision ([dd7cc56](dd7cc56dfe))
* **trends:** added validation for `period_based_on` filter (backport [#53690](https://github.com/frappe/erpnext/issues/53690)) ([#53692](https://github.com/frappe/erpnext/issues/53692)) ([9787777](9787777cbd))
* use correct test class ([1efbc60](1efbc60df1))
* validate permission before updating status (backport [#53651](https://github.com/frappe/erpnext/issues/53651)) ([#53653](https://github.com/frappe/erpnext/issues/53653)) ([7ebed91](7ebed912cf))

### Features

* add cost center field to the stock entry accounting dimension tab ([50da693](50da6937e1))
2026-03-23 16:35:10 +00:00
mergify[bot]
c36f9e9b1b fix(manufacturing): close work order status when stock reservation is… (backport #53714) (#53721)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix(manufacturing): close work order status when stock reservation is… (#53714)
2026-03-23 22:03:54 +05:30
diptanilsaha
a7dde4f26c Merge pull request #53701 from frappe/version-16-hotfix 2026-03-23 22:03:34 +05:30
mergify[bot]
d16adb1579 chore(test_item_group): removed unused function _print_tree (backport #53716) (#53719)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-03-23 16:14:22 +00:00
mergify[bot]
638373e180 chore: skip semgrep check for db.commit in BootStrapTestData (backport #53715) (#53717)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-03-23 15:59:49 +00:00
rohitwaghchaure
2a514b5038 Merge pull request #53707 from frappe/mergify/bp/version-16-hotfix/pr-53705
fix: batch validation for subcontracting receipt (backport #53705)
2026-03-23 18:52:30 +05:30
Rucha Mahabal
03510d96be chore: fix conflicts 2026-03-23 17:57:30 +05:30
Rucha Mahabal
33d868f415 test(fix): set company in employee
(cherry picked from commit a14f834589)

# Conflicts:
#	erpnext/setup/doctype/employee/test_employee.py
2026-03-23 12:18:18 +00:00
Rucha Mahabal
dfd9aa56be test: Create User Automatically
(cherry picked from commit d4ecede3c3)

# Conflicts:
#	erpnext/setup/doctype/employee/test_employee.py
2026-03-23 12:18:17 +00:00
Rucha Mahabal
af94ed865a fix: reset User ID and make it read-only if 'Create User Automatically' is set
(cherry picked from commit 2be6bb694f)
2026-03-23 12:18:17 +00:00
Rucha Mahabal
553bc87ac7 fix: fallback to Personal Email for user creation just like client-side
(cherry picked from commit 31af13a5e6)
2026-03-23 12:18:17 +00:00
Rucha Mahabal
3023302700 fix: avoid setting unnecessary fields
(cherry picked from commit 97bb100010)
2026-03-23 12:18:16 +00:00
Rucha Mahabal
e8ca394e8b fix: set create user perm to 1 by default + persist option while saving employee
(cherry picked from commit 091899d0df)
2026-03-23 12:18:16 +00:00
Rucha Mahabal
c12ad7910a fix: hide Create User Automatically checkbox if user is already selected
(cherry picked from commit ec3302d1c1)
2026-03-23 12:18:15 +00:00
Rucha Mahabal
d093b71946 fix: uncollapse User Details section in new form
(cherry picked from commit 1466df91bd)
2026-03-23 12:18:15 +00:00
Rucha Mahabal
2f13b33e3d fix: only validate auto user creation before insert
(cherry picked from commit ee1aa10328)
2026-03-23 12:18:14 +00:00
Rucha Mahabal
1ddadb72b7 fix: employee user creation
- consider prefered email as default in employee creation

- remove unused user parameter from `create_user` API

- remove unnecessary validations on user ID, already checked by user doctype hooks

- set company email only if empty

(cherry picked from commit 613d36a139)
2026-03-23 12:18:14 +00:00
Rucha Mahabal
341bfb0bd9 fix: reset employee listview empty state, add import btn instead
(cherry picked from commit d99d16423a)
2026-03-23 12:18:13 +00:00
Rucha Mahabal
7414a9a694 fix: move Joining section before Exit, relabel Employee Exit -> Exit
(cherry picked from commit 000b5b72d5)
2026-03-23 12:18:13 +00:00
Krishna Shirsath
c33cd5ce15 refactor(employee): remove anniversary indicator logic from employee form
(cherry picked from commit 1f19175fef)
2026-03-23 12:18:13 +00:00
Krishna Shirsath
eadf78d694 fix(employee): add 'set_only_once' property to 'Create User Automatically' field
(cherry picked from commit 053242d5bd)
2026-03-23 12:18:13 +00:00
Krishna Shirsath
b115913fc9 fix: add missing type hints to whitelisted function arguments
(cherry picked from commit 124ec4d3c2)
2026-03-23 12:18:13 +00:00
Krishna Shirsath
0b3c9120c3 feat(employee): Add birthdays and work anniversaries indicator in form ,list view enhancements and new empty state.
(cherry picked from commit 4f43f655cf)
2026-03-23 12:18:12 +00:00
Krishna Shirsath
b0145512ed refactor(employee): reorganize joining and employee exit tabs at the end.
(cherry picked from commit 870254b710)
2026-03-23 12:18:12 +00:00
Krishna Shirsath
f2c4a8b1c4 refactor(employee): create user function -removed useless function calls
(cherry picked from commit 6513185cb7)
2026-03-23 12:18:11 +00:00
Krishna Shirsath
8f8b48746b feat(employee): Add automatic user creation feature and related validations. Create User on Import.
(cherry picked from commit 57f3048d27)
2026-03-23 12:18:11 +00:00
Krishna Shirsath
cd0a25ca17 feat(employee): Create User button and form.
(cherry picked from commit 3b521b74ea)
2026-03-23 12:18:11 +00:00
Rohit Waghchaure
604739d1dc fix: batch validation for subcontracting receipt
(cherry picked from commit b8d201658a)
2026-03-23 11:33:00 +00:00
mergify[bot]
cd1dfeeab3 fix: check for submit permissions instead of write permissions when updating status (backport #53697) (#53703)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix: check for `submit` permissions instead of `write` permissions when updating status (#53697)
2026-03-23 10:56:15 +00:00
mergify[bot]
0d9af60f8a fix(manufacturing): update non-stock item dict (backport #53689) (#53699)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(manufacturing): update non-stock item dict (#53689)
2026-03-23 10:14:52 +00:00
Nishka Gosalia
e2b9538e85 Merge pull request #53694 from frappe/mergify/bp/version-16-hotfix/pr-53649 2026-03-23 14:52:10 +05:30
mergify[bot]
9787777cbd fix(trends): added validation for period_based_on filter (backport #53690) (#53692)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(trends): added validation for `period_based_on` filter (#53690)
2026-03-23 09:15:08 +00:00
mergify[bot]
9805745a66 fix: shipping rule applied twice on non stock items (backport #53655) (#53687)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: shipping rule applied twice on non stock items (#53655)
2026-03-23 14:38:07 +05:30
nishkagosalia
2a47197859 chore: Adding new argument in status updater to skip qty validation
(cherry picked from commit dcd0509089)
2026-03-23 08:57:51 +00:00
mergify[bot]
5f9533f089 fix: PO should not be required for internal transfers (backport #53681) (#53684)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: PO should not be required for internal transfers (#53681)
2026-03-23 06:52:45 +00:00
MochaMind
eee1c36263 chore: update POT file (#53676) 2026-03-22 14:45:56 +01:00
rohitwaghchaure
543e374978 Merge pull request #53675 from frappe/mergify/bp/version-16-hotfix/pr-53673
fix: stock queue for SABB (backport #53673)
2026-03-22 13:20:18 +05:30
Rohit Waghchaure
f570a4cb5d fix: stock queue for SABB
(cherry picked from commit 3fcf308ed8)
2026-03-22 07:30:57 +00:00
rohitwaghchaure
18eb7bb4f4 Merge pull request #53670 from frappe/mergify/bp/version-16-hotfix/pr-53638
fix: deadlock issue for SLE (backport #53638)
2026-03-21 14:40:46 +05:30
Rohit Waghchaure
de41abaaf2 fix: deadlock issue for SLE
(cherry picked from commit f48b03c6ec)
2026-03-21 08:34:41 +00:00
mergify[bot]
077f39721a fix: do not overwrite expense account in stock entry (backport #53658) (#53661)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: do not overwrite expense account in stock entry (#53658)
2026-03-20 14:56:44 +05:30
Nishka Gosalia
3923dd1e3a Merge pull request #53648 from frappe/mergify/bp/version-16-hotfix/pr-53645
fix: Adding validation for operation time in BOM (backport #53645)
2026-03-19 22:27:07 +05:30
nishkagosalia
aac60b4c13 fix: test case 2026-03-19 22:05:58 +05:30
nishkagosalia
f1c93d4b98 fix: merge conflict 2026-03-19 21:02:53 +05:30
mergify[bot]
7ebed912cf fix: validate permission before updating status (backport #53651) (#53653)
* fix: validate permission before updating status (#53651)

(cherry picked from commit 8e17c722fb)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.py
#	erpnext/selling/doctype/sales_order/sales_order.py
#	erpnext/stock/doctype/purchase_receipt/purchase_receipt.py

* chore: resolve conflicts

---------

Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-03-19 15:28:01 +00:00
nishkagosalia
c38b252289 fix: Adding validation for operation time in BOM
(cherry picked from commit 7f70e62c30)

# Conflicts:
#	erpnext/manufacturing/doctype/job_card/test_job_card.py
2026-03-19 13:00:32 +00:00
ruthra kumar
ee19765c96 Merge pull request #53608 from ruthra-kumar/ci_lightmode_runner_v16
refactor(test): repo wide test suite refactor (backport #47910)
2026-03-19 13:35:08 +05:30
mergify[bot]
48e8944a86 fix(stock): fix email error message (backport #53606) (#53633)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): fix email error message (#53606)
2026-03-19 07:42:44 +00:00
mergify[bot]
a94bf6db06 fix(payment_schedule): using show_alert instead of msgprint for non-selection of payment schedule (backport #53623) (#53631)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(payment_schedule): using `show_alert` instead of `msgprint` for non-selection of payment schedule (#53623)
2026-03-19 12:57:45 +05:30
ruthra kumar
35f6bc5d30 refactor(test): remove all remaining reference to integration test 2026-03-19 12:57:12 +05:30
ruthra kumar
08ee50a902 refactor(test): cleanup; remove redundant attribute 2026-03-19 12:57:12 +05:30
ruthra kumar
3f35db5db1 refactor(test): make pick list deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
1c96348064 refactor(test): make item wise sales register deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
37d6978190 refactor(test): make purchase order deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
e3e4dae3bb refactor(test): make sales invoice deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
af614bd195 refactor(test): make location determinisitic 2026-03-19 12:57:12 +05:30
ruthra kumar
037fdd6882 refactor(test): make bank clearance deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
7cb662a54c refactor(test): make sales invoice deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
021789baf1 refactor(test): hardcoded names over dynamic 2026-03-19 12:57:12 +05:30
ruthra kumar
9f3afea27f refactor(test): use JSON for company master 2026-03-19 12:57:12 +05:30
ruthra kumar
7d0779c73c refactor(test): remove explicit call to master data setup 2026-03-19 12:57:12 +05:30
ruthra kumar
495e585ab6 refactor(test): hardcoded names over dynamic ones
Much faster bootstrap without those get_doc calls
2026-03-19 12:57:12 +05:30
ruthra kumar
41de44f905 refactor: move test bootstrap to module 2026-03-19 12:57:12 +05:30
ruthra kumar
5934670e99 refactor(test): speed up setup 2026-03-19 12:57:12 +05:30
ruthra kumar
5f56f61f86 refactor(test): make stock entry deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
e451b68619 refactor(test): remove redundant before_tests 2026-03-19 12:57:12 +05:30
ruthra kumar
aec5ba1864 refactor(test): make process deferred accounting deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
9e11b6cfb3 refactor(test): make bom deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
71ce7ff8ce refactor(test): make customer deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
fe8064c3e6 refactor(test): tax rule; removed setUpClass, tearDownClass 2026-03-19 12:57:12 +05:30
ruthra kumar
16bd107583 refactor(test): common make function 2026-03-19 12:57:12 +05:30
ruthra kumar
3f0dbbc17c refactor(test): make bom stock calculated deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
2bfd371526 refactor(test): make pos profile deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
78b0db7988 refactor(test): make pos opening entry deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
dba530bb47 refactor(test): make pos invoice merge log deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
61b40fdccc refactor(test): make pos closing deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
46a81bc7c4 refactor(test): make stock test_utils deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
ed9470387e refactor(test): make currency exchange deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
6426f63798 refactor(test): make sales partner target variance deterministic 2026-03-19 12:57:12 +05:30
ruthra kumar
1cc4b67098 refactor(test): make sales order analysis deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
87de91e5d0 refactor(test): make uae vat audit deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
67bb6a2d6a refactor(test): make uae vat 201 deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
35339fcc0e refactor(test): make job card deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
0c2a538491 refactor(test): make opportunity summary by sales stage deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
bfffbcfee9 refactor(test): make queries deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
b680aeb62c refactor(test): make item wise details deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
da85534118 refactor(test): make accounts controller deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
d69b9d1a54 refactor(test): make subcontracting controller deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
6c9b32287c refactor(test): make test mapper deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
a58ba3e7d4 refactor(test): make item wise inventory account deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
c96f5e3d8c refactor(test): make distributed discount deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
35d35a0588 refactor(test): make requested items order and receive deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
a1aff71ca5 refactor(test): make accounts/test/test_utils.py deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
40bb5c6ed0 refactor(test): make gross profit deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
34c3490227 refactor(test): make sales payment summary deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
b98899a6ac refactor(test): make consolidated trial balance report deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
63908ad6dc refactor(test): remove redundant tearDown, tearDownClass and rollback 2026-03-19 12:57:11 +05:30
ruthra kumar
b3507a569a refactor(test): make inventory dimension deterministic
fixed flaky test 'test_inventory_dimension'

use '3' precision for test_opening_balnace
2026-03-19 12:57:11 +05:30
ruthra kumar
e24c4fcb15 refactor(test): make item group deterministic
'Item Group C' follows 'Item Group B'. So `lft` will increase while
`rgt` stays the same.
2026-03-19 12:57:11 +05:30
ruthra kumar
dc5fa0f5e1 refactor(test): make packed item deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
cbc2eb33a5 chore: typo 2026-03-19 12:57:11 +05:30
ruthra kumar
b23570c1b3 refactor(test): remove redundant create_asset_category 2026-03-19 12:57:11 +05:30
ruthra kumar
3afd39ce03 refactor(test): make sales invoice deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
9bf9068df7 refactor(test): make item group deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
a5defce696 refactor(test): make timesheet deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
f6ccef2935 refactor(test): make task deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
dde6731545 refactor(test): make project deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
0d367fa25f refactor(test): make maintenance schedule deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
c91c169f40 refactor(test): make leads deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
678841c77e refactor(test): make purchase order deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
55ba1fa9aa refactor(test): make asset repair deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
6737ccac95 refactor(test): make asset deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
9cd52c245b refactor(test): make loyalty point entry deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
a0d928871d refactor(test): make dunning deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
21acafae79 refactor(test): make budget deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
b5b28f2e89 refactor(test): make auto match party deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
09b8ee869a refactor(test): make bank clearance deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
3c45a0ca44 refactor(test): remove explicit commit and dead code 2026-03-19 12:57:11 +05:30
ruthra kumar
fad451d6c2 refactor(test): rollback on tearDown 2026-03-19 12:57:11 +05:30
ruthra kumar
b8c68be0cb refactor(test): make irs supplier test deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
a110b20350 refactor(test): make party specific item deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
83d1f53eb1 refactor(test): make subcontracting receipt deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
4b9ae6b0cd refactor(test): make purchase receipt deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
20353e70a1 refactor(test): make stock reconciliation deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
020e28235a refactor(test): make subcontracting order deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
05e78848e3 refactor(test): make purchase receipt deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
d2f1962c2d refactor(test): make material request deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
d54f3c8c24 refactor(test): make stock ledger entry deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
40909af128 refactor(test): make item deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
b3fec97a83 refactor(test): make work order deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
52dfc32dba refactor(test): make purchase receipt deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
8867a7015c refactor: fix logical bug and make stock settings test deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
ac6621b0e8 refactor(test): make stock entry deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
f939d0d3d6 refactor(test): make serial no deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
820e0f88d3 refactor(test): make serial and batch bundle deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
12470c3145 refactor(test): make pick list deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
c437bfcd28 refactor(test): make packed item deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
dee513fa87 refactor(test): make material request deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
499213cafd refactor(test): make LCV deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
61745b9371 refactor(test): make item price deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
8a7f193334 refactor(test): make delivery trip deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
fd31c34581 refactor(test): make delivery note deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
671235d13c refactor(test): make transaction deletion record deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
bd5dcc04f0 refactor(test): make item group deterministic 2026-03-19 12:57:11 +05:30
ruthra kumar
2699ad15d2 refactor(test): make employee deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
2a6b497c06 refactor(test): make department deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
dd240c1070 refactor(test): make currency exchange deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
ec3a39c961 refactor(test): make test deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
381e0a65d1 refactor(test): make project deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
6824f3274a refactor(test): make sales order deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
3d4f145b16 refactor(test): make quotation deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
6b5f39d41b refactor(test): make production plan deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
4531902024 refactor(test): make job card tests deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
3ea14fc9be refactor(test): make bom tests deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
6a16c76bbc refactor(test): make bom update tool tests deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
bc82e67f27 refactor(test): make plaid settings deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
985ab09309 refactor(test): make financial reports deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
ef3736e582 refactor(test): make sales invoice deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
ad8d8e6541 refactor(test): make pos invoice deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
478473a295 refactor(test): better setup for loyalty point and POS Invoice 2026-03-19 12:57:10 +05:30
ruthra kumar
36e578e848 refactor(test): pos invoice tests are almost deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
a158fd1a78 refactor(test): make timesheet and activity type deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
44a10ea50d refactor(test): make maintenance schedule deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
8e0c8e1c80 refactor(test): make prospect deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
61cd154f0f refactor(test): make opportunity deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
10de2e348b refactor(test): remove empty IntegrationTestCase 2026-03-19 12:57:10 +05:30
ruthra kumar
2832aeb592 refactor(test): make tax withholding tests deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
d7840b5c45 refactor(test): ensure new bankers rounding method is set 2026-03-19 12:57:10 +05:30
ruthra kumar
98d43f5933 refactor(test): set precision in class setup 2026-03-19 12:57:10 +05:30
ruthra kumar
3fcb860d6d refactor(test): make sales invoice tests deterministic
- allow_negative_stock is required for test_taxes_merging_from_delivery_note
2026-03-19 12:57:10 +05:30
ruthra kumar
1e08962eb4 refactor(test): make purchase invoice tests deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
607f0789cc refactor: avoid name clash 2026-03-19 12:57:10 +05:30
ruthra kumar
9dd6cf2cb7 refactor(test): handle setup of Workstation Operation Component 2026-03-19 12:57:10 +05:30
ruthra kumar
eb31298f58 refactor(tests): make asset maintenance tests deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
e5d9d3cf7f refactor(test): incorrect fieldname for abbrevation 2026-03-19 12:57:10 +05:30
ruthra kumar
2c526ae856 refactor(test): make asset repair tests deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
b0d44847ac refactor(test): make supplier quotation deterministic 2026-03-19 12:57:10 +05:30
ruthra kumar
a434b89173 refactor(test): install supplier scorecard presets 2026-03-19 12:57:10 +05:30
ruthra kumar
25c8735298 chore: remove default templated test case 2026-03-19 12:57:10 +05:30
ruthra kumar
32c98d2a3e refactor(test): set_user utility method 2026-03-19 12:57:10 +05:30
ruthra kumar
29cf028f9a refactor: replace all IntegrationTestCase -> ERPNextTestSuite 2026-03-19 12:57:10 +05:30
ruthra kumar
4cdf5f542e refactor: utility to return default supplier scorecards 2026-03-19 12:57:10 +05:30
ruthra kumar
523007ecde refactor(test): flaky test in lead 2026-03-19 12:57:10 +05:30
ruthra kumar
400d6b5b62 refactor(test): flaky tax rule testsuite
- Make Sales Stage preset
2026-03-19 12:57:10 +05:30
ruthra kumar
602b30ecaf refactor(test): load shipping rule records 2026-03-19 12:57:10 +05:30
ruthra kumar
5928e289d1 refactor(test): fix flaky shareholder test 2026-03-19 12:57:10 +05:30
ruthra kumar
19fd69bda7 refactor(test): fix flaky process deferred accounting tests 2026-03-19 12:57:10 +05:30
ruthra kumar
1cee2a0917 refactor(test): flaky pricing rule tests 2026-03-19 12:57:10 +05:30
ruthra kumar
02475d4efa refactor(test): flaky stock entry; load records json 2026-03-19 12:57:10 +05:30
ruthra kumar
84250d0245 refactor(test): flaky pos invoice merge log test 2026-03-19 12:57:10 +05:30
ruthra kumar
978ac5ff31 refactor(test): flaky post invoice test 2026-03-19 12:57:10 +05:30
ruthra kumar
7ab253a905 refactor(test): flaky pos invoice test; load stock entry json 2026-03-19 12:57:10 +05:30
ruthra kumar
62d1336c43 refactor(test): flaky PE test; load currency exchange record 2026-03-19 12:57:10 +05:30
ruthra kumar
f79a3e0217 refactor: load journal entry test records and make holiday list 2026-03-19 12:57:10 +05:30
ruthra kumar
9a0c59df73 refactor: utility to load JSON records 2026-03-19 12:57:10 +05:30
ruthra kumar
6f8ac1ba28 refactor(test): update system settings in super() 2026-03-19 12:57:10 +05:30
ruthra kumar
0b7b4d9244 refactor(test): flaky test setup in pos closing entry 2026-03-19 12:57:10 +05:30
ruthra kumar
442dc6d3d0 refactor(test): fix flaky test setup for opening invoice creation 2026-03-19 12:57:10 +05:30
ruthra kumar
e939927bc3 refactor(test): flaky test setup in Exchange Rate Revaluation 2026-03-19 12:57:10 +05:30
ruthra kumar
8c1057088d refactor(test): flaky test data setup for coupon code 2026-03-19 12:57:10 +05:30
ruthra kumar
f0834cb2e8 refactor(test): make price list - more test records 2026-03-19 12:57:10 +05:30
ruthra kumar
04e2ffb966 refactor(test): flaky test data in bank reconciliation tool 2026-03-19 12:57:10 +05:30
ruthra kumar
015cf6fcb9 refactor(test): call super() method first 2026-03-19 12:57:10 +05:30
ruthra kumar
f31d2e74bc refactor(test): make customer 2026-03-19 12:57:10 +05:30
ruthra kumar
6fbca354ea refactor(test): make price list and update selling settings 2026-03-19 12:57:10 +05:30
ruthra kumar
1dbaa8d91f refactor(test): make item attribute 2026-03-19 12:57:10 +05:30
ruthra kumar
f526022302 refactor(test): make test accounts 2026-03-19 12:57:10 +05:30
ruthra kumar
8cbe0d2d35 refactor(test): make item tax template 2026-03-19 12:57:10 +05:30
ruthra kumar
ceca3299e7 refactor(test): make uom 2026-03-19 12:57:10 +05:30
ruthra kumar
654ebd3776 refactor(test): make item group 2026-03-19 12:57:10 +05:30
ruthra kumar
aa0f9219c8 refactor(test): make item 2026-03-19 12:57:10 +05:30
ruthra kumar
c041a94cc0 refactor(test): make warehouse 2026-03-19 12:57:10 +05:30
ruthra kumar
1e13426715 chore: typo in setup method 2026-03-19 12:57:10 +05:30
ruthra kumar
01f2d3699e refactor(test): make persistent location 2026-03-19 12:57:10 +05:30
ruthra kumar
348bb95268 refactor(test): setup fiscal years without any gap 2026-03-19 12:57:10 +05:30
ruthra kumar
2554750a59 refactor(test): make cost center 2026-03-19 12:57:10 +05:30
ruthra kumar
b5558d411b refactor: suppress welcome mail 2026-03-19 12:57:10 +05:30
ruthra kumar
f0b4b02358 refactor(test): even more master data setup 2026-03-19 12:57:10 +05:30
ruthra kumar
fbd2a181bd refactor(test): make all presets in setupclass 2026-03-19 12:57:10 +05:30
ruthra kumar
3aef8ffa24 refactor: temporary standing decorator for change_settings 2026-03-19 12:57:10 +05:30
ruthra kumar
f1dfac417d refactor: replace IntegrationTestCase with ERPNextTestCase repo-wide
- import ERPNextTestSuite
 - use it on test class
2026-03-19 12:57:07 +05:30
mergify[bot]
5b4e3e92df fix: set customer details on customer creation at login (backport #53509) (#53629)
Co-authored-by: Sakthivel Murugan S <129778327+ssakthivelmurugan@users.noreply.github.com>
fix: set customer details on customer creation at login (#53509)
2026-03-19 07:11:25 +00:00
mergify[bot]
2d1dd03483 fix(stock): handle NoneType error (backport #53593) (#53627)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix(stock): handle NoneType error (#53593)
2026-03-19 07:03:03 +00:00
mergify[bot]
077bf2d0ce refactor: remove test file import in stock ageing report (backport #53619) (#53626)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-19 06:55:47 +00:00
mergify[bot]
7edcef1248 fix: consider returned qty in subcontracting report (backport #53616) (#53621)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: consider returned qty in subcontracting report (#53616)
2026-03-19 11:52:24 +05:30
ruthra kumar
0fdc961a4b refactor(test): bare bones presets for company 2026-03-19 11:33:34 +05:30
ruthra kumar
88c6f61632 refactor(test): make persistent company records
'test_coa_based_on_country_template' made deterministic
2026-03-19 11:33:34 +05:30
ruthra kumar
b86954119f refactor(test): IntegraionTestCase -> python's built-in TestCase 2026-03-19 11:33:34 +05:30
ruthra kumar
018257096b chore: drop dead hook 2026-03-19 11:33:34 +05:30
ruthra kumar
fbf3373a87 chore: remove global dependencies 2026-03-19 11:33:34 +05:30
ruthra kumar
c2504760dd chore: remove IGNORE_TEST_RECORD_DEPENDENCIES 2026-03-19 11:33:34 +05:30
ruthra kumar
de34cf227a chore: remove EXTRA_TEST_RECORD_DEPENDENCIES 2026-03-19 11:33:34 +05:30
ruthra kumar
f7e4d07a7e chore: delete all test_records.json 2026-03-19 11:33:34 +05:30
ruthra kumar
1a6e96818d ci: run parallel test in lightmode
- modify individual test CI. let it be dormat for now.

Acked-by: ruthra kumar <ruthra@erpnext.com>
2026-03-19 11:33:34 +05:30
ruthra kumar
3704df04ab Merge pull request #53622 from frappe/mergify/bp/version-16-hotfix/pr-51509
fix: use system configured float precision for depreciation rate  (backport #51509)
2026-03-19 11:32:31 +05:30
khushi8112
b000224a93 test: set up float precision
(cherry picked from commit c0a85faa68)
2026-03-19 05:47:07 +00:00
khushi8112
0af4cd9098 fix: do not update float precision on setup
(cherry picked from commit 825e3717ca)
2026-03-19 05:47:07 +00:00
khushi8112
b855f30600 refactor: modify test cases to handle float precision rounded to 2 decimals
(cherry picked from commit 007258d657)
2026-03-19 05:47:06 +00:00
khushi8112
1efbc60df1 fix: use correct test class
(cherry picked from commit 8d186d6b3f)
2026-03-19 05:47:06 +00:00
khushi8112
dd7cc56dfe fix(test): Use the system-configured float precision
(cherry picked from commit 1296829b9c)
2026-03-19 05:47:06 +00:00
ruthra kumar
ba102e13c5 Merge pull request #53609 from frappe/mergify/bp/version-16-hotfix/pr-53011
refactor: use cache decorator in accounting dimensions (backport #53011)
2026-03-19 10:51:43 +05:30
ruthra kumar
38ba559d6e Merge pull request #53610 from frappe/mergify/bp/version-16-hotfix/pr-53027
refactor: remove frappe.flags from accounting dimensions filter (backport #53027)
2026-03-19 10:49:39 +05:30
mergify[bot]
10a40a6d9b fix: python error in manufacture entry if transfer against is job card (backport #53615) (#53618)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: python error in manufacture entry if transfer against is job card (#53615)
2026-03-19 05:15:51 +00:00
mergify[bot]
f394ead878 fix: check posting_date in args (backport #53303) (#53612)
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com>
fix: check posting_date in args (#53303)
2026-03-19 05:01:34 +00:00
mergify[bot]
2ccac6c479 fix: ignore cost center (backport #53063) (#53614)
Co-authored-by: Sowmya <106989392+SowmyaArunachalam@users.noreply.github.com>
fix: ignore cost center (#53063)
2026-03-19 04:46:51 +00:00
ruthra kumar
dbf795e810 refactor: remove frappe.flags from accounting dimensions filter
(cherry picked from commit 290f979fd3)
2026-03-19 01:43:35 +00:00
ruthra kumar
9889ef2455 refactor: remove frappe.flags and make use of cache decorator
(cherry picked from commit 565542879e)
2026-03-19 01:43:09 +00:00
Frappe PR Bot
8b10311a9b chore(release): Bumped to Version 16.10.1
## [16.10.1](https://github.com/frappe/erpnext/compare/v16.10.0...v16.10.1) (2026-03-18)

### Bug Fixes

* incorrect sle calculation when doc has project ([#53599](https://github.com/frappe/erpnext/issues/53599)) ([9a46aa3](9a46aa3106))
2026-03-18 13:42:27 +00:00
rohitwaghchaure
9a8f61e21f Merge pull request #53603 from frappe/mergify/bp/version-16/pr-53601
fix: incorrect sle calculation when doc has project (backport #53599) (backport #53601)
2026-03-18 19:10:58 +05:30
Mihir Kandoi
9a46aa3106 fix: incorrect sle calculation when doc has project (#53599)
(cherry picked from commit 6cb6a52ded)
(cherry picked from commit 55bad49cf0)
2026-03-18 13:38:39 +00:00
rohitwaghchaure
17f8aa9e2d Merge pull request #53601 from frappe/mergify/bp/version-16-hotfix/pr-53599
fix: incorrect sle calculation when doc has project (backport #53599)
2026-03-18 19:07:40 +05:30
Mihir Kandoi
55bad49cf0 fix: incorrect sle calculation when doc has project (#53599)
(cherry picked from commit 6cb6a52ded)
2026-03-18 13:20:32 +00:00
rohitwaghchaure
29c923a1f4 Merge pull request #53586 from frappe/mergify/bp/version-16-hotfix/pr-53246
feat: add cost center field to the stock entry accounting dimension tab (backport #53246)
2026-03-18 16:32:35 +05:30
mergify[bot]
91ee45a698 fix(stock): add company filter while fetching batches (backport #53369) (#53581)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix(stock): add company filter while fetching batches (#53369)
2026-03-18 13:30:29 +05:30
sudarshan-g
50da6937e1 feat: add cost center field to the stock entry accounting dimension tab
(cherry picked from commit 47772f4e77)
2026-03-18 06:20:28 +00:00
Frappe PR Bot
955f98cfe9 chore(release): Bumped to Version 16.10.0
# [16.10.0](https://github.com/frappe/erpnext/compare/v16.9.1...v16.10.0) (2026-03-18)

### Bug Fixes

* add icon in clear demo data ([0c9ce93](0c9ce9306f))
* add item_name to quick entry fields in Item doctype (backport [#53530](https://github.com/frappe/erpnext/issues/53530)) ([#53533](https://github.com/frappe/erpnext/issues/53533)) ([a695a11](a695a11130))
* add validation in bom creator function (backport [#53364](https://github.com/frappe/erpnext/issues/53364)) ([#53368](https://github.com/frappe/erpnext/issues/53368)) ([4af54a7](4af54a7ac7))
* Append existing ignored doctypes in Journal Entry on_cancel instead of overwriting ([875114d](875114d33c))
* **banking:** include paid purchase invoices in reports and bank clearance ([#52675](https://github.com/frappe/erpnext/issues/52675)) ([c9efcb7](c9efcb7822))
* broke cost center filter in get outstanding reference docs ([60a9c08](60a9c08f0d))
* change "Date" label to "Posting Date" in Sales Invoice and Purchase Invoice (backport [#53503](https://github.com/frappe/erpnext/issues/53503)) ([#53517](https://github.com/frappe/erpnext/issues/53517)) ([e72f398](e72f398b7c))
* correct overlap detection in JobCard.has_overlap (backport [#53473](https://github.com/frappe/erpnext/issues/53473)) ([#53523](https://github.com/frappe/erpnext/issues/53523)) ([c8bb55f](c8bb55f35b))
* correctly group RMs of same phantom from different FG ([efce145](efce145dad))
* Creating new item price incase of changes in expired item price (backport [#53534](https://github.com/frappe/erpnext/issues/53534)) ([#53545](https://github.com/frappe/erpnext/issues/53545)) ([e2a34ab](e2a34ab3fe))
* **delivery note:** avoid maintaining si_detail on return delivery note (backport [#52456](https://github.com/frappe/erpnext/issues/52456)) ([#53353](https://github.com/frappe/erpnext/issues/53353)) ([82b97ab](82b97abbad))
* do not modify rate in the child item merely for comparison (backport [#53301](https://github.com/frappe/erpnext/issues/53301)) ([#53376](https://github.com/frappe/erpnext/issues/53376)) ([42cfbae](42cfbae782))
* do not set valuation rate for invoice without update stock ([7af4aca](7af4acab29))
* enable logs to track changes in doctype. (backport [#53491](https://github.com/frappe/erpnext/issues/53491)) ([#53524](https://github.com/frappe/erpnext/issues/53524)) ([afe8e3a](afe8e3a023))
* handle NoneType error while creating a item (backport [#53313](https://github.com/frappe/erpnext/issues/53313)) ([#53351](https://github.com/frappe/erpnext/issues/53351)) ([4a7fdd1](4a7fdd1f91))
* initialize all tax columns to resolve Key error in `item_wise_sales_register` and `item_wise_purchase_register` reports (backport [#53323](https://github.com/frappe/erpnext/issues/53323)) ([#53582](https://github.com/frappe/erpnext/issues/53582)) ([573a402](573a402ee5))
* **italy:** fix e-invoice ScontoMaggiorazione structure and included_in_print_rate support (backport [#53334](https://github.com/frappe/erpnext/issues/53334)) ([#53569](https://github.com/frappe/erpnext/issues/53569)) ([535543d](535543d406))
* **manufacturing:** update working hours validation (backport [#53559](https://github.com/frappe/erpnext/issues/53559)) ([#53567](https://github.com/frappe/erpnext/issues/53567)) ([49ac166](49ac166f9e))
* move show_general_ledger to Asset Repair form events ([0a5fe99](0a5fe99d4a))
* NoneType error when template description is to be copied to variant (backport [#53358](https://github.com/frappe/erpnext/issues/53358)) ([#53366](https://github.com/frappe/erpnext/issues/53366)) ([24910cf](24910cf2d2))
* **p&l_statement:** disable accumulated value filter by default (backport [#53488](https://github.com/frappe/erpnext/issues/53488)) ([#53490](https://github.com/frappe/erpnext/issues/53490)) ([1ecc04c](1ecc04c7a2))
* precision issue in production plan (backport [#53370](https://github.com/frappe/erpnext/issues/53370)) ([#53374](https://github.com/frappe/erpnext/issues/53374)) ([6660e64](6660e643bb))
* re-calculate taxes and totals after resetting bundle item rate (backport [#53342](https://github.com/frappe/erpnext/issues/53342)) ([#53350](https://github.com/frappe/erpnext/issues/53350)) ([541bfb6](541bfb664b))
* **regional:** rename duplicate Customer fields in Italy setup (backport [#50921](https://github.com/frappe/erpnext/issues/50921)) ([#53398](https://github.com/frappe/erpnext/issues/53398)) ([41bcf96](41bcf96601))
* remove payables and receivables workspace ([c48a886](c48a8868c2))
* remove redundant pos print format ([#53348](https://github.com/frappe/erpnext/issues/53348)) ([270a294](270a294e81))
* remove supplier selection dialog when creating Purchase Order from Material Request (backport [#53391](https://github.com/frappe/erpnext/issues/53391)) ([#53476](https://github.com/frappe/erpnext/issues/53476)) ([3603048](36030483e5))
* remove workspace sidebar for payables and receivables ([4e5703c](4e5703c223))
* sales order indicator should be based on available qty rather th… (backport [#53456](https://github.com/frappe/erpnext/issues/53456)) ([#53458](https://github.com/frappe/erpnext/issues/53458)) ([ab8fe14](ab8fe146ab))
* **sales_invoice:** reset payment methods on `pos_profile` change (backport [#53514](https://github.com/frappe/erpnext/issues/53514)) ([#53561](https://github.com/frappe/erpnext/issues/53561)) ([4d197b1](4d197b1b7c))
* **serial_and_batch_bundle_selector:** handle CSV attachment properly (backport [#53460](https://github.com/frappe/erpnext/issues/53460)) ([#53462](https://github.com/frappe/erpnext/issues/53462)) ([3b2ae7b](3b2ae7ba4f))
* stock adjustment entry ([cecdcff](cecdcffce8))
* **stock:** fix the property setter (backport [#53422](https://github.com/frappe/erpnext/issues/53422)) ([#53574](https://github.com/frappe/erpnext/issues/53574)) ([9ccafd3](9ccafd30be))
* **support-settings:** disable the auto-close tickets feature if `close_issue_after_days` is set to 0 (backport [#53499](https://github.com/frappe/erpnext/issues/53499)) ([#53505](https://github.com/frappe/erpnext/issues/53505)) ([b7400b9](b7400b9b35))
* update child item schedule_date and prevent past dates (backport [#53298](https://github.com/frappe/erpnext/issues/53298)) ([#53346](https://github.com/frappe/erpnext/issues/53346)) ([a4d2c34](a4d2c34dde))
* update item description in Production Plan Assembly Items table ([d43c04d](d43c04df88))
* update label on company change ([bb98acb](bb98acb0c0))
* use bom source warehouse in WO created from PP (backport [#53478](https://github.com/frappe/erpnext/issues/53478)) ([#53480](https://github.com/frappe/erpnext/issues/53480)) ([31ab757](31ab75787e))
* use correct filter to get the composite assets ([82eb200](82eb200c73))
* use qb to prevent incorrect sql due to user permissions ([236f1bb](236f1bbfdb))
* use same label ([10cb6f8](10cb6f8306))
* valuation rate for no Use Batch wise Valuation batches ([8f31b0d](8f31b0dccd))

### Features

* Adding requested qty in packed item (backport [#53486](https://github.com/frappe/erpnext/issues/53486)) ([#53521](https://github.com/frappe/erpnext/issues/53521)) ([8753ed9](8753ed9992))
* show subsidiary companies value in purchase analytics ([c8afc04](c8afc04957))
* **stock:** implement fallback logic for Delivery Trip address mapping (backport [#53260](https://github.com/frappe/erpnext/issues/53260)) ([#53444](https://github.com/frappe/erpnext/issues/53444)) ([6ca5f35](6ca5f355bf))
2026-03-18 04:58:22 +00:00
diptanilsaha
bd16af46b6 Merge pull request #53576 from frappe/version-16-hotfix 2026-03-18 10:26:47 +05:30
mergify[bot]
dd0013e844 chore: make supplier data expanded by default in PI (backport #53565) (#53579)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-18 10:08:46 +05:30
mergify[bot]
573a402ee5 fix: initialize all tax columns to resolve Key error in item_wise_sales_register and item_wise_purchase_register reports (backport #53323) (#53582)
Co-authored-by: Lakshit Jain <ljain112@gmail.com>
fix: initialize all tax columns to resolve Key error in `item_wise_sales_register` and `item_wise_purchase_register` reports (#53323)
2026-03-18 09:00:33 +05:30
Khushi Rawat
0089f7a1d5 Merge pull request #53572 from frappe/mergify/bp/version-16-hotfix/pr-53446
fix: fetch accounting dimensions from child row in asset creation (backport #53446)
2026-03-18 00:14:49 +05:30
mergify[bot]
4d197b1b7c fix(sales_invoice): reset payment methods on pos_profile change (backport #53514) (#53561)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(sales_invoice): reset payment methods on `pos_profile` change (#53514)
2026-03-17 17:21:11 +00:00
mergify[bot]
535543d406 fix(italy): fix e-invoice ScontoMaggiorazione structure and included_in_print_rate support (backport #53334) (#53569)
Co-authored-by: Arturo <tamburro92@users.noreply.github.com>
fix(italy): fix e-invoice ScontoMaggiorazione structure and included_in_print_rate support (#53334)
2026-03-17 22:09:25 +05:30
mergify[bot]
49ac166f9e fix(manufacturing): update working hours validation (backport #53559) (#53567)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(manufacturing): update working hours validation (#53559)
2026-03-17 22:08:44 +05:30
mergify[bot]
9ccafd30be fix(stock): fix the property setter (backport #53422) (#53574)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
fix(stock): fix the property setter (#53422)
2026-03-17 22:07:43 +05:30
mergify[bot]
5515346e24 chore: add documentation link in valuation method field (backport #53564) (#53571)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-17 22:01:00 +05:30
[Kesavan-001]
2df491bf22 Fix:Cost center mapping issue
(cherry picked from commit e0fb31f81e)
2026-03-17 16:08:34 +00:00
[Kesavan-001]
3e75d4ea60 Fix:Cost center mapping issue
(cherry picked from commit a084feba96)
2026-03-17 16:08:34 +00:00
[Kesavan-001]
748467f27f Fix:Cost center mapping issue
(cherry picked from commit 10fe8580d5)
2026-03-17 16:08:34 +00:00
diptanilsaha
a8bf6ada89 Merge branch 'version-16' into version-16-hotfix 2026-03-17 20:20:04 +05:30
ruthra kumar
75c9512e38 Merge pull request #53552 from frappe/mergify/bp/version-16-hotfix/pr-53535
fix: remove payables and receivables workspace (backport #53535)
2026-03-17 18:40:36 +05:30
ravibharathi656
4e5703c223 fix: remove workspace sidebar for payables and receivables 2026-03-17 18:23:40 +05:30
ruthra kumar
46d492df65 Merge pull request #53553 from frappe/mergify/bp/version-16-hotfix/pr-53322
fix: add icon in clear demo data (backport #53322)
2026-03-17 17:45:08 +05:30
ruthra kumar
f7a8e64818 Merge pull request #53550 from frappe/mergify/bp/version-16-hotfix/pr-53548
fix: incorrect user perms in queries (backport #53548)
2026-03-17 17:13:52 +05:30
ravibharathi656
c48a8868c2 fix: remove payables and receivables workspace
(cherry picked from commit 26a9646407)

# Conflicts:
#	erpnext/patches.txt
2026-03-17 17:08:45 +05:30
sokumon
10cb6f8306 fix: use same label
(cherry picked from commit ed3444de5a)
2026-03-17 11:36:20 +00:00
sokumon
0c9ce9306f fix: add icon in clear demo data
(cherry picked from commit 413b119ec6)
2026-03-17 11:36:19 +00:00
ruthra kumar
1786c04298 Merge pull request #53529 from frappe/mergify/bp/version-16-hotfix/pr-52675
fix(banking): include paid purchase invoices in reports and bank clearance (backport #52675)
2026-03-17 17:00:59 +05:30
ruthra kumar
236f1bbfdb fix: use qb to prevent incorrect sql due to user permissions
(cherry picked from commit 04b967bd6d)
2026-03-17 16:44:02 +05:30
ruthra kumar
d352322688 chore: remove incorrect import
(cherry picked from commit fc2edfbded)

# Conflicts:
#	erpnext/controllers/queries.py
2026-03-17 11:02:54 +00:00
mergify[bot]
e2a34ab3fe fix: Creating new item price incase of changes in expired item price (backport #53534) (#53545)
Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
Co-authored-by: Nishka Gosalia <nishkagosalia@Nishkas-MacBook-Air.local>
fix: Creating new item price incase of changes in expired item price (#53534)
2026-03-17 10:24:35 +00:00
rohitwaghchaure
ccecc2bd70 Merge pull request #53538 from frappe/mergify/bp/version-16-hotfix/pr-53500
fix: valuation rate for no Use Batch wise Valuation batches (backport #53500)
2026-03-17 15:04:29 +05:30
Rohit Waghchaure
8f31b0dccd fix: valuation rate for no Use Batch wise Valuation batches
(cherry picked from commit 4befa15198)
2026-03-17 08:43:27 +00:00
Nikhil Kothari
427d5cf502 chore: remove conflicts 2026-03-17 11:26:28 +05:30
Nikhil Kothari
a8e7d82746 Merge branch 'version-16-hotfix' into mergify/bp/version-16-hotfix/pr-52675 2026-03-17 11:25:06 +05:30
rohitwaghchaure
b2d14bd947 Merge pull request #53519 from frappe/mergify/bp/version-16-hotfix/pr-53513
fix: do not set valuation rate for invoice without update stock (backport #53513)
2026-03-17 11:23:39 +05:30
mergify[bot]
a695a11130 fix: add item_name to quick entry fields in Item doctype (backport #53530) (#53533)
Co-authored-by: Abdus Samad <120767334+Samad-11@users.noreply.github.com>
fix: add item_name to quick entry fields in Item doctype (#53530)
2026-03-17 05:43:50 +00:00
mergify[bot]
afe8e3a023 fix: enable logs to track changes in doctype. (backport #53491) (#53524)
* fix: enable logs to track changes in doctype. (#53491)

Co-authored-by: jeraldin2003 <jeraldin2003>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
(cherry picked from commit e2667ab098)

# Conflicts:
#	erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json

* chore: resolve conflicts

---------

Co-authored-by: Jeraldin P J <113301032+jeraldin2003@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-17 05:32:00 +00:00
mergify[bot]
c8bb55f35b fix: correct overlap detection in JobCard.has_overlap (backport #53473) (#53523)
Co-authored-by: Sanjesh-Raju <sanjesh@tridotstech.com>
Co-authored-by: Sanjesh <rsanjesh64@gmail.com>
Co-authored-by: Tridots Tech <info@tridotstech.com>
fix: correct overlap detection in JobCard.has_overlap (#53473)
2026-03-17 10:42:37 +05:30
Nikhil Kothari
c9efcb7822 fix(banking): include paid purchase invoices in reports and bank clearance (#52675)
* fix(banking): include paid purchase invoices in reports and bank clearance

* fix: condition for amounts not reflected in system

* fix: set Sales Invoice to be the payment document in bank rec

* fix: add additional filter for `is_paid`

* fix: added is_paid

* fix: added invoice number in bank clearance tool

* chore: make requested changes

* fix: exclude opening JEs

* fix: bring back banking icon in desktop

(cherry picked from commit ef32622166)

# Conflicts:
#	erpnext/accounts/doctype/bank_clearance/bank_clearance.py
2026-03-17 04:48:44 +00:00
mergify[bot]
8753ed9992 feat: Adding requested qty in packed item (backport #53486) (#53521)
* feat: Adding requested qty in packed item (#53486)

* feat: Adding requested qty in packed item

* fix: correct import path

---------

Co-authored-by: Nishka Gosalia <nishkagosalia@Nishkas-MacBook-Air.local>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
(cherry picked from commit 953f089c06)

# Conflicts:
#	erpnext/patches.txt

* chore: resolve conflicts

---------

Co-authored-by: Nishka Gosalia <58264710+nishkagosalia@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-16 18:51:35 +00:00
mergify[bot]
e72f398b7c fix: change "Date" label to "Posting Date" in Sales Invoice and Purchase Invoice (backport #53503) (#53517)
Co-authored-by: Abdus Samad <120767334+Samad-11@users.noreply.github.com>
fix: change "Date" label to "Posting Date" in Sales Invoice and Purchase Invoice (#53503)
2026-03-16 18:26:52 +00:00
Rohit Waghchaure
7af4acab29 fix: do not set valuation rate for invoice without update stock
(cherry picked from commit bec9e48435)
2026-03-16 18:03:55 +00:00
rohitwaghchaure
60163f3df6 Merge pull request #53498 from frappe/mergify/bp/version-16-hotfix/pr-53495
fix: stock adjustment entry (backport #53495)
2026-03-16 18:06:57 +05:30
mergify[bot]
b7400b9b35 fix(support-settings): disable the auto-close tickets feature if close_issue_after_days is set to 0 (backport #53499) (#53505)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(support-settings): disable the auto-close tickets feature if `close_issue_after_days` is set to 0 (#53499)
2026-03-16 12:10:19 +00:00
Rohit Waghchaure
cecdcffce8 fix: stock adjustment entry
(cherry picked from commit af3067ee23)
2026-03-16 09:48:16 +00:00
mergify[bot]
1ecc04c7a2 fix(p&l_statement): disable accumulated value filter by default (backport #53488) (#53490)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(p&l_statement): disable accumulated value filter by default (#53488)
2026-03-16 12:53:48 +05:30
mergify[bot]
31ab75787e fix: use bom source warehouse in WO created from PP (backport #53478) (#53480)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-16 11:05:11 +05:30
ruthra kumar
e1d9598075 Merge pull request #53419 from frappe/mergify/bp/version-16-hotfix/pr-53415
fix: broke cost center filter in get outstanding reference docs (backport #53415)
2026-03-16 10:08:57 +05:30
mergify[bot]
36030483e5 fix: remove supplier selection dialog when creating Purchase Order from Material Request (backport #53391) (#53476)
Co-authored-by: jeraldin2003 <jeraldin2003>
Co-authored-by: Nikhil Kothari <nik.kothari22@live.com>
Co-authored-by: Jeraldin P J <113301032+jeraldin2003@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: remove supplier selection dialog when creating Purchase Order from Material Request (#53391)
2026-03-16 04:33:36 +00:00
mergify[bot]
9e40f87339 chore: add docs to project URLs (backport #53467) (#53469)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-03-15 15:06:59 +01:00
MochaMind
a5e92785b7 chore: update POT file (#53465) 2026-03-15 14:32:05 +01:00
Frappe PR Bot
99a81db4d9 chore(release): Bumped to Version 16.9.1
## [16.9.1](https://github.com/frappe/erpnext/compare/v16.9.0...v16.9.1) (2026-03-15)

### Bug Fixes

* add validation in bom creator function (backport [#53364](https://github.com/frappe/erpnext/issues/53364)) ([#53463](https://github.com/frappe/erpnext/issues/53463)) ([253e7a9](253e7a9398))
2026-03-15 08:22:01 +00:00
mergify[bot]
253e7a9398 fix: add validation in bom creator function (backport #53364) (#53463)
* fix: add validation in bom creator function (#53364)

(cherry picked from commit 9c0c39381f)

# Conflicts:
#	erpnext/manufacturing/doctype/bom_creator/bom_creator.py

* chore: resolve conflict

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-03-15 13:50:34 +05:30
mergify[bot]
3b2ae7ba4f fix(serial_and_batch_bundle_selector): handle CSV attachment properly (backport #53460) (#53462)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
fix(serial_and_batch_bundle_selector): handle CSV attachment properly (#53460)
2026-03-15 07:44:59 +00:00
mergify[bot]
ab8fe146ab fix: sales order indicator should be based on available qty rather th… (backport #53456) (#53458) 2026-03-15 09:45:54 +05:30
mergify[bot]
6ca5f355bf feat(stock): implement fallback logic for Delivery Trip address mapping (backport #53260) (#53444) 2026-03-14 05:58:04 +00:00
ruthra kumar
c73a05356b Merge pull request #53426 from frappe/mergify/bp/version-16-hotfix/pr-53423
refactor: disable total row in trends report (backport #53423)
2026-03-13 18:20:47 +05:30
ruthra kumar
5fac73c920 refactor: disable total row in trends report
(cherry picked from commit 4dbc72b301)
2026-03-13 12:33:15 +00:00
ruthra kumar
60a9c08f0d fix: broke cost center filter in get outstanding reference docs
(cherry picked from commit 7dfe36fdce)
2026-03-13 09:55:42 +00:00
Khushi Rawat
966eaae3a0 Merge pull request #53417 from frappe/mergify/bp/version-16-hotfix/pr-53416
feat: show subsidiary companies value in purchase analytics (backport #53416)
2026-03-13 14:48:55 +05:30
khushi8112
c8afc04957 feat: show subsidiary companies value in purchase analytics
(cherry picked from commit 9f755ad65a)
2026-03-13 09:12:35 +00:00
mergify[bot]
41c59ac165 Revert "fix(regional): rename duplicate Customer fields in Italy setup" (backport #53409) (#53411)
* Revert "fix(regional): rename duplicate Customer fields in Italy setup" (#53409)

(cherry picked from commit bd87a7e612)

# Conflicts:
#	erpnext/patches.txt

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-13 07:48:28 +00:00
Khushi Rawat
9ac52f0b03 Merge pull request #53401 from frappe/mergify/bp/version-16-hotfix/pr-53390
refactor: show company currency in purchase amount label (backport #53390)
2026-03-13 11:40:25 +05:30
Smit Vora
8dcd89b455 Merge pull request #53404 from frappe/mergify/bp/version-16-hotfix/pr-53396
fix: correctly group RMs of same phantom from different FG (backport #53396)
2026-03-13 10:04:35 +05:30
Smit Vora
89b7e11381 chore: phantom qty unused in sub_assembly_items
(cherry picked from commit b1e1c65774)
2026-03-13 04:15:07 +00:00
Smit Vora
f508f4149f test: ensure phantom BOM explosion across all items
(cherry picked from commit 1975ae4486)
2026-03-13 04:15:07 +00:00
Smit Vora
efce145dad fix: correctly group RMs of same phantom from different FG
(cherry picked from commit e57de4311c)
2026-03-13 04:15:06 +00:00
khushi8112
bb98acb0c0 fix: update label on company change
(cherry picked from commit 6219a9e6f0)
2026-03-12 19:19:15 +00:00
khushi8112
abc463bfb8 refactor: show company currency in purchase amount label
(cherry picked from commit b4c82c0f1a)
2026-03-12 19:19:14 +00:00
mergify[bot]
41bcf96601 fix(regional): rename duplicate Customer fields in Italy setup (backport #50921) (#53398)
* fix(regional): rename duplicate Customer fields in Italy setup (#50921)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
(cherry picked from commit c6efc403cd)

# Conflicts:
#	erpnext/patches.txt

* chore: resolve conflicts

---------

Co-authored-by: Solede <lorenzo.caldara@gmail.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-12 15:22:22 +00:00
Khushi Rawat
0685c0b9ff Merge pull request #53380 from frappe/mergify/bp/version-16-hotfix/pr-53379
fix: use correct filter to get the composite assets (backport #53379)
2026-03-12 15:16:57 +05:30
khushi8112
82eb200c73 fix: use correct filter to get the composite assets
(cherry picked from commit f5a3227349)
2026-03-12 09:40:56 +00:00
mergify[bot]
4af54a7ac7 fix: add validation in bom creator function (backport #53364) (#53368)
* fix: add validation in bom creator function (#53364)

(cherry picked from commit 9c0c39381f)

# Conflicts:
#	erpnext/manufacturing/doctype/bom_creator/bom_creator.py

* chore: resolve conflicts

---------

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-12 09:35:19 +00:00
mergify[bot]
42cfbae782 fix: do not modify rate in the child item merely for comparison (backport #53301) (#53376)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: do not modify rate in the child item merely for comparison (#53301)
2026-03-12 09:27:04 +00:00
mergify[bot]
6660e643bb fix: precision issue in production plan (backport #53370) (#53374)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: precision issue in production plan (#53370)
2026-03-12 09:14:50 +00:00
Khushi Rawat
9a92fc117a Merge pull request #53372 from frappe/mergify/bp/version-16-hotfix/pr-53371
fix: move show_general_ledger to Asset Repair form events (backport #53371)
2026-03-12 14:11:48 +05:30
khushi8112
0a5fe99d4a fix: move show_general_ledger to Asset Repair form events
(cherry picked from commit ac124bdc7e)
2026-03-12 08:35:55 +00:00
Ejaaz Khan
d1d1efdcd1 Merge pull request #53360 from frappe/mergify/bp/version-16-hotfix/pr-53348
fix: remove redundant pos print format (backport #53348)
2026-03-12 12:53:10 +05:30
mergify[bot]
24910cf2d2 fix: NoneType error when template description is to be copied to variant (backport #53358) (#53366)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: NoneType error when template description is to be copied to variant (#53358)
2026-03-12 06:50:55 +00:00
mergify[bot]
ac9ec7e34a refactor: supplier quotation comparision report button should start f… (backport #53361) (#53363)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-03-12 06:19:40 +00:00
Ejaaz Khan
270a294e81 fix: remove redundant pos print format (#53348)
(cherry picked from commit e4d79c6246)
2026-03-12 06:02:51 +00:00
mergify[bot]
4a7fdd1f91 fix: handle NoneType error while creating a item (backport #53313) (#53351)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix: handle NoneType error while creating a item (#53313)
2026-03-12 05:51:46 +00:00
mergify[bot]
09279f08e3 Feat/shipment default contact (backport #53029) (#53355)
Co-authored-by: David <52141166+sdavidbastos@users.noreply.github.com>
2026-03-12 05:47:32 +00:00
mergify[bot]
82b97abbad fix(delivery note): avoid maintaining si_detail on return delivery note (backport #52456) (#53353)
Co-authored-by: NaviN <118178330+Navin-S-R@users.noreply.github.com>
fix(delivery note): avoid maintaining si_detail on return delivery note (#52456)
2026-03-12 05:26:02 +00:00
mergify[bot]
541bfb664b fix: re-calculate taxes and totals after resetting bundle item rate (backport #53342) (#53350)
Co-authored-by: V Shankar <shankarv292002@gmail.com>
fix: re-calculate taxes and totals after resetting bundle item rate (#53342)
2026-03-12 05:22:27 +00:00
mergify[bot]
a4d2c34dde fix: update child item schedule_date and prevent past dates (backport #53298) (#53346)
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com>
fix: update child item schedule_date and prevent past dates (#53298)
2026-03-12 10:30:15 +05:30
Nihantra C. Patel
a857f0b5c2 Merge pull request #53336 from frappe/mergify/bp/version-16-hotfix/pr-53327
fix: Append existing ignored doctypes in Journal Entry on_cancel instead of overwriting (backport #53327)
2026-03-11 16:29:01 +05:30
Nihantra Patel
875114d33c fix: Append existing ignored doctypes in Journal Entry on_cancel instead of overwriting
(cherry picked from commit 39e10c4ab0)
2026-03-11 10:41:48 +00:00
ruthra kumar
4f8b948b91 Merge pull request #53330 from frappe/mergify/bp/version-16-hotfix/pr-53326
refactor: make cost center editable in payment entry deduction (backport #53326)
2026-03-11 15:10:32 +05:30
ruthra kumar
bdc3b0666d refactor: make cost center editable in payment entry deduction
(cherry picked from commit 078b22d985)
2026-03-11 09:23:30 +00:00
Mihir Kandoi
b7b7ec1fba Merge pull request #53325 from frappe/mergify/bp/version-16-hotfix/pr-53312
fix: update item description in Production Plan Assembly Items table (backport #53312)
2026-03-11 14:52:02 +05:30
Parameshwari Palanisamy
b9b551f248 Update production_plan.py
(cherry picked from commit 39e68a9ce7)
2026-03-11 08:49:28 +00:00
creative-paramu
d43c04df88 fix: update item description in Production Plan Assembly Items table
(cherry picked from commit 19533551f4)
2026-03-11 08:49:28 +00:00
Frappe PR Bot
c791d2853a chore(release): Bumped to Version 16.9.0
# [16.9.0](https://github.com/frappe/erpnext/compare/v16.8.3...v16.9.0) (2026-03-10)

### Bug Fixes

* add clear demo data in sidebar ([8e8a7b2](8e8a7b2686))
* add clear demo data in sidebar (backport [#53177](https://github.com/frappe/erpnext/issues/53177)) ([#53197](https://github.com/frappe/erpnext/issues/53197)) ([12ccc38](12ccc3881b))
* allow payment_request to be created in draft ([29d565b](29d565b9de))
* allow user to make QI after submission not working ([6fdb5d4](6fdb5d486a))
* balance qty for inv dimension ([fb17a00](fb17a00fb6))
* better validation message for Purchase Invoice with Update Stock ([839f5f6](839f5f6a29))
* bom UX issues ([733191e](733191eae2))
* consider payment term only when enabled ([1470a79](1470a79a1b))
* disallow all actions on job card if work order is closed ([57aab56](57aab56baa))
* do not update fg_completed_qty when changing qty of fg line item ([8463cf8](8463cf88df))
* fetch payment terms from quotation ([b2f6953](b2f695310c))
* **gross-profit:** apply precision-based rounding to grouped totals ([c6e01aa](c6e01aa1eb))
* handle payment terms template when disabled ([80c2053](80c20531aa))
* **help:** escape query (backport [#53192](https://github.com/frappe/erpnext/issues/53192)) ([#53195](https://github.com/frappe/erpnext/issues/53195)) ([83f2fad](83f2fadbcf))
* HRMS test cases failing due to validation in item ([10538d5](10538d58ad))
* implement coderabbit suggested changes ([b619f6d](b619f6d906))
* **manufacturing:** show returned qty in progress bar ([f853ef9](f853ef9fec))
* migration patch ([7b44e41](7b44e412d9))
* patch failing ([1a62d32](1a62d324fd))
* patch to migrate checkbox data into select ([4d0e28a](4d0e28a608))
* **project template:** clear subject when task is empty ([c8560fa](c8560fa0d3))
* removed non existent patch ([77ec678](77ec67869c))
* **selling:** update delivery date in line items ([6b42a7e](6b42a7e454))
* set default list view columns and filters for sales, purchase and accounts module ([f9a3869](f9a38696b6))
* set default to 1 ([3b7410f](3b7410f2d3))
* skip asset sale processing for internal transfer invoices ([12cfd8e](12cfd8e052))
* stock balance report qty ([699a683](699a683b8e))
* **task:** allow is_template field in quick entry ([2ccf8d0](2ccf8d050f))
* test case ([27c3c1d](27c3c1dee0))
* test cases fixes related to new select box change ([3f11d0b](3f11d0b8ad))
* **UI:** improve asset action buttons group ([78074c0](78074c0cdd))
* **UI:** reposition fields for better UX ([6c23d5b](6c23d5b682))
* update user status depends on employee status ([c7da8e2](c7da8e2471))
* updating costing based on employee change in timesheet ([d251c94](d251c94ea3))
* validation for cancellation ([8f02184](8f02184c80))
* WO produced qty should be calculated using finished item child table transfer qty ([78fa2c5](78fa2c5477))

### Features

* allowing rate modification in update item in quotation ([69b2170](69b217065c))
* **manufacturing:** show disassembled qty in progress bar ([38e5d29](38e5d295c7))
* option to enable serial / batch features ([93a5974](93a597410e))
* organization desktop icon ([e89aaca](e89aaca870))
* **selling-settings:** add checkbox to recalculate payment date ([f7dd730](f7dd730bc3))
2026-03-10 14:59:58 +00:00
ruthra kumar
95ef5b513e Merge pull request #53292 from frappe/version-16-hotfix
chore: release v16
2026-03-10 20:19:47 +05:30
ruthra kumar
46d8028fcc Merge pull request #53300 from frappe/mergify/bp/version-16-hotfix/pr-53256
fix: set default list view columns and filters for sales, purchase and accounts module (backport #53256)
2026-03-10 18:15:32 +05:30
ruthra kumar
c7da21812a chore: resolve conflicts 2026-03-10 17:58:37 +05:30
Nabin Hait
f9a38696b6 fix: set default list view columns and filters for sales, purchase and accounts module
(cherry picked from commit 9cf529215f)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
#	erpnext/buying/doctype/supplier/supplier.json
#	erpnext/stock/doctype/delivery_note/delivery_note.json
2026-03-10 12:22:40 +00:00
ruthra kumar
8f4a6d08d4 Merge pull request #53299 from frappe/mergify/bp/version-16-hotfix/pr-52636
refactor: enhance chart of accounts for India with account categories (backport #52636)
2026-03-10 17:52:39 +05:30
Abdeali Chharchhodawala
edf2f53082 Merge pull request #52636 from Abdeali099/Abdeali/india-coa
refactor: enhance chart of accounts for India with account categories
(cherry picked from commit 0d42faac2e)
2026-03-10 11:51:57 +00:00
ruthra kumar
cc2be4be39 Merge pull request #53297 from frappe/mergify/bp/version-16-hotfix/pr-53071
fix(gross-profit): apply precision-based rounding to grouped totals (backport #53071)
2026-03-10 16:57:25 +05:30
Navin-S-R
c6e01aa1eb fix(gross-profit): apply precision-based rounding to grouped totals
(cherry picked from commit 52dd7665e7)
2026-03-10 11:08:25 +00:00
rohitwaghchaure
0fde990c9e Merge pull request #53289 from frappe/mergify/bp/version-16-hotfix/pr-53283
fix: removed non existent patch (backport #53283)
2026-03-10 14:52:25 +05:30
Mihir Kandoi
4f646a2f2d Merge pull request #53287 from frappe/mergify/bp/version-16-hotfix/pr-53282
fix: allow user to make QI after submission not working (backport #53282)
2026-03-10 14:36:50 +05:30
rohitwaghchaure
0116d4c789 Merge pull request #53285 from frappe/mergify/bp/version-16-hotfix/pr-53281
fix: better validation message for Purchase Invoice with Update Stock (backport #53281)
2026-03-10 14:28:45 +05:30
Rohit Waghchaure
77ec67869c fix: removed non existent patch
(cherry picked from commit c4b3080eae)
2026-03-10 08:56:34 +00:00
Mihir Kandoi
6fdb5d486a fix: allow user to make QI after submission not working
(cherry picked from commit 9f62ec5192)
2026-03-10 08:46:12 +00:00
Rohit Waghchaure
839f5f6a29 fix: better validation message for Purchase Invoice with Update Stock
(cherry picked from commit cfb06cf247)
2026-03-10 08:34:14 +00:00
Mihir Kandoi
005ff0d6a8 Merge pull request #53280 from frappe/mergify/bp/version-16-hotfix/pr-53203
fix: update user status depends on employee status (backport #53203)
2026-03-10 13:25:59 +05:30
Poovitha Palanivelu
c7da8e2471 fix: update user status depends on employee status
(cherry picked from commit 194d060f13)
2026-03-10 07:40:18 +00:00
Mihir Kandoi
1a46a8fec0 Merge pull request #53277 from frappe/mergify/bp/version-16-hotfix/pr-53235
fix: update item row delivery dates when header delivery date changes in sales order (backport #53235)
2026-03-10 13:09:41 +05:30
Pandiyan37
6b42a7e454 fix(selling): update delivery date in line items
(cherry picked from commit 77367b5517)
2026-03-10 07:24:01 +00:00
Frappe PR Bot
a7eb24488e chore(release): Bumped to Version 16.8.3
## [16.8.3](https://github.com/frappe/erpnext/compare/v16.8.2...v16.8.3) (2026-03-10)

### Bug Fixes

* patch failing ([7149630](7149630eff))
2026-03-10 06:45:58 +00:00
rohitwaghchaure
0b30967556 Merge pull request #53274 from frappe/mergify/bp/version-16/pr-53273
fix: patch failing (backport #53272) (backport #53273)
2026-03-10 12:14:29 +05:30
Rohit Waghchaure
7149630eff fix: patch failing
(cherry picked from commit 6024c4a077)
(cherry picked from commit 1a62d324fd)
2026-03-10 06:42:47 +00:00
rohitwaghchaure
da617fdc11 Merge pull request #53273 from frappe/mergify/bp/version-16-hotfix/pr-53272
fix: patch failing (backport #53272)
2026-03-10 12:12:25 +05:30
Rohit Waghchaure
1a62d324fd fix: patch failing
(cherry picked from commit 6024c4a077)
2026-03-10 06:32:40 +00:00
rohitwaghchaure
db841dde4c Merge pull request #53259 from frappe/mergify/bp/version-16-hotfix/pr-53254
fix: bom UX issues (backport #53254)
2026-03-10 03:34:39 +05:30
ruthra kumar
e3d7a94307 Merge pull request #53261 from frappe/mergify/bp/version-16-hotfix/pr-53160
fix: allow payment_request to be created in draft (backport #53160)
2026-03-09 20:32:51 +05:30
ervishnucs
29d565b9de fix: allow payment_request to be created in draft
(cherry picked from commit 24825a16e0)
2026-03-09 14:54:36 +00:00
Rohit Waghchaure
733191eae2 fix: bom UX issues
(cherry picked from commit 32447b8204)
2026-03-09 12:48:17 +00:00
Khushi Rawat
572c3cdc74 Merge pull request #53248 from frappe/mergify/bp/version-16-hotfix/pr-53242
refactor: replace raw SQL with query builder in asset depreciation and balances report (backport #53242)
2026-03-09 16:01:13 +05:30
Mihir Kandoi
b55bf7d660 Merge pull request #53250 from frappe/mergify/bp/version-16-hotfix/pr-53249
fix :buttons not visible on purchase and sales order (backport #53249)
2026-03-09 15:24:01 +05:30
Nishka Gosalia
76a32686a5 fix :buttons not visible on purchase and sales order
(cherry picked from commit 829dbbe12b)
2026-03-09 09:36:06 +00:00
khushi8112
73354356e1 refactor: more functions in same file
(cherry picked from commit f496995415)
2026-03-09 09:28:32 +00:00
khushi8112
c6000c0522 refactor: replace raw SQL with query builder in asset depreciation and balannces report
(cherry picked from commit 314c882f3b)
2026-03-09 09:28:32 +00:00
rohitwaghchaure
b0fc21b8ed Merge pull request #53244 from frappe/mergify/bp/version-16-hotfix/pr-53239
fix: validation for cancellation (backport #53239)
2026-03-09 13:40:52 +05:30
Rohit Waghchaure
8f02184c80 fix: validation for cancellation
(cherry picked from commit 8de272a8a1)
2026-03-09 07:49:38 +00:00
Mihir Kandoi
ddb441359e Merge pull request #53241 from frappe/mergify/bp/version-16-hotfix/pr-53234
fix(manufacturing): show returned qty in progress bar (backport #53234)
2026-03-09 12:42:16 +05:30
Sudharsanan11
38e5d295c7 feat(manufacturing): show disassembled qty in progress bar
(cherry picked from commit ae9ff767fa)
2026-03-09 07:04:47 +00:00
Sudharsanan11
f853ef9fec fix(manufacturing): show returned qty in progress bar
(cherry picked from commit 8027f5aafd)
2026-03-09 07:04:47 +00:00
MochaMind
1131313d20 chore: update POT file (#53232) 2026-03-08 19:43:22 +01:00
ruthra kumar
1a52fa2a03 Merge pull request #53229 from frappe/mergify/bp/version-16-hotfix/pr-53227
refactor: party type and party filter for comparison report (backport #53227)
2026-03-08 05:50:03 +05:30
ruthra kumar
42b4fe2f68 refactor: party type and party filter for comparison report
(cherry picked from commit b6f9c0844e)
2026-03-07 12:50:03 +00:00
rohitwaghchaure
aaa29a3ce8 Merge pull request #53219 from frappe/mergify/bp/version-16-hotfix/pr-53218
fix: HRMS test cases failing due to validation in item (backport #53218)
2026-03-06 18:51:07 +05:30
Rohit Waghchaure
10538d58ad fix: HRMS test cases failing due to validation in item
(cherry picked from commit 6702506f58)
2026-03-06 12:24:59 +00:00
Khushi Rawat
716645ea1d Merge pull request #52999 from khushi8112/pr-52968
refactor: assets module form cleanup (backport #52393)
2026-03-06 15:09:26 +05:30
Khushi Rawat
3aeee125a4 Merge branch 'version-16-hotfix' into pr-52968 2026-03-06 14:46:32 +05:30
ruthra kumar
12ccc3881b fix: add clear demo data in sidebar (backport #53177) (#53197)
fix: add clear demo data in sidebar

(cherry picked from commit 6603005822)

Co-authored-by: sokumon <sohamkulkarns9@gmail.com>
2026-03-06 14:12:42 +05:30
Frappe PR Bot
c39ee76946 chore(release): Bumped to Version 16.8.2
## [16.8.2](https://github.com/frappe/erpnext/compare/v16.8.1...v16.8.2) (2026-03-06)

### Bug Fixes

* stock balance report qty ([9e185b7](9e185b7ea9))
2026-03-06 08:35:12 +00:00
rohitwaghchaure
94a02b05fa Merge pull request #53211 from frappe/mergify/bp/version-16/pr-53208
fix: stock balance report qty (backport #53200) (backport #53208)
2026-03-06 14:03:44 +05:30
Rohit Waghchaure
9e185b7ea9 fix: stock balance report qty
(cherry picked from commit a15e5fdc4e)
(cherry picked from commit 699a683b8e)
2026-03-06 07:45:18 +00:00
rohitwaghchaure
b510f78510 Merge pull request #53208 from frappe/mergify/bp/version-16-hotfix/pr-53200
fix: stock balance report qty (backport #53200)
2026-03-06 13:14:55 +05:30
rohitwaghchaure
a02aa9eb05 Merge pull request #53204 from frappe/mergify/bp/version-16-hotfix/pr-52549
feat: option to enable serial / batch feature (backport #52549)
2026-03-06 13:07:31 +05:30
Rohit Waghchaure
699a683b8e fix: stock balance report qty
(cherry picked from commit a15e5fdc4e)
2026-03-06 07:15:46 +00:00
rohitwaghchaure
0685a9241e chore: fix conflicts
Remove merge conflict markers and update patch list.
2026-03-06 12:44:55 +05:30
Rohit Waghchaure
93a597410e feat: option to enable serial / batch features
(cherry picked from commit 82c3da5b1e)

# Conflicts:
#	erpnext/patches.txt
2026-03-06 06:48:17 +00:00
sokumon
8e8a7b2686 fix: add clear demo data in sidebar
(cherry picked from commit 6603005822)
2026-03-05 18:14:18 +00:00
mergify[bot]
83f2fadbcf fix(help): escape query (backport #53192) (#53195)
fix(help): escape query (#53192)


(cherry picked from commit 702adda000)

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
Co-authored-by: Akhil Narang <me@akhilnarang.dev>
2026-03-05 18:40:54 +05:30
Frappe PR Bot
0ab7a6e904 chore(release): Bumped to Version 16.8.1
## [16.8.1](https://github.com/frappe/erpnext/compare/v16.8.0...v16.8.1) (2026-03-05)

### Bug Fixes

* balance qty for inv dimension ([354723d](354723d3d5))
2026-03-05 11:58:55 +00:00
rohitwaghchaure
519657fe3e Merge pull request #53188 from frappe/mergify/bp/version-16/pr-53181
fix: balance qty for inv dimension (backport #52745) (backport #53181)
2026-03-05 17:27:21 +05:30
Rohit Waghchaure
354723d3d5 fix: balance qty for inv dimension
(cherry picked from commit a3eafe5b18)
(cherry picked from commit fb17a00fb6)
2026-03-05 11:40:41 +00:00
rohitwaghchaure
fff9750f48 Merge pull request #53181 from frappe/mergify/bp/version-16-hotfix/pr-52745
fix: balance qty for inv dimension (backport #52745)
2026-03-05 14:26:49 +05:30
rohitwaghchaure
fdf0d6611d Merge pull request #53182 from frappe/mergify/bp/version-16-hotfix/pr-52956
feat: organization desktop icon (backport #52956)
2026-03-05 14:26:35 +05:30
Rohit Waghchaure
e89aaca870 feat: organization desktop icon
(cherry picked from commit 4e9a2a327f)
2026-03-05 08:36:29 +00:00
Rohit Waghchaure
fb17a00fb6 fix: balance qty for inv dimension
(cherry picked from commit a3eafe5b18)
2026-03-05 08:20:20 +00:00
rohitwaghchaure
96f7eb1194 Merge pull request #53178 from frappe/mergify/bp/version-16-hotfix/pr-53170
chore: New org icon (backport #53170)
2026-03-05 13:49:12 +05:30
jacob-salvi
1938a56164 chore: new organisation icon
(cherry picked from commit 6f93210b9b)
2026-03-05 08:10:14 +00:00
jacob-salvi
f97e0f8c9c chore: new accounting icons
(cherry picked from commit 728c678cf9)
2026-03-05 08:10:14 +00:00
Nishka Gosalia
f410bfcea6 Merge pull request #53175 from frappe/mergify/bp/version-16-hotfix/pr-52924 2026-03-05 12:17:40 +05:30
Jatin3128
6793c1455c Merge pull request #53174 from frappe/mergify/bp/version-16-hotfix/pr-52138
feat(selling-settings): add checkbox to fetch payment terms (backport #52138)
2026-03-05 12:12:08 +05:30
Nishka Gosalia
4386af1df7 refactor: project module form cleanup
(cherry picked from commit 3c9f520e68)
2026-03-05 06:28:05 +00:00
SowmyaArunachalam
92003df7f9 test: test payment terms with backdated entries
(cherry picked from commit 8aae46a25e)
2026-03-05 06:20:47 +00:00
SowmyaArunachalam
b2f695310c fix: fetch payment terms from quotation
(cherry picked from commit 99ed1c34f3)
2026-03-05 06:20:47 +00:00
SowmyaArunachalam
3b7410f2d3 fix: set default to 1
(cherry picked from commit 8b9e02fd44)
2026-03-05 06:20:47 +00:00
SowmyaArunachalam
80c20531aa fix: handle payment terms template when disabled
(cherry picked from commit f23dc07914)
2026-03-05 06:20:46 +00:00
SowmyaArunachalam
8f26168a55 test: enable automatically_fetch_payment_terms_from_quotation
(cherry picked from commit 5611e9168e)
2026-03-05 06:20:46 +00:00
SowmyaArunachalam
1470a79a1b fix: consider payment term only when enabled
(cherry picked from commit b1149fe950)
2026-03-05 06:20:46 +00:00
SowmyaArunachalam
f7dd730bc3 feat(selling-settings): add checkbox to recalculate payment date
(cherry picked from commit 70b401e610)
2026-03-05 06:20:46 +00:00
Nishka Gosalia
f428663f0d Merge pull request #53171 from frappe/mergify/bp/version-16-hotfix/pr-52415
fix(project template): clear subject when task is empty (backport #52415)
2026-03-05 11:49:59 +05:30
ravibharathi656
2ccf8d050f fix(task): allow is_template field in quick entry
(cherry picked from commit 7801dd5353)
2026-03-05 06:01:44 +00:00
ravibharathi656
c8560fa0d3 fix(project template): clear subject when task is empty
(cherry picked from commit c1431105f4)
2026-03-05 06:01:43 +00:00
Mihir Kandoi
c3d8918ee4 Merge pull request #53167 from frappe/mergify/bp/version-16-hotfix/pr-53166
fix: WO produced qty should be calculated using finished item child t… (backport #53166)
2026-03-04 20:50:06 +05:30
Mihir Kandoi
78fa2c5477 fix: WO produced qty should be calculated using finished item child table transfer qty
(cherry picked from commit 5fead1d17a)
2026-03-04 15:04:39 +00:00
Mihir Kandoi
0aa63e0ae9 Merge pull request #53165 from frappe/mergify/bp/version-16-hotfix/pr-53157
fix: disallow all actions on job card if work order is closed (backport #53157)
2026-03-04 17:11:10 +05:30
Khushi Rawat
b984f5f1b0 Merge pull request #53163 from frappe/mergify/bp/version-16-hotfix/pr-53154
fix: skip asset sale processing for internal transfer invoices (backport #53154)
2026-03-04 17:01:07 +05:30
Mihir Kandoi
57aab56baa fix: disallow all actions on job card if work order is closed
(cherry picked from commit ee19c32c3a)
2026-03-04 11:21:53 +00:00
khushi8112
12cfd8e052 fix: skip asset sale processing for internal transfer invoices
(cherry picked from commit 9cb3dad079)
2026-03-04 11:07:25 +00:00
Nishka Gosalia
0361ee0444 Merge pull request #53159 from frappe/mergify/bp/version-16-hotfix/pr-53156
fix: updating costing based on employee change in timesheet (backport #53156)
2026-03-04 16:35:18 +05:30
Nishka Gosalia
d251c94ea3 fix: updating costing based on employee change in timesheet
(cherry picked from commit e37d4a6f7c)
2026-03-04 10:43:09 +00:00
mergify[bot]
76a6ff9026 Merge pull request #53096 from frappe/mergify/bp/version-16-hotfix/pr-52838
fix: correct fields being updated on material request and purchase or… (backport #52838)
2026-03-04 07:23:39 +00:00
Nishka Gosalia
bf774527fb Merge pull request #53151 from frappe/mergify/bp/version-16-hotfix/pr-53147 2026-03-04 12:34:31 +05:30
Nishka Gosalia
69b217065c feat: allowing rate modification in update item in quotation
(cherry picked from commit 2ec02e477f)
2026-03-04 06:50:13 +00:00
Mihir Kandoi
e5a9bc8193 Merge pull request #53149 from frappe/mergify/bp/version-16-hotfix/pr-53148
fix: do not update fg_completed_qty when changing qty of fg line item (backport #53148)
2026-03-04 12:11:17 +05:30
Mihir Kandoi
8463cf88df fix: do not update fg_completed_qty when changing qty of fg line item
(cherry picked from commit 2d83069b82)
2026-03-04 06:40:12 +00:00
Khushi Rawat
aac26aa19c Merge pull request #53030 from frappe/mergify/bp/version-16-hotfix/pr-53004
refactor: use query builder for Tax Rule validation query (backport #53004)
2026-03-04 11:32:54 +05:30
Frappe PR Bot
78aa4cf9f9 chore(release): Bumped to Version 16.8.0
# [16.8.0](https://github.com/frappe/erpnext/compare/v16.7.3...v16.8.0) (2026-03-03)

### Bug Fixes

* `Trial Balance` and `Consolidated Trial Balance` total row calculation (backport [#53014](https://github.com/frappe/erpnext/issues/53014)) ([#53015](https://github.com/frappe/erpnext/issues/53015)) ([8658956](865895649e))
* **accounts receivable:** include invoice payment terms template (backport [#51940](https://github.com/frappe/erpnext/issues/51940)) ([#53106](https://github.com/frappe/erpnext/issues/53106)) ([7e09bf3](7e09bf306a))
* **accounts:** add transaction time field ([2526876](2526876eaa))
* **accounts:** compute tax net_amount in JS controller ([429bd24](429bd245d1))
* **accounts:** round and convert net_amount to company currency in JS tax controller ([3f284f0](3f284f0c55))
* **accounts:** set posting time to get incoming rate ([8b3c5ba](8b3c5baa9e))
* allow allowed roles to bypass over billing validation ([c274b7c](c274b7cc2e))
* avoid circular dependency ([#53109](https://github.com/frappe/erpnext/issues/53109)) ([7d950f7](7d950f71da))
* broekn link of docs in asset onboarding ([5c48f74](5c48f74d4c))
* **budget-variance-report:** validate 'budget_against' filter ([f2ff0de](f2ff0de296))
* correct sle voucher_type comparison in get_ref_doctype ([788cd82](788cd82b4b))
* ensure cache is cleared on fiscal year update and trash ([2495cb8](2495cb8b2a))
* ensure contacts are processed only if present in create_prospect_against_crm_deal ([58fbb2f](58fbb2f4d7))
* handle html email template separately in RFQ to avoid jinja context error ([3178736](317873621a))
* **manufacturing:** ignore sales order validation for subassembly item ([2daf9f4](2daf9f4ce7))
* old stock reco entries causing issue in the stock balance report ([ea5ad31](ea5ad3179c))
* opening qty in stock balance ([1f2342c](1f2342cf4b))
* pass company in test case using make_quality_inspections ([417e8a4](417e8a4371))
* patch to complete onboarding stpes for existing records ([941a78e](941a78e1a8))
* **payment entry:** round unallocated amount ([b76e0c6](b76e0c645b))
* **payment_entry:** fix precision for `total_allocated_amount` and `base_total_allocated_amount` ([c61c748](c61c748cbd))
* populate mr owner and set po owner as fallback ([acdb8f2](acdb8f2b78))
* **postgres:** avoid UNSIGNED cast in customer autoname ([d922213](d922213dd7))
* **pricing_rule:** strict validation of `transaction_type` ([396727e](396727e26f))
* remove read-only property from Sales Invoice Timesheet Table ([f632c5c](f632c5c796))
* reposting creation slow for GL entries ([ab7e33f](ab7e33f83d))
* same reposting entry picked by multiple rq jobs ([c28568f](c28568f4fd))
* **selling:** handle selling price validation for FG item ([c7928a0](c7928a0749))
* serial no status for Disassemble entry ([dc0592a](dc0592a905))
* set company based expense account ([25c134d](25c134d11c))
* **stock:** pass company to avoid document naming rule issue in QI ([d61ad3b](d61ad3bd95))
* **stock:** validate company for receipt documents and expense accounts ([c6e0eb6](c6e0eb6d17))
* use conversion factor when creating stock entry from pick list ([f939e98](f939e980a6))
* use stock qty instead of qty when creating stock entry from MR ([1e44787](1e4478765a))
* use the correct precision value in stock reco ([c92fd26](c92fd26e1b))
* validate warehouse of SABB for draft entry ([b8de82f](b8de82f0e4))
* voucher detail no in SABB ([744d7a2](744d7a2793))

### Features

* UOM query filter for opportunity items ([6727c86](6727c86d0a))

### Performance Improvements

* add index on reference_purchase_receipt column ([664f1f1](664f1f1675))
2026-03-03 17:57:53 +00:00
diptanilsaha
28c5fbdb78 Merge pull request #53116 from frappe/version-16-hotfix 2026-03-03 23:26:23 +05:30
Mihir Kandoi
282d8b1b28 Merge pull request #53138 from frappe/mergify/bp/version-16-hotfix/pr-52784
fix(stock): validate company for receipt documents and expense accounts (backport #52784)
2026-03-03 21:41:25 +05:30
Mihir Kandoi
6eed4df7d9 Merge pull request #53136 from frappe/mergify/bp/version-16-hotfix/pr-53132
fix(selling): handle selling price validation for FG item  (backport #53132)
2026-03-03 21:41:03 +05:30
Mihir Kandoi
e2824e1dc5 Merge pull request #53134 from frappe/mergify/bp/version-16-hotfix/pr-53070
fix: handle html email template separately in RFQ to avoid jinja cont… (backport #53070)
2026-03-03 21:25:04 +05:30
Sudharsanan11
4350c6b9e3 test(stock): add test to validate company for receipts and expense accounts
(cherry picked from commit d58171987c)
2026-03-03 15:47:20 +00:00
Sudharsanan11
25c134d11c fix: set company based expense account
(cherry picked from commit d54d0c25a2)
2026-03-03 15:47:20 +00:00
Sudharsanan11
c6e0eb6d17 fix(stock): validate company for receipt documents and expense accounts
(cherry picked from commit 15dfc08a31)
2026-03-03 15:47:19 +00:00
Mihir Kandoi
41b9566dec Merge pull request #53125 from frappe/mergify/bp/version-16-hotfix/pr-53123
fix: serial no status for Disassemble entry (backport #53123)
2026-03-03 21:12:42 +05:30
Mihir Kandoi
8a13522590 Merge pull request #53131 from frappe/mergify/bp/version-16-hotfix/pr-53084
fix(manufacturing): ignore sales order validation for subassembly item (backport #53084)
2026-03-03 21:11:52 +05:30
kavin-114
7713d25b7e test: add unit test for FG Item selling price validation
(cherry picked from commit 723993fdf6)
2026-03-03 15:40:48 +00:00
kavin-114
c7928a0749 fix(selling): handle selling price validation for FG item
System checks valuation rate in incoming_rate field, since SO has it in valuation_rate field of item row,
need to handle the field name dynamically based upon the doctype name in Selling Controller.

(cherry picked from commit 4335318482)
2026-03-03 15:40:48 +00:00
Mihir Kandoi
bffb7cfef3 Merge pull request #53129 from frappe/mergify/bp/version-16-hotfix/pr-53037
fix(stock): pass company to avoid document naming rule issue in QI (backport #53037)
2026-03-03 21:08:14 +05:30
Pugazhendhi Velu
317873621a fix: handle html email template separately in RFQ to avoid jinja context error
(cherry picked from commit 49d363b174)
2026-03-03 15:36:53 +00:00
Mihir Kandoi
a399b8522d Merge pull request #53127 from frappe/mergify/bp/version-16-hotfix/pr-53099
fix: populate mr owner and set po owner as fallback (backport #53099)
2026-03-03 20:55:54 +05:30
Mihir Kandoi
3e8ebf8c14 chore: resolve conflicts 2026-03-03 20:44:40 +05:30
Sudharsanan11
2daf9f4ce7 fix(manufacturing): ignore sales order validation for subassembly item
(cherry picked from commit 6b1aac4aee)
2026-03-03 15:11:58 +00:00
kavin-114
417e8a4371 fix: pass company in test case using make_quality_inspections
(cherry picked from commit 397de1274f)
2026-03-03 15:10:48 +00:00
kavin-114
3844982824 test: add unit test to handle company condition in naming rule
(cherry picked from commit 4c39cf2d65)
2026-03-03 15:10:47 +00:00
kavin-114
d61ad3bd95 fix(stock): pass company to avoid document naming rule issue in QI
When a Document Naming Rule is configured in QI with a condition based on the company,
the system was not passing the company value properly. As a result, the naming rule
condition was skipped and the document name was generated using the default series.

This fix ensures that the company is passed correctly so that the configured
Document Naming Rule is evaluated and applied as expected.

(cherry picked from commit 74def423ed)

# Conflicts:
#	erpnext/controllers/stock_controller.py
2026-03-03 15:10:47 +00:00
kavin-114
acdb8f2b78 fix: populate mr owner and set po owner as fallback
(cherry picked from commit bdf4e51da3)
2026-03-03 15:09:33 +00:00
Rohit Waghchaure
dc0592a905 fix: serial no status for Disassemble entry
(cherry picked from commit 81acefa8ad)
2026-03-03 13:24:22 +00:00
Shariq Ansari
d74833d9fc Merge pull request #53122 from frappe/mergify/bp/version-16-hotfix/pr-53119
fix: do not create contact if not passed from crm (backport #53119)
2026-03-03 03:59:41 -08:00
shariquerik
58fbb2f4d7 fix: ensure contacts are processed only if present in create_prospect_against_crm_deal
(cherry picked from commit 800810d23d)
2026-03-03 11:43:45 +00:00
diptanilsaha
3217defaf5 Merge pull request #53055 from frappe/pot_version-16-hotfix_2026-03-01
chore: update POT file
2026-03-03 16:08:53 +05:30
diptanilsaha
e6704f4b73 Merge pull request #52998 from frappe/mergify/bp/version-16-hotfix/pr-52997
fix(payment_entry): set precision for `total_allocated_amount` and `base_total_allocated_amount` (backport #52997)
2026-03-03 15:48:16 +05:30
diptanilsaha
32c33631a6 chore: fix onboarding doctype merge conflicts (#53118) 2026-03-03 10:16:34 +00:00
diptanilsaha
0787c62cbc Merge branch 'version-16' into version-16-hotfix 2026-03-03 15:24:26 +05:30
diptanilsaha
a35521c14d Merge pull request #53114 from frappe/mergify/bp/version-16-hotfix/pr-53110
fix(pricing_rule): strict validation of `transaction_type` (backport #53110)
2026-03-03 15:19:54 +05:30
diptanilsaha
e4ce6e4e6f refactor: renamed args to pricing_ctx in set_transaction_type for clarity
(cherry picked from commit 6342e78305)
2026-03-03 09:30:51 +00:00
diptanilsaha
396727e26f fix(pricing_rule): strict validation of transaction_type
(cherry picked from commit 7ec0354a79)
2026-03-03 09:30:50 +00:00
diptanilsaha
ad3411ba01 Merge pull request #53111 from frappe/mergify/bp/version-16-hotfix/pr-53109
fix: avoid circular dependency (backport #53109)
2026-03-03 15:00:44 +05:30
Vishnu Priya Baskaran
7d950f71da fix: avoid circular dependency (#53109)
(cherry picked from commit d2e04750b5)
2026-03-03 09:03:25 +00:00
mergify[bot]
7e09bf306a fix(accounts receivable): include invoice payment terms template (backport #51940) (#53106)
Co-authored-by: Ravibharathi <131471282+ravibharathi656@users.noreply.github.com>
2026-03-03 12:07:57 +05:30
rohitwaghchaure
109433f37a Merge pull request #53086 from frappe/mergify/bp/version-16-hotfix/pr-53072
fix(accounts): set posting time to get incoming rate (backport #53072)
2026-03-02 21:58:09 +05:30
rohitwaghchaure
35336350ca Merge pull request #53098 from frappe/mergify/bp/version-16-hotfix/pr-53093
fix: opening qty in stock balance (backport #53093)
2026-03-02 21:43:29 +05:30
rohitwaghchaure
97f6b3a3b5 Merge pull request #53092 from frappe/mergify/bp/version-16-hotfix/pr-53087
perf: add index on reference_purchase_receipt column (backport #53087)
2026-03-02 21:38:02 +05:30
Rohit Waghchaure
1f2342cf4b fix: opening qty in stock balance
(cherry picked from commit d7fdab99cb)
2026-03-02 15:19:56 +00:00
rohitwaghchaure
3ec3cd512c Merge pull request #53090 from frappe/mergify/bp/version-16-hotfix/pr-53082
fix: validate warehouse of SABB for draft entry (backport #53082)
2026-03-02 17:43:51 +05:30
rohitwaghchaure
bf44f466ad chore: fix conflicts 2026-03-02 14:38:55 +05:30
kavin-114
664f1f1675 perf: add index on reference_purchase_receipt column
(cherry picked from commit 8c94396ad9)
2026-03-02 09:08:44 +00:00
rohitwaghchaure
b4a5bbc7e2 chore: fix conflicts 2026-03-02 14:38:28 +05:30
Rohit Waghchaure
b8de82f0e4 fix: validate warehouse of SABB for draft entry
(cherry picked from commit 9b8f685c82)
2026-03-02 08:53:09 +00:00
Sudharsanan11
8b3c5baa9e fix(accounts): set posting time to get incoming rate
(cherry picked from commit c5b3673a30)
2026-03-02 08:16:32 +00:00
Sudharsanan11
2526876eaa fix(accounts): add transaction time field
(cherry picked from commit 9538a9870c)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.json
#	erpnext/selling/doctype/sales_order/sales_order.json
2026-03-02 08:16:32 +00:00
Diptanil Saha
fe721f48fc Merge pull request #53081 from frappe/mergify/bp/version-16-hotfix/pr-53079
fix(budget-variance-report): validate 'budget_against' filter (backport #53079)
2026-03-02 12:17:52 +05:30
rohitwaghchaure
11b22d4d95 Merge pull request #53077 from frappe/mergify/bp/version-16-hotfix/pr-53050
fix: voucher detail no in SABB (backport #53050)
2026-03-02 12:09:34 +05:30
diptanilsaha
f2ff0de296 fix(budget-variance-report): validate 'budget_against' filter
(cherry picked from commit 79d0708ea7)
2026-03-02 06:31:35 +00:00
Mihir Kandoi
2ed795bc9c Merge pull request #53078 from frappe/mergify/bp/version-16-hotfix/pr-53047
fix: remove read-only property from Sales Invoice Timesheet Table (backport #53047)
2026-03-02 11:37:32 +05:30
trustedcomputer
f632c5c796 fix: remove read-only property from Sales Invoice Timesheet Table
(cherry picked from commit b9d95711a2)
2026-03-02 05:25:05 +00:00
Rohit Waghchaure
744d7a2793 fix: voucher detail no in SABB
(cherry picked from commit c37a56ec89)
2026-03-02 04:24:00 +00:00
Mihir Kandoi
88b4699025 Merge pull request #53069 from frappe/mergify/bp/version-16-hotfix/pr-53067
fix: use the correct precision value in stock reco (backport #53067)
2026-03-01 21:37:18 +05:30
Mihir Kandoi
c92fd26e1b fix: use the correct precision value in stock reco
(cherry picked from commit 36726b0f7b)
2026-03-01 15:52:17 +00:00
Mihir Kandoi
746ca73006 Merge pull request #53066 from frappe/mergify/bp/version-16-hotfix/pr-53062
fix: correct sle voucher_type comparison in get_ref_doctype (backport #53062)
2026-03-01 21:03:52 +05:30
Sanjesh
788cd82b4b fix: correct sle voucher_type comparison in get_ref_doctype
(cherry picked from commit cffb59ae73)
2026-03-01 15:16:44 +00:00
Mihir Kandoi
8ed2d45729 Merge pull request #53061 from frappe/mergify/bp/version-16-hotfix/pr-53057
fix: allow allowed roles to bypass over billing validation (backport #53057)
2026-03-01 16:03:42 +05:30
Mihir Kandoi
8752b2f767 Merge pull request #53059 from frappe/mergify/bp/version-16-hotfix/pr-53052
fix: use stock qty instead of qty when creating stock entry from MR (backport #53052)
2026-03-01 15:50:24 +05:30
Mihir Kandoi
c274b7cc2e fix: allow allowed roles to bypass over billing validation
(cherry picked from commit 04127019f9)
2026-03-01 10:18:22 +00:00
Mihir Kandoi
1c4e20f5ed Merge pull request #53054 from frappe/mergify/bp/version-16-hotfix/pr-53051
fix: use conversion factor when creating stock entry from pick list (backport #53051)
2026-03-01 15:26:44 +05:30
Mihir Kandoi
1e4478765a fix: use stock qty instead of qty when creating stock entry from MR
(cherry picked from commit 30c3ff2efe)
2026-03-01 09:51:54 +00:00
frappe-pr-bot
b26631d8b1 chore: update POT file 2026-03-01 09:43:26 +00:00
Mihir Kandoi
f939e980a6 fix: use conversion factor when creating stock entry from pick list
(cherry picked from commit 5f12b0db3f)
2026-03-01 09:40:37 +00:00
rohitwaghchaure
31a28ed570 Merge pull request #53034 from frappe/mergify/bp/version-16-hotfix/pr-52988
fix: same reposting entry picked by multiple rq jobs (backport #52988)
2026-02-28 09:04:49 +05:30
Rohit Waghchaure
c28568f4fd fix: same reposting entry picked by multiple rq jobs
(cherry picked from commit 4dfbacfd92)
2026-02-28 02:06:33 +00:00
khushi8112
e2800e343e refactor: use query builder for Tax Rule validation query
(cherry picked from commit 235e3adbcb)
2026-02-27 18:24:47 +00:00
rohitwaghchaure
8b7692db57 Merge pull request #53021 from frappe/mergify/bp/version-16-hotfix/pr-53013
fix: old stock reco entries causing issue in the stock balance report (backport #53013)
2026-02-27 15:31:32 +05:30
Rohit Waghchaure
ea5ad3179c fix: old stock reco entries causing issue in the stock balance report
(cherry picked from commit 0874cbc268)
2026-02-27 09:27:00 +00:00
Mihir Kandoi
41ff3191f5 Merge pull request #53018 from frappe/mergify/bp/version-16-hotfix/pr-53012 2026-02-27 13:59:07 +05:30
Thomas antony
6727c86d0a feat: UOM query filter for opportunity items
Add UOM query filter based on item code in opportunity form.

(cherry picked from commit b33f06701c)
2026-02-27 08:23:48 +00:00
mergify[bot]
865895649e fix: Trial Balance and Consolidated Trial Balance total row calculation (backport #53014) (#53015)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-02-27 07:40:41 +00:00
khushi8112
7b44e412d9 fix: migration patch 2026-02-26 16:35:24 +05:30
khushi8112
7f6b8a3e40 chore: linters check
(cherry picked from commit 4f59d580c4)
2026-02-26 15:34:32 +05:30
khushi8112
b619f6d906 fix: implement coderabbit suggested changes
(cherry picked from commit d1b81b96a5)
2026-02-26 15:34:32 +05:30
khushi8112
194b158e18 refactor: asset repair UI changes
(cherry picked from commit 9f7bfc0e36)
2026-02-26 15:34:32 +05:30
khushi8112
f9b6336dd5 refactor: asset capitalization form cleanup
(cherry picked from commit eb7932ed73)
2026-02-26 15:34:32 +05:30
khushi8112
3f11d0b8ad fix: test cases fixes related to new select box change
(cherry picked from commit e8e8d233ab)
2026-02-26 15:34:32 +05:30
khushi8112
27c3c1dee0 fix: test case
(cherry picked from commit f2f509234b)
2026-02-26 15:34:31 +05:30
khushi8112
78074c0cdd fix(UI): improve asset action buttons group
(cherry picked from commit e90a3b5a56)
2026-02-26 15:34:31 +05:30
khushi8112
4d0e28a608 fix: patch to migrate checkbox data into select
(cherry picked from commit c36fa5bdb6)
2026-02-26 15:34:25 +05:30
khushi8112
87a7bc6f49 refactor: use selectbox instead of checkboxes for asset type
(cherry picked from commit f7b9221324)
2026-02-26 15:33:34 +05:30
khushi8112
6c23d5b682 fix(UI): reposition fields for better UX
(cherry picked from commit 4e7794bfc3)
2026-02-26 15:33:34 +05:30
diptanilsaha
c61c748cbd fix(payment_entry): fix precision for total_allocated_amount and base_total_allocated_amount
Co-authored-by: Ahuahuachi <Ahuahuachi@users.noreply.github.com>
(cherry picked from commit d82a0a9455)
2026-02-26 09:25:01 +00:00
ruthra kumar
862659e396 Merge pull request #52996 from frappe/mergify/bp/version-16-hotfix/pr-52630
fix(account): compute tax net_amount in JS controller (backport #52630)
2026-02-26 14:00:06 +05:30
Luis Mendoza
3f284f0c55 fix(accounts): round and convert net_amount to company currency in JS tax controller
(cherry picked from commit b10b205394)
2026-02-26 08:18:12 +00:00
Luis Mendoza
adb4023ba4 style: prettier formatting
(cherry picked from commit 485166b668)
2026-02-26 08:18:12 +00:00
Luis Mendoza
429bd245d1 fix(accounts): compute tax net_amount in JS controller
(cherry picked from commit 153ad99f85)
2026-02-26 08:18:11 +00:00
ruthra kumar
fc7d9de979 Merge pull request #52993 from frappe/mergify/bp/version-16-hotfix/pr-52188
fix(payment entry): round unallocated amount (backport #52188)
2026-02-26 13:25:03 +05:30
ravibharathi656
b76e0c645b fix(payment entry): round unallocated amount
(cherry picked from commit b0d6751777)
2026-02-26 07:38:22 +00:00
rohitwaghchaure
72a5528b56 Merge pull request #52985 from frappe/mergify/bp/version-16-hotfix/pr-52983
fix: broken link of docs in asset onboarding (backport #52983)
2026-02-26 11:24:00 +05:30
Rohit Waghchaure
5c48f74d4c fix: broekn link of docs in asset onboarding
(cherry picked from commit 1cdf439e38)
2026-02-26 05:36:06 +00:00
rohitwaghchaure
44c9fccd34 Merge pull request #52969 from frappe/mergify/bp/version-16-hotfix/pr-52967
fix: patch to complete onboarding stpes for existing records (backport #52967)
2026-02-26 10:51:05 +05:30
ruthra kumar
0732f741cc Merge pull request #52975 from frappe/mergify/bp/version-16-hotfix/pr-52973
fix: ensure cache is cleared on fiscal year update and trash (backport #52973)
2026-02-26 10:00:19 +05:30
mergify[bot]
2349ebbb29 Merge pull request #52977 from frappe/mergify/bp/version-16-hotfix/pr-52952
fix: customer field made mandatory for sales invoice (backport #52952)
2026-02-25 15:47:17 +00:00
ljain112
2495cb8b2a fix: ensure cache is cleared on fiscal year update and trash
(cherry picked from commit 39b0e3522a)
2026-02-25 14:36:08 +00:00
rohitwaghchaure
8f922382e4 chore: fix conflicts 2026-02-25 18:13:42 +05:30
rohitwaghchaure
a864ca5c17 Merge pull request #52962 from frappe/mergify/bp/version-16-hotfix/pr-52957
fix: reposting creation slow for GL entries (backport #52957)
2026-02-25 18:09:10 +05:30
Rohit Waghchaure
941a78e1a8 fix: patch to complete onboarding stpes for existing records
(cherry picked from commit d90ec49241)

# Conflicts:
#	erpnext/patches.txt
2026-02-25 12:30:24 +00:00
ruthra kumar
cd465e1dbd refactor: Journal Entry form cleanup (backport #52780) (#52961)
refactor: Journal Entry form cleanup

(cherry picked from commit 73d5aa35a1)

# Conflicts:
#	erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json

Co-authored-by: ruthra kumar <ruthra@erpnext.com>
2026-02-25 16:27:03 +05:30
Rohit Waghchaure
ab7e33f83d fix: reposting creation slow for GL entries
(cherry picked from commit d9ac198bad)
2026-02-25 10:34:25 +00:00
ruthra kumar
0f59da89cf refactor: Journal Entry form cleanup
(cherry picked from commit 73d5aa35a1)

# Conflicts:
#	erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
2026-02-25 15:51:58 +05:30
ruthra kumar
5cc95a32c2 Merge pull request #52959 from frappe/mergify/bp/version-16-hotfix/pr-51558
fix(postgres): avoid UNSIGNED cast in customer autoname (backport #51558)
2026-02-25 15:10:50 +05:30
ruthra kumar
c98263cd77 Merge pull request #52950 from frappe/mergify/bp/version-16-hotfix/pr-52507
refactor: toggle for UTM parameters (backport #52507)
2026-02-25 15:10:30 +05:30
Matt Howard
d922213dd7 fix(postgres): avoid UNSIGNED cast in customer autoname
(cherry picked from commit 323636b396)
2026-02-25 09:21:10 +00:00
ruthra kumar
270b09f936 chore: resolve conflicts 2026-02-25 14:42:52 +05:30
ruthra kumar
4acf404ae5 refactor: better description on toggle
(cherry picked from commit 20af546b26)
2026-02-25 06:54:16 +00:00
ruthra kumar
0433f73b03 refactor: utm analytics section delivery note
(cherry picked from commit 578783af8e)

# Conflicts:
#	erpnext/stock/doctype/delivery_note/delivery_note.json
2026-02-25 06:54:16 +00:00
ruthra kumar
2bb8c7c74e refactor: utm section in opportunity
(cherry picked from commit 223d560b32)
2026-02-25 06:54:16 +00:00
ruthra kumar
3a8967b2a7 refactor: utm analytics section in lead
(cherry picked from commit 71e8941285)
2026-02-25 06:54:16 +00:00
ruthra kumar
fc0a07b3b1 refactor: utm analytics section in pos profile
(cherry picked from commit 7de0ca164d)

# Conflicts:
#	erpnext/accounts/doctype/pos_profile/pos_profile.json
2026-02-25 06:54:15 +00:00
ruthra kumar
08df2a755e refactor: utm section pos invoice
(cherry picked from commit 0bafa347a5)
2026-02-25 06:54:15 +00:00
ruthra kumar
964d75bd3e refactor: utm section in sales invoice
(cherry picked from commit 678d261f40)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.json
2026-02-25 06:54:15 +00:00
ruthra kumar
774aa2b78f refactor: utm section in sales order
(cherry picked from commit c00bf7df6a)

# Conflicts:
#	erpnext/selling/doctype/sales_order/sales_order.json
2026-02-25 06:54:14 +00:00
ruthra kumar
6539e443a5 refactor: hide UTM parameters
(cherry picked from commit aaf5f923b0)

# Conflicts:
#	erpnext/selling/doctype/quotation/quotation.json
2026-02-25 06:54:14 +00:00
1030 changed files with 503409 additions and 408918 deletions

52
.github/helper/merge_po_files.py vendored Normal file
View File

@@ -0,0 +1,52 @@
#!/usr/bin/env python3
"""Overlay develop's .po translations onto hotfix's .po files.
Called by sync_hotfix_translations.sh before `bench update-po-files`.
Merge rules:
a. msgid absent from develop → keep hotfix's existing msgstr
b. language not yet in hotfix → copy file as-is (bench will filter to main.pot)
c. msgid present in both → use develop's msgstr
"""
from datetime import datetime, timezone
from pathlib import Path
from babel.messages.pofile import read_po, write_po
DEVELOP = Path("/tmp/develop-po/erpnext/locale/")
LOCALE = Path("./apps/erpnext/erpnext/locale/")
added = updated = 0
for src in sorted(DEVELOP.glob("*.po")):
dst = LOCALE / src.name
with src.open("rb") as f:
dev = read_po(f)
if not dst.exists():
dev.revision_date = datetime.now(timezone.utc)
with dst.open("wb") as f:
write_po(f, dev)
added += 1
print(f" [new] {src.name}")
continue
with dst.open("rb") as f:
hf = read_po(f)
changes = 0
for msg in hf:
if msg.id and msg.id in dev and dev[msg.id].string and dev[msg.id].string != msg.string:
msg.string = dev[msg.id].string
changes += 1
if changes:
hf.revision_date = datetime.now(timezone.utc)
with dst.open("wb") as f:
write_po(f, hf)
updated += 1
print(f" [updated] {src.name} ({changes} msgstr(s) from develop)")
else:
print(f" [no-op] {src.name}")
print(f"\n{added} new language(s), {updated} updated.")

View File

@@ -0,0 +1,121 @@
#!/bin/bash
# Syncs Crowdin translations from develop to a hotfix branch.
# Merge logic: see merge_po_files.py.
# Env: GH_TOKEN, PR_REVIEWER, GITHUB_WORKSPACE, APP_NAME, GITHUB_REPOSITORY
# (all set by Actions).
set -e
HOTFIX_BRANCH="${HOTFIX_BRANCH:?HOTFIX_BRANCH env var is required}"
APP_NAME="${APP_NAME:?APP_NAME env var is required}"
cd ~ || exit
echo "=== Setting up bench ==="
pip install frappe-bench
bench -v init frappe-bench --skip-assets --skip-redis-config-generation --python "$(which python)"
cd ./frappe-bench || exit
bench get-app --skip-assets "${APP_NAME}" "${GITHUB_WORKSPACE}"
echo "=== Setting up sync_translations_${HOTFIX_BRANCH} branch ==="
cd "./apps/${APP_NAME}" || exit
git config user.email "developers@erpnext.com"
git config user.name "frappe-pr-bot"
git remote set-url upstream "https://github.com/${GITHUB_REPOSITORY}.git"
git config remote.upstream.fetch "+refs/heads/*:refs/remotes/upstream/*"
gh auth setup-git
git fetch upstream "${HOTFIX_BRANCH}"
if git ls-remote --exit-code --heads upstream "sync_translations_${HOTFIX_BRANCH}" >/dev/null 2>&1; then
git fetch upstream "sync_translations_${HOTFIX_BRANCH}"
git checkout -b "sync_translations_${HOTFIX_BRANCH}" "upstream/sync_translations_${HOTFIX_BRANCH}"
git merge -X theirs "upstream/${HOTFIX_BRANCH}" --no-edit
else
git checkout -b "sync_translations_${HOTFIX_BRANCH}" "upstream/${HOTFIX_BRANCH}"
fi
cd ../.. || exit
echo "=== Fetching develop's .po files ==="
mkdir -p /tmp/develop-po
git -C "${GITHUB_WORKSPACE}" fetch origin develop
git -C "${GITHUB_WORKSPACE}" archive origin/develop "${APP_NAME}/locale/" \
| tar -xf - -C /tmp/develop-po/
po_count=$(find "/tmp/develop-po/${APP_NAME}/locale" -name "*.po" | wc -l)
if [ "${po_count}" -eq 0 ]; then
echo "ERROR: No .po files found in develop's archive. Aborting." >&2
exit 1
fi
echo "Extracted ${po_count} .po file(s) from develop."
echo "=== Merging and reconciling ==="
env/bin/python "${GITHUB_WORKSPACE}/.github/helper/merge_po_files.py"
bench update-po-files --app "${APP_NAME}"
cd "./apps/${APP_NAME}" || exit
if git diff --quiet "${APP_NAME}/locale/" && [ -z "$(git ls-files --others --exclude-standard "${APP_NAME}/locale/")" ]; then
echo "Translations are already up to date. No PR needed."
exit 0
fi
echo "Changed files:"
git diff --name-only "${APP_NAME}/locale/"
git ls-files --others --exclude-standard "${APP_NAME}/locale/"
echo "=== Committing ==="
while IFS= read -r file; do
git add "${file}"
lang=$(basename "${file}" .po)
git commit -m "chore: add ${lang} translation to ${HOTFIX_BRANCH}"
done < <(git ls-files --others --exclude-standard "${APP_NAME}/locale/" | grep '\.po$' | sort)
while IFS= read -r file; do
git add "${file}"
if ! git diff --staged --quiet -- "${file}"; then
lang=$(basename "${file}" .po)
git commit -m "chore: sync ${lang} translation to ${HOTFIX_BRANCH}"
else
git restore --staged -- "${file}"
fi
done < <(git diff --name-only "${APP_NAME}/locale/" | grep '\.po$' | sort)
if git ls-remote --exit-code --heads upstream "sync_translations_${HOTFIX_BRANCH}" >/dev/null 2>&1; then
git fetch upstream "sync_translations_${HOTFIX_BRANCH}"
git merge -X ours "upstream/sync_translations_${HOTFIX_BRANCH}" --no-edit
fi
git push -u upstream sync_translations_${HOTFIX_BRANCH}
echo "=== Opening PR (if not already open) ==="
existing_pr=$(gh pr list \
--base "${HOTFIX_BRANCH}" \
--head "sync_translations_${HOTFIX_BRANCH}" \
--state open \
--json number \
--jq 'length' \
-R "${GITHUB_REPOSITORY}")
if [ "${existing_pr}" -gt 0 ]; then
echo "PR already open — branch updated in place. No new PR needed."
exit 0
fi
gh pr create \
--base "${HOTFIX_BRANCH}" \
--head "sync_translations_${HOTFIX_BRANCH}" \
--title "chore: sync translations to ${HOTFIX_BRANCH}" \
--body "Automated sync of Crowdin translations from \`develop\` to \`${HOTFIX_BRANCH}\`.
A 3-way merge is performed per language, then \`bench update-po-files\` reconciles each \`.po\` against hotfix's \`main.pot\`:
| Case | Condition | Result |
|------|-----------|--------|
| **a** | \`msgid\` in hotfix's \`main.pot\`, **not** in develop's \`.po\` | Hotfix's existing \`msgstr\` is **preserved** (string removed from develop but still needed in hotfix) |
| **b** | \`msgid\` **not** in hotfix's \`main.pot\` | **Dropped** from hotfix's \`.po\` |
| **c** | \`msgid\` in both hotfix's \`main.pot\` and develop's \`.po\` | Develop's \`msgstr\` is used (Crowdin translation wins) |
Generated by the \`sync-hotfix-translations\` workflow." \
--label "translation" \
--label "skip-release-notes" \
--reviewer "${PR_REVIEWER}" \
-R "${GITHUB_REPOSITORY}"

View File

@@ -0,0 +1,70 @@
name: Build and Upload Assets
on:
push:
branches:
- develop
- 'version-*'
concurrency:
group: build-assets-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
jobs:
build-assets:
name: Build JS/CSS and upload to release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: frappe/frappe
path: apps/frappe
ref: ${{ github.ref_name }}
- uses: actions/checkout@v4
with:
path: apps/erpnext
- name: Create bench structure
run: |
mkdir -p sites
printf "frappe\nerpnext\n" > sites/apps.txt
- uses: actions/setup-node@v4
with:
node-version: 24
cache: yarn
cache-dependency-path: apps/frappe/yarn.lock
- name: Install frappe JS dependencies
working-directory: apps/frappe
run: yarn install --frozen-lockfile
- name: Install erpnext JS dependencies
working-directory: apps/erpnext
run: yarn install --frozen-lockfile --ignore-scripts
- name: Link node_modules into public/
working-directory: apps/frappe
run: ln -s "$PWD/node_modules" frappe/public/node_modules
- name: Build assets (production)
working-directory: apps/frappe
run: yarn run production
- name: Package assets
working-directory: apps/erpnext
run: tar czf erpnext-assets.tar.gz -C ../../sites/assets/erpnext dist
- name: Upload to rolling release
working-directory: apps/erpnext
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="assets-${GITHUB_REF_NAME//\//-}"
gh release create "$TAG" --prerelease --title "Assets: $GITHUB_REF_NAME" --notes "" 2>/dev/null || true
gh release upload "$TAG" erpnext-assets.tar.gz --clobber

View File

@@ -43,3 +43,6 @@ jobs:
- name: Run Semgrep rules
run: semgrep ci --config ./frappe-semgrep-rules/rules --config r/python.lang.correctness
- name: Semgrep for Test Correctness
run: semgrep ci --include=**/test_*.py --config ./semgrep/test-correctness.yml

View File

@@ -0,0 +1,25 @@
name: Review translation PRs
description: "Posts review comments with relevant translation changes that are hard to inspect in the diff view."
on:
pull_request_target:
types: [opened, reopened, synchronize, ready_for_review]
paths:
- "**/*.po"
- "**/*.pot"
concurrency:
group: po-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review-po-pr:
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
issues: write
pull-requests: write
steps:
- uses: alyf-de/po-review-action@v1.0.0

View File

@@ -0,0 +1,52 @@
# Runner — maintain this file on each hotfix branch, not on develop.
#
# Fires when main.pot changes on this branch (i.e. after a POT update PR
# merges), or when dispatched by the orchestrator on develop (weekly schedule).
#
# Uses github.ref_name so the file is identical across all hotfix branches
# with no branch-specific edits required.
name: Run hotfix translation sync
on:
workflow_dispatch:
# One run at a time per branch. cancel-in-progress: false to avoid leaving
# an orphaned remote branch from a mid-flight git push + gh pr create.
concurrency:
group: sync-hotfix-translations-${{ github.ref_name }}
cancel-in-progress: false
jobs:
sync-translations:
name: Sync translations from develop into ${{ github.ref_name }}
runs-on: ubuntu-latest
permissions:
contents: write
env:
HOTFIX_BRANCH: ${{ github.ref_name }}
APP_NAME: ${{ github.event.repository.name }}
steps:
- name: Checkout ${{ env.HOTFIX_BRANCH }}
uses: actions/checkout@v6
with:
ref: ${{ env.HOTFIX_BRANCH }}
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.14"
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 24
- name: Run sync script
run: |
bash "${GITHUB_WORKSPACE}/.github/helper/sync_hotfix_translations.sh"
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
PR_REVIEWER: diptanilsaha

View File

@@ -4,8 +4,8 @@ on:
workflow_dispatch:
concurrency:
group: server-individual-tests-develop-${{ github.event_name }}-${{ github.event.number || github.event_name == 'workflow_dispatch' && github.run_id || '' }}
cancel-in-progress: false
group: server-individual-tests-lightmode-develop
cancel-in-progress: true
permissions:
contents: read
@@ -21,7 +21,7 @@ jobs:
- id: set-matrix
run: |
# Use grep and find to get the list of test files
matrix=$(find . -path '*/doctype/*/test_*.py' | xargs grep -l 'def test_' | awk '{
matrix=$(find . -path '*/test_*.py' | xargs grep -l 'def test_' | sort | awk '{
# Remove ./ prefix, file extension, and replace / with .
gsub(/^\.\//, "", $0)
gsub(/\.py$/, "", $0)
@@ -58,6 +58,7 @@ jobs:
strategy:
fail-fast: false
matrix: ${{fromJson(needs.discover.outputs.matrix)}}
max-parallel: 14
name: Test
@@ -130,4 +131,13 @@ jobs:
FRAPPE_BRANCH: ${{ github.event.inputs.branch }}
- name: Run Tests
run: 'cd ~/frappe-bench/ && bench --site test_site run-tests --app erpnext --module ${{ matrix.test }}'
run: |
site_name=$(echo "${{matrix.test}}" | sed -e 's/.*\.\(test_.*$\)/\1/')
echo "$site_name"
mkdir ~/frappe-bench/sites/$site_name
cp -r "${GITHUB_WORKSPACE}/.github/helper/site_config_mariadb.json" ~/frappe-bench/sites/$site_name/site_config.json
cd ~/frappe-bench/
bench --site $site_name reinstall --yes
bench --site $site_name set-config allow_tests true
bench --site $site_name run-tests --module ${{ matrix.test }} --lightmode

View File

@@ -41,6 +41,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
env:
TZ: 'Asia/Kolkata'
NODE_ENV: "production"
WITH_COVERAGE: ${{ github.event_name != 'pull_request' }}
@@ -56,6 +57,7 @@ jobs:
mysql:
image: mariadb:10.6
env:
TZ: 'Asia/Kolkata'
MARIADB_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
@@ -129,7 +131,7 @@ jobs:
FRAPPE_BRANCH: ${{ github.event.client_payload.sha || github.event.inputs.branch }}
- name: Run Tests
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --total-builds ${{ strategy.job-total }} --build-number ${{ matrix.container }} --with-coverage'
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --lightmode --app erpnext --total-builds ${{ strategy.job-total }} --build-number ${{ matrix.container }} --with-coverage'
env:
TYPE: server

View File

@@ -0,0 +1,39 @@
# Orchestrator — lives on develop only.
#
# Triggers on the weekly schedule and dispatches the runner workflow on each
# hotfix branch listed in the matrix. To add or remove a branch, edit the
# matrix below.
#
# POT-change triggers are handled by the runner on each hotfix branch
# (run-hotfix-translation-sync.yml), since GitHub only evaluates a workflow
# from the branch that receives the push.
name: Sync translations to hotfix branches
on:
schedule:
# 10:00 UTC Monday
- cron: "0 10 * * 1"
workflow_dispatch:
permissions:
contents: read
jobs:
trigger-runners:
name: Trigger sync → ${{ matrix.hotfix_branch }}
runs-on: ubuntu-latest
strategy:
matrix:
hotfix_branch:
- version-16-hotfix
fail-fast: false
steps:
- name: Dispatch runner on ${{ matrix.hotfix_branch }}
run: |
gh workflow run run-hotfix-translation-sync.yml \
--repo "${{ github.repository }}" \
--ref "${{ matrix.hotfix_branch }}"
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}

View File

@@ -6,7 +6,7 @@ import frappe
from frappe.model.document import Document
from frappe.utils.user import is_website_user
__version__ = "16.7.3"
__version__ = "16.22.0"
def get_default_company(user=None):

View File

@@ -1,126 +0,0 @@
{
"custom_fields": [
{
"_assign": null,
"_comments": null,
"_liked_by": null,
"_user_tags": null,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"collapsible_depends_on": null,
"columns": 0,
"creation": "2018-12-28 22:29:21.828090",
"default": null,
"depends_on": null,
"description": null,
"docstatus": 0,
"dt": "Address",
"fetch_from": null,
"fetch_if_empty": 0,
"fieldname": "tax_category",
"fieldtype": "Link",
"hidden": 0,
"hide_border": 0,
"hide_days": 0,
"hide_seconds": 0,
"idx": 15,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_preview": 0,
"in_standard_filter": 0,
"insert_after": "fax",
"label": "Tax Category",
"length": 0,
"mandatory_depends_on": null,
"modified": "2018-12-28 22:29:21.828090",
"modified_by": "Administrator",
"name": "Address-tax_category",
"no_copy": 0,
"options": "Tax Category",
"owner": "Administrator",
"parent": null,
"parentfield": null,
"parenttype": null,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": null,
"read_only": 0,
"read_only_depends_on": null,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"translatable": 0,
"unique": 0,
"width": null
},
{
"_assign": null,
"_comments": null,
"_liked_by": null,
"_user_tags": null,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"collapsible_depends_on": null,
"columns": 0,
"creation": "2020-10-14 17:41:40.878179",
"default": "0",
"depends_on": null,
"description": null,
"docstatus": 0,
"dt": "Address",
"fetch_from": null,
"fetch_if_empty": 0,
"fieldname": "is_your_company_address",
"fieldtype": "Check",
"hidden": 0,
"hide_border": 0,
"hide_days": 0,
"hide_seconds": 0,
"idx": 20,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_preview": 0,
"in_standard_filter": 0,
"insert_after": "linked_with",
"label": "Is Your Company Address",
"length": 0,
"mandatory_depends_on": null,
"modified": "2020-10-14 17:41:40.878179",
"modified_by": "Administrator",
"name": "Address-is_your_company_address",
"no_copy": 0,
"options": null,
"owner": "Administrator",
"parent": null,
"parentfield": null,
"parenttype": null,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": null,
"read_only": 0,
"read_only_depends_on": null,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"translatable": 0,
"unique": 0,
"width": null
}
],
"custom_perms": [],
"doctype": "Address",
"property_setters": [],
"sync_on_migrate": 1
}

View File

@@ -524,7 +524,8 @@ def make_gl_entries(
if gl_entries:
try:
make_gl_entries(gl_entries, cancel=(doc.docstatus == 2), merge_entries=True)
frappe.db.commit()
if not frappe.in_test:
frappe.db.commit()
except Exception as e:
if frappe.in_test:
doc.log_error(f"Error while processing deferred accounting for Invoice {doc.name}")
@@ -606,7 +607,8 @@ def book_revenue_via_journal_entry(
if submit:
journal_entry.submit()
frappe.db.commit()
if not frappe.in_test:
frappe.db.commit()
except Exception:
frappe.db.rollback()
doc.log_error(f"Error while processing deferred accounting for Invoice {doc.name}")

View File

@@ -5,8 +5,7 @@ frappe.ui.form.on("Account", {
setup: function (frm) {
frm.add_fetch("parent_account", "report_type", "report_type");
frm.add_fetch("parent_account", "root_type", "root_type");
},
onload: function (frm) {
frm.set_query("parent_account", function (doc) {
return {
filters: {
@@ -15,7 +14,18 @@ frappe.ui.form.on("Account", {
},
};
});
frm.set_query("account_category", function () {
if (!frm.doc.root_type) return;
return {
filters: {
root_type: ["in", [frm.doc.root_type, ""]],
},
};
});
},
refresh: function (frm) {
frm.toggle_display("account_name", frm.is_new());
@@ -58,12 +68,20 @@ frappe.ui.form.on("Account", {
}
}
},
account_type: function (frm) {
if (frm.doc.is_group == 0) {
frm.toggle_display(["tax_rate"], frm.doc.account_type == "Tax");
frm.toggle_display("warehouse", frm.doc.account_type == "Stock");
}
},
root_type: function (frm) {
if (frm.doc.account_category) {
frm.set_value("account_category", "");
}
},
add_toolbar_buttons: function (frm) {
frm.add_custom_button(
__("Chart of Accounts"),

View File

@@ -203,7 +203,7 @@
"idx": 1,
"is_tree": 1,
"links": [],
"modified": "2025-08-02 06:26:44.657146",
"modified": "2026-04-14 18:14:42.202065",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account",
@@ -256,6 +256,14 @@
"role": "Accounts Manager",
"share": 1,
"write": 1
},
{
"role": "HR User",
"select": 1
},
{
"role": "HR Manager",
"select": 1
}
],
"row_format": "Dynamic",

View File

@@ -518,6 +518,7 @@ def get_account_autoname(account_number, account_name, company):
def update_account_number(name, account_name, account_number=None, from_descendant=False):
_ensure_idle_system()
account = frappe.get_cached_doc("Account", name)
account.check_permission("write")
if not account:
return
@@ -579,10 +580,12 @@ def update_account_number(name, account_name, account_number=None, from_descenda
@frappe.whitelist()
def merge_account(old, new):
_ensure_idle_system()
# Validate properties before merging
new_account = frappe.get_cached_doc("Account", new)
old_account = frappe.get_cached_doc("Account", old)
new_account.check_permission("write")
old_account.check_permission("write")
if not new_account:
throw(_("Account {0} does not exist").format(new))

View File

@@ -52,60 +52,55 @@ frappe.treeview_settings["Account"] = {
],
root_label: "Accounts",
get_tree_nodes: "erpnext.accounts.utils.get_children",
on_get_node: function (nodes, deep = false) {
if (frappe.boot.user.can_read.indexOf("GL Entry") == -1) return;
on_node_render: function (node, deep) {
const render_balances = () => {
for (let account of cur_tree.account_balance_data) {
const node = cur_tree.nodes && cur_tree.nodes[account.value];
if (!node || node.is_root) continue;
let accounts = [];
if (deep) {
// in case of `get_all_nodes`
accounts = nodes.reduce((acc, node) => [...acc, ...node.data], []);
} else {
accounts = nodes;
}
// show Dr if positive since balance is calculated as debit - credit else show Cr
const balance = account.balance_in_account_currency || account.balance;
const dr_or_cr = balance > 0 ? __("Dr") : __("Cr");
const format = (value, currency) => format_currency(Math.abs(value), currency);
frappe.db.get_single_value("Accounts Settings", "show_balance_in_coa").then((value) => {
if (value) {
const get_balances = frappe.call({
method: "erpnext.accounts.utils.get_account_balances",
args: {
accounts: accounts,
company: cur_tree.args.company,
include_default_fb_balances: true,
},
});
get_balances.then((r) => {
if (!r.message || r.message.length == 0) return;
for (let account of r.message) {
const node = cur_tree.nodes && cur_tree.nodes[account.value];
if (!node || node.is_root) continue;
// show Dr if positive since balance is calculated as debit - credit else show Cr
const balance = account.balance_in_account_currency || account.balance;
const dr_or_cr = balance > 0 ? __("Dr") : __("Cr");
const format = (value, currency) => format_currency(Math.abs(value), currency);
if (account.balance !== undefined) {
node.parent && node.parent.find(".balance-area").remove();
$(
'<span class="balance-area pull-right">' +
(account.balance_in_account_currency
? format(
account.balance_in_account_currency,
account.account_currency
) + " / "
: "") +
format(account.balance, account.company_currency) +
" " +
dr_or_cr +
"</span>"
).insertBefore(node.$ul);
}
}
});
if (account.balance !== undefined) {
node.parent && node.parent.find(".balance-area").remove();
$(
'<span class="balance-area pull-right">' +
(account.account_currency != account.company_currency
? format(account.balance_in_account_currency, account.account_currency) +
" / "
: "") +
format(account.balance, account.company_currency) +
" " +
dr_or_cr +
"</span>"
).insertBefore(node.$ul);
}
}
});
};
if (frappe.boot.user.can_read.indexOf("GL Entry") == -1) return;
if (!cur_tree.account_balance_data) {
frappe.db.get_single_value("Accounts Settings", "show_balance_in_coa").then((value) => {
if (value) {
frappe.call({
method: "erpnext.accounts.utils.get_account_balances_coa",
args: {
company: cur_tree.args.company,
include_default_fb_balances: true,
},
callback: function (r) {
if (!r.message || r.message.length === 0) return;
cur_tree.account_balance_data = r.message || [];
render_balances();
},
});
}
});
} else {
render_balances();
}
},
add_tree_node: "erpnext.accounts.utils.add_ac",
menu_items: [

View File

@@ -34,6 +34,13 @@
"account_number": "0430",
"account_type": "Fixed Asset"
},
"Anlagen im Bau": {
"is_group": 1,
"Andere Anlagen, Betriebs- und Geschäftsausstattung im Bau": {
"account_number": "0498",
"account_type": "Capital Work in Progress"
}
},
"Accumulated Depreciation": {
"account_type": "Accumulated Depreciation"
}
@@ -317,13 +324,21 @@
"account_number": "3800",
"account_type": "Expenses Included In Asset Valuation"
},
"Bestandsveränderungen Roh-, Hilfs- und Betriebsstoffe sowie bezogene Waren": {
"account_number": "3960",
"account_type": "Stock Adjustment"
},
"Herstellungskosten": {
"account_number": "4996",
"account_type": "Cost of Goods Sold"
},
"Anlagenabgänge Sachanlagen (Restbuchwert bei Buchverlust)": {
"account_number": "2310",
"account_type": "Expense Account"
},
"Verluste aus dem Abgang von Gegenständen des Anlagevermögens": {
"account_number": "2320",
"account_type": "Stock Adjustment"
"account_type": "Expense Account"
},
"Verwaltungskosten": {
"account_number": "4997",
@@ -340,7 +355,7 @@
"is_group": 1,
"Abschreibungen auf Sachanlagen (ohne AfA auf Kfz und Gebäude)": {
"account_number": "4830",
"account_type": "Accumulated Depreciation"
"account_type": "Depreciation"
},
"Abschreibungen auf Gebäude": {
"account_number": "4831",

View File

@@ -6,64 +6,83 @@
"Current Assets": {
"Accounts Receivable": {
"Debtors": {
"account_type": "Receivable"
"account_type": "Receivable",
"account_category": "Trade Receivables"
}
},
"Bank Accounts": {
"account_type": "Bank",
"is_group": 1
"is_group": 1,
"account_category": "Cash and Cash Equivalents"
},
"Cash In Hand": {
"Cash": {
"account_type": "Cash"
"account_type": "Cash",
"account_category": "Cash and Cash Equivalents"
},
"account_type": "Cash"
"account_type": "Cash",
"account_category": "Cash and Cash Equivalents"
},
"Loans and Advances (Assets)": {
"is_group": 1
"is_group": 1,
"account_category": "Other Receivables"
},
"Securities and Deposits": {
"Earnest Money": {}
"Earnest Money": {
"account_category": "Other Current Assets"
}
},
"Stock Assets": {
"Stock In Hand": {
"account_type": "Stock"
"account_type": "Stock",
"account_category": "Stock Assets"
},
"account_type": "Stock"
"account_type": "Stock",
"account_category": "Stock Assets"
},
"Tax Assets": {
"is_group": 1
"is_group": 1,
"account_category": "Other Current Assets"
}
},
"Fixed Assets": {
"Capital Equipment": {
"account_type": "Fixed Asset"
"account_type": "Fixed Asset",
"account_category": "Tangible Assets"
},
"Electronic Equipment": {
"account_type": "Fixed Asset"
"account_type": "Fixed Asset",
"account_category": "Tangible Assets"
},
"Furniture and Fixtures": {
"account_type": "Fixed Asset"
"account_type": "Fixed Asset",
"account_category": "Tangible Assets"
},
"Office Equipment": {
"account_type": "Fixed Asset"
"account_type": "Fixed Asset",
"account_category": "Tangible Assets"
},
"Plants and Machineries": {
"account_type": "Fixed Asset"
"account_type": "Fixed Asset",
"account_category": "Tangible Assets"
},
"Buildings": {
"account_type": "Fixed Asset"
"account_type": "Fixed Asset",
"account_category": "Tangible Assets"
},
"Accumulated Depreciations": {
"account_type": "Accumulated Depreciation"
"account_type": "Accumulated Depreciation",
"account_category": "Tangible Assets"
}
},
"Investments": {
"is_group": 1
"is_group": 1,
"account_category": "Long-term Investments"
},
"Temporary Accounts": {
"Temporary Opening": {
"account_type": "Temporary"
"account_type": "Temporary",
"account_category": "Other Non-current Assets"
}
},
"root_type": "Asset"
@@ -72,55 +91,103 @@
"Direct Expenses": {
"Stock Expenses": {
"Cost of Goods Sold": {
"account_type": "Cost of Goods Sold"
"account_type": "Cost of Goods Sold",
"account_category": "Cost of Goods Sold"
},
"Expenses Included In Valuation": {
"account_type": "Expenses Included In Valuation"
"account_type": "Expenses Included In Valuation",
"account_category": "Other Direct Costs"
},
"Stock Adjustment": {
"account_type": "Stock Adjustment"
"account_type": "Stock Adjustment",
"account_category": "Other Direct Costs"
}
}
},
"Indirect Expenses": {
"Administrative Expenses": {},
"Commission on Sales": {},
"Administrative Expenses": {
"account_category": "Operating Expenses"
},
"Commission on Sales": {
"account_category": "Operating Expenses"
},
"Depreciation": {
"account_type": "Depreciation"
"account_type": "Depreciation",
"account_category": "Operating Expenses"
},
"Entertainment Expenses": {
"account_category": "Operating Expenses"
},
"Entertainment Expenses": {},
"Freight and Forwarding Charges": {
"account_type": "Chargeable"
"account_type": "Chargeable",
"account_category": "Operating Expenses"
},
"Legal Expenses": {
"account_category": "Operating Expenses"
},
"Marketing Expenses": {
"account_type": "Chargeable",
"account_category": "Operating Expenses"
},
"Miscellaneous Expenses": {
"account_type": "Chargeable",
"account_category": "Operating Expenses"
},
"Office Maintenance Expenses": {
"account_category": "Operating Expenses"
},
"Office Rent": {
"account_category": "Operating Expenses"
},
"Postal Expenses": {
"account_category": "Operating Expenses"
},
"Print and Stationery": {
"account_category": "Operating Expenses"
},
"Legal Expenses": {},
"Marketing Expenses": {},
"Miscellaneous Expenses": {},
"Office Maintenance Expenses": {},
"Office Rent": {},
"Postal Expenses": {},
"Print and Stationery": {},
"Rounded Off": {
"account_type": "Round Off"
"account_type": "Round Off",
"account_category": "Operating Expenses"
},
"Salary": {},
"Sales Expenses": {},
"Telephone Expenses": {},
"Travel Expenses": {},
"Utility Expenses": {},
"Write Off": {},
"Exchange Gain/Loss": {},
"Gain/Loss on Asset Disposal": {},
"Impairment": {}
"Salary": {
"account_category": "Operating Expenses"
},
"Sales Expenses": {
"account_category": "Operating Expenses"
},
"Telephone Expenses": {
"account_category": "Operating Expenses"
},
"Travel Expenses": {
"account_category": "Operating Expenses"
},
"Utility Expenses": {
"account_category": "Operating Expenses"
},
"Write Off": {
"account_category": "Operating Expenses"
},
"Exchange Gain/Loss": {
"account_category": "Operating Expenses"
},
"Gain/Loss on Asset Disposal": {
"account_category": "Other Operating Income"
},
"Impairment": {
"account_category": "Operating Expenses"
}
},
"root_type": "Expense"
},
"Income": {
"Direct Income": {
"Sales": {
"account_type": "Income Account"
"account_type": "Income Account",
"account_category": "Revenue from Operations"
},
"Service": {
"account_type": "Income Account"
"account_type": "Income Account",
"account_category": "Revenue from Operations"
},
"account_type": "Income Account"
},
@@ -132,31 +199,51 @@
},
"Source of Funds (Liabilities)": {
"Capital Account": {
"Reserves and Surplus": {},
"Shareholders Funds": {},
"Revaluation Surplus": {}
"Reserves and Surplus": {
"account_category": "Reserves and Surplus"
},
"Shareholders Funds": {
"account_category": "Share Capital"
},
"Revaluation Surplus": {
"account_category": "Reserves and Surplus"
}
},
"Current Liabilities": {
"Accounts Payable": {
"Creditors": {
"account_type": "Payable"
"account_type": "Payable",
"account_category": "Trade Payables"
},
"Payroll Payable": {}
"Payroll Payable": {
"account_category": "Other Payables"
}
},
"Stock Liabilities": {
"Stock Received But Not Billed": {
"account_type": "Stock Received But Not Billed"
"account_type": "Stock Received But Not Billed",
"account_category": "Trade Payables"
}
},
"Duties and Taxes": {
"TDS": {
"account_type": "Tax"
}
"account_type": "Tax",
"account_category": "Current Tax Liabilities"
},
"account_type": "Tax",
"is_group": 1,
"account_category": "Current Tax Liabilities"
},
"Loans (Liabilities)": {
"Secured Loans": {},
"Unsecured Loans": {},
"Bank Overdraft Account": {}
"Secured Loans": {
"account_category": "Long-term Borrowings"
},
"Unsecured Loans": {
"account_category": "Long-term Borrowings"
},
"Bank Overdraft Account": {
"account_category": "Short-term Borrowings"
}
}
},
"root_type": "Liability"

View File

@@ -0,0 +1,449 @@
{
"country_code": "nz",
"name": "New Zealand - Chart of Accounts with Account Numbers",
"disabled": "No",
"tree": {
"Application of Funds (Assets)": {
"Current Assets": {
"Bank Accounts": {
"Business Transaction Account": {
"account_number": "11011",
"account_type": "Bank"
},
"Business Savings Account": {
"account_number": "11012",
"account_type": "Bank"
},
"account_number": "11010",
"is_group": 1
},
"Cash on Hand": {
"account_number": "11020",
"account_type": "Cash"
},
"Accounts Receivable": {
"Debtors": {
"account_number": "11210",
"account_type": "Receivable"
},
"Provision for Doubtful Debts": {
"account_number": "11220"
},
"account_number": "11200",
"is_group": 1
},
"Inventory": {
"Stock on Hand": {
"account_number": "11311",
"account_type": "Stock"
},
"Work In Progress": {
"account_number": "11312",
"account_type": "Stock"
},
"account_number": "11310",
"account_type": "Stock",
"is_group": 1
},
"Prepayments": {
"Prepayments": {
"account_number": "11411"
},
"Supplier Advances": {
"account_number": "11412"
},
"Deferred Expense": {
"account_number": "11413"
},
"account_number": "11410",
"is_group": 1
},
"GST Receivable": {
"account_number": "11510",
"account_type": "Tax"
},
"Income Tax Receivable": {
"account_number": "11520",
"account_type": "Tax"
},
"account_number": "11000",
"is_group": 1
},
"Fixed Assets": {
"Plant & Equipment": {
"Plant & Equipment": {
"account_number": "16011",
"account_type": "Fixed Asset"
},
"Accumulated Depreciation - Plant & Equipment": {
"account_number": "16012",
"account_type": "Accumulated Depreciation"
},
"account_number": "16010",
"is_group": 1
},
"Motor Vehicles": {
"Motor Vehicles": {
"account_number": "16021",
"account_type": "Fixed Asset"
},
"Accumulated Depreciation - Motor Vehicles": {
"account_number": "16022",
"account_type": "Accumulated Depreciation"
},
"account_number": "16020",
"is_group": 1
},
"Office Equipment": {
"Office Equipment": {
"account_number": "16031",
"account_type": "Fixed Asset"
},
"Accumulated Depreciation - Office Equipment": {
"account_number": "16032",
"account_type": "Accumulated Depreciation"
},
"account_number": "16030",
"is_group": 1
},
"Buildings": {
"Buildings": {
"account_number": "16041",
"account_type": "Fixed Asset"
},
"Accumulated Depreciation - Buildings": {
"account_number": "16042",
"account_type": "Accumulated Depreciation"
},
"account_number": "16040",
"is_group": 1
},
"Computer Equipment": {
"Computer Equipment": {
"account_number": "16051",
"account_type": "Fixed Asset"
},
"Accumulated Depreciation - Computer Equipment": {
"account_number": "16052",
"account_type": "Accumulated Depreciation"
},
"account_number": "16050",
"is_group": 1
},
"Capital Work in Progress": {
"account_number": "16090",
"account_type": "Capital Work in Progress"
},
"account_number": "16000",
"is_group": 1
},
"account_number": "10000",
"root_type": "Asset"
},
"Source of Funds (Liabilities)": {
"Current Liabilities": {
"Accounts Payable": {
"Creditors": {
"account_number": "21010",
"account_type": "Payable"
},
"account_number": "21000",
"is_group": 1
},
"Goods Received Not Invoiced": {
"account_number": "21100",
"account_type": "Stock Received But Not Billed"
},
"Asset Received Not Invoiced": {
"account_number": "21110",
"account_type": "Asset Received But Not Billed"
},
"Service Received Not Invoiced": {
"account_number": "21120",
"account_type": "Service Received But Not Billed"
},
"Accrued Expenses": {
"account_number": "21200"
},
"Wages Payable": {
"account_number": "21300"
},
"PAYE Payable": {
"account_number": "22010"
},
"KiwiSaver Payable": {
"account_number": "22020"
},
"ACC Payable": {
"account_number": "22030"
},
"Credit Cards": {
"Business Credit Card": {
"account_number": "22110"
},
"account_number": "22100",
"is_group": 1
},
"Customer Advances": {
"account_number": "22200"
},
"Deferred Revenue": {
"account_number": "22210"
},
"Provisional Account": {
"account_number": "22220"
},
"Tax Liabilities": {
"GST Payable": {
"account_number": "22310",
"account_type": "Tax"
},
"GST Suspense": {
"account_number": "22320",
"account_type": "Tax"
},
"FBT Payable": {
"account_number": "22330",
"account_type": "Tax"
},
"Income Tax Payable": {
"account_number": "22340",
"account_type": "Tax"
},
"account_number": "22300",
"is_group": 1
},
"account_number": "21500",
"is_group": 1
},
"Non-Current Liabilities": {
"Bank Loans": {
"Bank Loan": {
"account_number": "25011"
},
"account_number": "25010",
"is_group": 1
},
"Lease Liabilities": {
"Lease Liability": {
"account_number": "25021"
},
"account_number": "25020",
"is_group": 1
},
"Shareholder Loans": {
"Shareholder Loan": {
"account_number": "25031"
},
"account_number": "25030",
"is_group": 1
},
"account_number": "25000",
"is_group": 1
},
"account_number": "20000",
"root_type": "Liability"
},
"Equity": {
"Share Capital": {
"account_number": "31010",
"account_type": "Equity"
},
"Drawings": {
"account_number": "31020",
"account_type": "Equity"
},
"Current Year Earnings": {
"account_number": "35010",
"account_type": "Equity"
},
"Retained Earnings": {
"account_number": "35020",
"account_type": "Equity"
},
"account_number": "30000",
"root_type": "Equity"
},
"Income": {
"Sales": {
"account_number": "41010",
"account_type": "Income Account"
},
"Other Income": {
"Interest Income": {
"account_number": "47010",
"account_type": "Income Account"
},
"Rounding Gain/Loss": {
"account_number": "47020",
"account_type": "Income Account"
},
"Foreign Exchange Gain": {
"account_number": "47030",
"account_type": "Income Account"
},
"account_number": "47000",
"is_group": 1
},
"account_number": "40000",
"root_type": "Income"
},
"Expenses": {
"Cost of Goods Sold": {
"Purchases": {
"account_number": "51010",
"account_type": "Cost of Goods Sold"
},
"Freight Inwards": {
"account_number": "51020",
"account_type": "Expenses Included In Valuation"
},
"Duty and Landing Costs": {
"account_number": "51030",
"account_type": "Expenses Included In Valuation"
},
"Stock Adjustment": {
"account_number": "51040",
"account_type": "Stock Adjustment"
},
"Stock Write Off": {
"account_number": "51050",
"account_type": "Stock Adjustment"
},
"account_number": "51000",
"account_type": "Cost of Goods Sold",
"is_group": 1
},
"Operating Expenses": {
"Wages & Salaries": {
"account_number": "61010",
"account_type": "Expense Account"
},
"KiwiSaver Employer Contribution": {
"account_number": "61020",
"account_type": "Expense Account"
},
"ACC Levies": {
"account_number": "61030",
"account_type": "Expense Account"
},
"Rent": {
"account_number": "65010",
"account_type": "Expense Account"
},
"Power": {
"account_number": "65020",
"account_type": "Expense Account"
},
"Telephone": {
"account_number": "66010",
"account_type": "Expense Account"
},
"Insurance": {
"account_number": "64010",
"account_type": "Expense Account"
},
"Accounting Fees": {
"account_number": "64020",
"account_type": "Expense Account"
},
"Legal Fees": {
"account_number": "64030",
"account_type": "Expense Account"
},
"Advertising and Marketing": {
"account_number": "65030",
"account_type": "Expense Account"
},
"Repairs and Maintenance": {
"account_number": "65040",
"account_type": "Expense Account"
},
"Freight and Courier": {
"account_number": "65050",
"account_type": "Expense Account"
},
"Operating Costs": {
"account_number": "65060",
"account_type": "Expense Account"
},
"account_number": "60000",
"is_group": 1
},
"Depreciation and Amortisation": {
"Depreciation - Plant & Equipment": {
"account_number": "62010",
"account_type": "Depreciation"
},
"Depreciation - Motor Vehicles": {
"account_number": "62020",
"account_type": "Depreciation"
},
"Depreciation - Office Equipment": {
"account_number": "62030",
"account_type": "Depreciation"
},
"Depreciation - Computer Equipment": {
"account_number": "62040",
"account_type": "Depreciation"
},
"account_number": "62000",
"is_group": 1
},
"Finance Costs": {
"Bank Charges": {
"account_number": "67010",
"account_type": "Expense Account"
},
"Interest Expense": {
"account_number": "67020",
"account_type": "Expense Account"
},
"Rounding Off": {
"account_number": "67030",
"account_type": "Round Off"
},
"Payment Discounts": {
"account_number": "67040",
"account_type": "Expense Account"
},
"account_number": "67000",
"is_group": 1
},
"Income Tax Expense": {
"account_number": "81010",
"account_type": "Expense Account"
},
"Foreign Exchange": {
"Exchange Gain/Loss": {
"account_number": "82010",
"account_type": "Expense Account"
},
"Unrealized Exchange Gain/Loss": {
"account_number": "82020",
"account_type": "Expense Account"
},
"account_number": "82000",
"is_group": 1
},
"Bad Debts": {
"account_number": "83010",
"account_type": "Expense Account"
},
"Write Off": {
"account_number": "83020",
"account_type": "Expense Account"
},
"Gain/Loss on Asset Disposal": {
"account_number": "83030",
"account_type": "Expense Account"
},
"Expenses Included In Asset Valuation": {
"account_number": "84010",
"account_type": "Expenses Included In Asset Valuation"
},
"account_number": "50000",
"root_type": "Expense"
}
}
}

View File

@@ -0,0 +1,851 @@
{
"name": "Philippines",
"country": "Philippines",
"tree": {
"Asset": {
"account_number": "1000",
"is_group": 1,
"root_type": "Asset",
"Current Assets": {
"account_number": "1001",
"is_group": 1,
"root_type": "Asset",
"Cash": {
"account_number": "1100",
"is_group": 1,
"root_type": "Asset",
"account_type": "Cash",
"Cash on Hand": {
"account_number": "1101",
"is_group": 0,
"root_type": "Asset",
"account_type": "Cash"
},
"Petty Cash Fund": {
"account_number": "1200",
"is_group": 1,
"root_type": "Asset",
"account_type": "Cash",
"Petty Cash Fund": {
"account_number": "1201",
"is_group": 0,
"root_type": "Asset",
"account_type": "Cash"
}
}
},
"Bank Accounts": {
"account_number": "1102",
"is_group": 1,
"root_type": "Asset",
"account_type": "Bank"
},
"Advances to Officers & Employees": {
"account_number": "1290",
"is_group": 1,
"root_type": "Asset",
"Advances to Officers & Employees": {
"account_number": "1291",
"is_group": 0,
"root_type": "Asset"
}
},
"Accounts Receivable Trade": {
"account_number": "1300",
"is_group": 1,
"root_type": "Asset",
"Accounts Receivable - Trade": {
"account_number": "1301",
"is_group": 0,
"root_type": "Asset",
"account_type": "Receivable"
}
},
"Accounts Receivable - Affiliates": {
"account_number": "1310",
"is_group": 1,
"root_type": "Asset",
"Due from Company": {
"account_number": "1311",
"is_group": 0,
"root_type": "Asset"
}
},
"Accounts Receivable - Others": {
"account_number": "1400",
"is_group": 1,
"root_type": "Asset",
"Accounts Receivable - Others": {
"account_number": "1401",
"is_group": 0,
"root_type": "Asset"
}
},
"Parts, Materials and Supplies": {
"account_number": "1500",
"is_group": 1,
"root_type": "Asset",
"Parts, Materials and Supplies": {
"account_number": "1501",
"is_group": 0,
"root_type": "Asset"
},
"Raw Materials - Demo": {
"account_number": "1502",
"is_group": 0,
"root_type": "Asset"
}
},
"Project in Progress": {
"account_number": "1510",
"is_group": 1,
"root_type": "Asset",
"Project in Progress": {
"account_number": "1511",
"is_group": 0,
"root_type": "Asset"
},
"Factory Overhead Variance": {
"account_number": "1512",
"is_group": 0,
"root_type": "Asset"
}
},
"Finished Goods": {
"account_number": "1520",
"is_group": 1,
"root_type": "Asset",
"Finished Goods Inventory": {
"account_number": "1531",
"is_group": 0,
"root_type": "Asset",
"account_type": "Stock"
},
"Inventory in Transit": {
"account_number": "1532",
"is_group": 0,
"root_type": "Asset",
"account_type": "Stock Adjustment"
}
},
"Prepayments": {
"account_number": "1600",
"is_group": 1,
"root_type": "Asset",
"Prepaid Insurance & Bonds": {
"account_number": "1601",
"is_group": 0,
"root_type": "Asset"
},
"Prepaid Rent": {
"account_number": "1602",
"is_group": 0,
"root_type": "Asset"
}
},
"VAT Input Tax": {
"account_number": "1610",
"is_group": 1,
"root_type": "Asset",
"VAT Input Tax - Goods": {
"account_number": "1611",
"is_group": 0,
"root_type": "Asset",
"account_type": "Tax"
}
}
},
"Non - Current Assets": {
"account_number": "1002",
"is_group": 1,
"root_type": "Asset",
"Property, Plants And Equipments": {
"account_number": "1700",
"is_group": 1,
"root_type": "Asset",
"Land": {
"account_number": "1701",
"is_group": 0,
"root_type": "Asset",
"account_type": "Fixed Asset"
},
"Buildings & Improvements": {
"account_number": "1702",
"is_group": 0,
"root_type": "Asset",
"account_type": "Fixed Asset"
},
"Delivery & Trans Equipment": {
"account_number": "1703",
"is_group": 0,
"root_type": "Asset",
"account_type": "Fixed Asset"
},
"Furniture & Fixtures": {
"account_number": "1704",
"is_group": 0,
"root_type": "Asset",
"account_type": "Fixed Asset"
},
"Machinery & Equipment": {
"account_number": "1705",
"is_group": 0,
"root_type": "Asset",
"account_type": "Fixed Asset"
}
},
"Accum Depr. - Property, Plants and Equipment": {
"account_number": "1800",
"is_group": 1,
"root_type": "Asset",
"Accumulated Dep Bdgs & Improv": {
"account_number": "1801",
"is_group": 0,
"root_type": "Asset",
"account_type": "Accumulated Depreciation"
},
"Accumulated Dep Delivery & Trans": {
"account_number": "1802",
"is_group": 0,
"root_type": "Asset",
"account_type": "Accumulated Depreciation"
},
"Accumulated Dep Furniture & Fixture": {
"account_number": "1803",
"is_group": 0,
"root_type": "Asset",
"account_type": "Accumulated Depreciation"
},
"Accumulated Depreciation - Machinery & Equipment": {
"account_number": "1804",
"is_group": 0,
"root_type": "Asset",
"account_type": "Accumulated Depreciation"
}
}
},
"Other Assets": {
"account_number": "1003",
"is_group": 1,
"root_type": "Asset",
"Advances To Supplier": {
"account_number": "1900",
"is_group": 1,
"root_type": "Asset",
"Advances To Supplier": {
"account_number": "1901",
"is_group": 0,
"root_type": "Asset"
}
},
"Miscellaneous Deposits": {
"account_number": "1910",
"is_group": 1,
"root_type": "Asset",
"Miscellaneous Deposits": {
"account_number": "1911",
"is_group": 0,
"root_type": "Asset"
}
},
"Retirement Fund": {
"account_number": "1920",
"is_group": 1,
"root_type": "Asset",
"Retirement Fund": {
"account_number": "1921",
"is_group": 0,
"root_type": "Asset"
}
},
"Investment": {
"account_number": "1930",
"is_group": 1,
"root_type": "Asset",
"Investment": {
"account_number": "1931",
"is_group": 0,
"root_type": "Asset"
}
},
"System Development": {
"account_number": "1940",
"is_group": 1,
"root_type": "Asset",
"System Development": {
"account_number": "1941",
"is_group": 0,
"root_type": "Asset"
}
}
}
},
"Liability": {
"account_number": "2000",
"is_group": 1,
"root_type": "Liability",
"Current Liabilities": {
"account_number": "2001",
"is_group": 1,
"root_type": "Liability",
"Accounts Payable Trade": {
"account_number": "2100",
"is_group": 1,
"root_type": "Liability",
"Accounts Payable - Trade": {
"account_number": "2101",
"is_group": 0,
"root_type": "Liability",
"account_type": "Payable"
}
},
"Accounts Payable Others": {
"account_number": "2110",
"is_group": 1,
"root_type": "Liability",
"Accounts Payable - Payroll": {
"account_number": "2111",
"is_group": 0,
"root_type": "Liability"
}
},
"VAT Output Tax": {
"account_number": "2200",
"is_group": 1,
"root_type": "Liability",
"VAT Output Tax": {
"account_number": "2201",
"is_group": 0,
"root_type": "Liability",
"account_type": "Tax"
}
},
"Withholding Taxes Payable Wages": {
"account_number": "2210",
"is_group": 1,
"root_type": "Liability",
"Withholding Taxes Payable Wages": {
"account_number": "2211",
"is_group": 0,
"root_type": "Liability",
"account_type": "Tax"
}
},
"Withholding Taxes Payable Expanded": {
"account_number": "2220",
"is_group": 1,
"root_type": "Liability",
"Withholding Taxes Payable Expanded": {
"account_number": "2221",
"is_group": 0,
"root_type": "Liability",
"account_type": "Tax"
}
},
"Accruals And Other Current Payables": {
"account_number": "2300",
"is_group": 1,
"root_type": "Liability",
"Stock Received But Not Billed": {
"account_number": "2301",
"is_group": 0,
"root_type": "Liability",
"account_type": "Stock Received But Not Billed"
}
},
"Payable to Government and Other Institutions": {
"account_number": "2400",
"is_group": 1,
"root_type": "Liability",
"SSS Premium Payable": {
"account_number": "2401",
"is_group": 0,
"root_type": "Liability"
},
"SSS Salary Loan Payable": {
"account_number": "2402",
"is_group": 0,
"root_type": "Liability"
},
"PhilHealth Premium": {
"account_number": "2403",
"is_group": 0,
"root_type": "Liability"
},
"Pag-ibig Loan Payable": {
"account_number": "2404",
"is_group": 0,
"root_type": "Liability"
},
"Coop Loans": {
"account_number": "2405",
"is_group": 0,
"root_type": "Liability"
},
"Coop Contributions": {
"account_number": "2406",
"is_group": 0,
"root_type": "Liability"
},
"Canteen": {
"account_number": "2407",
"is_group": 0,
"root_type": "Liability"
},
"AUB Loan Payable": {
"account_number": "2408",
"is_group": 0,
"root_type": "Liability"
},
"HSBC Loan Payable": {
"account_number": "2409",
"is_group": 0,
"root_type": "Liability"
}
},
"Customer Deposits": {
"account_number": "2500",
"is_group": 0,
"root_type": "Liability",
"account_type": "Payable"
}
},
"Non Current Liabilities": {
"account_number": "2002",
"is_group": 1,
"root_type": "Liability",
"Due To Associated Company": {
"account_number": "2600",
"is_group": 1,
"root_type": "Liability",
"Due To Associated Company": {
"account_number": "2601",
"is_group": 0,
"root_type": "Liability"
}
},
"Deferred Income": {
"account_number": "2700",
"is_group": 1,
"root_type": "Liability",
"Deferred Income": {
"account_number": "2701",
"is_group": 0,
"root_type": "Liability"
}
},
"Notes Payable": {
"account_number": "2800",
"is_group": 1,
"root_type": "Liability",
"Notes Payable": {
"account_number": "2801",
"is_group": 0,
"root_type": "Liability"
}
},
"Dividends Payable": {
"account_number": "2900",
"is_group": 0,
"root_type": "Liability"
}
}
},
"Equity": {
"account_number": "3000",
"is_group": 1,
"root_type": "Equity",
"STOCKHOLDER'S EQUITY": {
"account_number": "3001",
"is_group": 1,
"root_type": "Equity",
"Capital Stocks": {
"account_number": "3100",
"is_group": 1,
"root_type": "Equity",
"Capital Stocks": {
"account_number": "3101",
"is_group": 0,
"root_type": "Equity"
}
},
"Subscription Receivable": {
"account_number": "3200",
"is_group": 1,
"root_type": "Equity",
"Subscription Receivable": {
"account_number": "3201",
"is_group": 0,
"root_type": "Equity"
}
},
"Retained Earnings": {
"account_number": "3300",
"is_group": 1,
"root_type": "Equity",
"Retained Earnings": {
"account_number": "3301",
"is_group": 0,
"root_type": "Equity"
}
},
"Current Year (Profit/Loss)": {
"account_number": "3400",
"is_group": 0,
"root_type": "Equity"
},
"Drawings": {
"account_number": "3500",
"is_group": 1,
"root_type": "Equity",
"Drawings": {
"account_number": "3501",
"is_group": 0,
"root_type": "Equity"
}
}
}
},
"Income": {
"account_number": "4000",
"is_group": 1,
"root_type": "Income",
"Gross Sales": {
"account_number": "4100",
"is_group": 1,
"root_type": "Income",
"Sales": {
"account_number": "4101",
"is_group": 0,
"root_type": "Income"
}
},
"Sales Adjustment": {
"account_number": "4200",
"is_group": 1,
"root_type": "Income",
"Sales Return And Allowance": {
"account_number": "4201",
"is_group": 0,
"root_type": "Income"
}
},
"Sales Discount": {
"account_number": "4300",
"is_group": 1,
"root_type": "Income",
"Sales Discount": {
"account_number": "4301",
"is_group": 0,
"root_type": "Income"
}
},
"Other Income": {
"account_number": "6000",
"is_group": 1,
"root_type": "Income",
"Interest Income Bank": {
"account_number": "6010",
"is_group": 1,
"root_type": "Income",
"Interest Income Bank": {
"account_number": "6011",
"is_group": 0,
"root_type": "Income"
}
},
"Dividend Income": {
"account_number": "6020",
"is_group": 1,
"root_type": "Income",
"Dividend Income": {
"account_number": "6021",
"is_group": 0,
"root_type": "Income"
}
}
}
},
"Expense": {
"account_number": "5000",
"is_group": 1,
"root_type": "Expense",
"Cost of Goods Sold": {
"account_number": "5001",
"is_group": 1,
"root_type": "Expense",
"Cost of Goods Sold": {
"account_number": "5010",
"is_group": 0,
"root_type": "Expense",
"account_type": "Cost of Goods Sold"
}
},
"Operating Expenses": {
"account_number": "5100",
"is_group": 1,
"root_type": "Expense",
"Salaries, Wages": {
"account_number": "5101",
"is_group": 0,
"root_type": "Expense"
},
"13th Month Pay & Bonus": {
"account_number": "5102",
"is_group": 0,
"root_type": "Expense"
},
"Overtime & Night Diff": {
"account_number": "5103",
"is_group": 0,
"root_type": "Expense"
},
"Incentive/Performance Bonus": {
"account_number": "5104",
"is_group": 0,
"root_type": "Expense"
},
"Employees Benefits": {
"account_number": "5105",
"is_group": 0,
"root_type": "Expense"
},
"Advertising & Promotions": {
"account_number": "5106",
"is_group": 0,
"root_type": "Expense"
},
"Amortization of Leasehold Improvement": {
"account_number": "5107",
"is_group": 0,
"root_type": "Expense"
},
"Amortization of Pre-Operating": {
"account_number": "5108",
"is_group": 0,
"root_type": "Expense"
},
"Amortization of System Development": {
"account_number": "5109",
"is_group": 0,
"root_type": "Expense"
},
"Audit & Legal Fee": {
"account_number": "5110",
"is_group": 0,
"root_type": "Expense"
},
"Bad Debts Expenses": {
"account_number": "5111",
"is_group": 0,
"root_type": "Expense"
},
"Client Service & Maintenance": {
"account_number": "5112",
"is_group": 0,
"root_type": "Expense"
},
"Commission Expenses": {
"account_number": "5113",
"is_group": 0,
"root_type": "Expense"
},
"Communications": {
"account_number": "5114",
"is_group": 0,
"root_type": "Expense"
},
"Contractual Services": {
"account_number": "5115",
"is_group": 0,
"root_type": "Expense"
},
"Depreciation Expenses": {
"account_number": "5116",
"is_group": 0,
"root_type": "Expense",
"account_type": "Depreciation"
},
"Donation & Contribution": {
"account_number": "5117",
"is_group": 0,
"root_type": "Expense"
},
"Dues & Subscription": {
"account_number": "5118",
"is_group": 0,
"root_type": "Expense"
},
"Employee Med/Dental/Hosp Expenses": {
"account_number": "5119",
"is_group": 0,
"root_type": "Expense"
},
"Employee Uniforms": {
"account_number": "5120",
"is_group": 0,
"root_type": "Expense"
},
"Equipage": {
"account_number": "5121",
"is_group": 0,
"root_type": "Expense"
},
"Expenses for Reclassification": {
"account_number": "5122",
"is_group": 0,
"root_type": "Expense"
},
"Gas & Oil": {
"account_number": "5123",
"is_group": 0,
"root_type": "Expense"
},
"Insurance Expenses": {
"account_number": "5124",
"is_group": 0,
"root_type": "Expense"
},
"Light & Water": {
"account_number": "5125",
"is_group": 0,
"root_type": "Expense"
},
"Local/Overseas Travel": {
"account_number": "5126",
"is_group": 0,
"root_type": "Expense"
},
"Meals & Transportation Expenses": {
"account_number": "5127",
"is_group": 0,
"root_type": "Expense"
},
"Meeting & Conferences": {
"account_number": "5128",
"is_group": 0,
"root_type": "Expense"
},
"Miscellaneous Expenses": {
"account_number": "5129",
"is_group": 0,
"root_type": "Expense"
},
"Mockup Expenses": {
"account_number": "5130",
"is_group": 0,
"root_type": "Expense"
},
"Obsolescence Expenses": {
"account_number": "5131",
"is_group": 0,
"root_type": "Expense"
},
"Other Support Cost": {
"account_number": "5132",
"is_group": 0,
"root_type": "Expense"
},
"Pag-ibig Contribution": {
"account_number": "5133",
"is_group": 0,
"root_type": "Expense"
},
"Performance Bonds": {
"account_number": "5134",
"is_group": 0,
"root_type": "Expense"
},
"Pre Employment Expenses": {
"account_number": "5135",
"is_group": 0,
"root_type": "Expense"
},
"Professional Fees": {
"account_number": "5136",
"is_group": 0,
"root_type": "Expense"
},
"Recruitment & Employment": {
"account_number": "5137",
"is_group": 0,
"root_type": "Expense"
},
"Rent Expenses": {
"account_number": "5138",
"is_group": 0,
"root_type": "Expense"
},
"Rent Expenses Others": {
"account_number": "5139",
"is_group": 0,
"root_type": "Expense"
},
"Repairs & Maintenance": {
"account_number": "5140",
"is_group": 0,
"root_type": "Expense"
},
"Representation Expenses": {
"account_number": "5141",
"is_group": 0,
"root_type": "Expense"
},
"Research & Development": {
"account_number": "5142",
"is_group": 0,
"root_type": "Expense"
},
"Security Expenses": {
"account_number": "5143",
"is_group": 0,
"root_type": "Expense"
},
"Shared Services Fee": {
"account_number": "5144",
"is_group": 0,
"root_type": "Expense"
},
"SSS/Medicare/EC Contributions": {
"account_number": "5145",
"is_group": 0,
"root_type": "Expense"
},
"Stationery & Supplies": {
"account_number": "5146",
"is_group": 0,
"root_type": "Expense"
},
"Taxes & Licenses": {
"account_number": "5147",
"is_group": 0,
"root_type": "Expense",
"account_type": "Tax"
},
"Training & Seminar": {
"account_number": "5148",
"is_group": 0,
"root_type": "Expense"
}
},
"Stock Adjustment": {
"account_number": "5200",
"is_group": 0,
"root_type": "Expense",
"account_type": "Stock Adjustment"
},
"Round Off": {
"account_number": "5300",
"is_group": 0,
"root_type": "Expense",
"account_type": "Round Off"
},
"Expenses Included In Valuation": {
"account_number": "5400",
"is_group": 0,
"root_type": "Expense",
"account_type": "Expenses Included In Valuation"
}
}
}
}

View File

@@ -3,7 +3,6 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import nowdate
from erpnext.accounts.doctype.account.account import (
@@ -12,11 +11,10 @@ from erpnext.accounts.doctype.account.account import (
update_account_number,
)
from erpnext.stock import get_company_default_inventory_account, get_warehouse_account
EXTRA_TEST_RECORD_DEPENDENCIES = ["Company"]
from erpnext.tests.utils import ERPNextTestSuite
class TestAccount(IntegrationTestCase):
class TestAccount(ERPNextTestSuite):
def test_rename_account(self):
if not frappe.db.exists("Account", "1210 - Debtors - _TC"):
acc = frappe.new_doc("Account")
@@ -323,72 +321,6 @@ class TestAccount(IntegrationTestCase):
self.assertEqual(balance, 0)
def _make_test_records(verbose=None):
from frappe.tests.utils import make_test_objects
accounts = [
# [account_name, parent_account, is_group]
["_Test Bank", "Bank Accounts", 0, "Bank", None],
["_Test Bank USD", "Bank Accounts", 0, "Bank", "USD"],
["_Test Bank EUR", "Bank Accounts", 0, "Bank", "EUR"],
["_Test Cash", "Cash In Hand", 0, "Cash", None],
["_Test Account Stock Expenses", "Direct Expenses", 1, None, None],
["_Test Account Shipping Charges", "_Test Account Stock Expenses", 0, "Chargeable", None],
["_Test Account Customs Duty", "_Test Account Stock Expenses", 0, "Tax", None],
["_Test Account Insurance Charges", "_Test Account Stock Expenses", 0, "Chargeable", None],
["_Test Account Stock Adjustment", "_Test Account Stock Expenses", 0, "Stock Adjustment", None],
["_Test Employee Advance", "Current Liabilities", 0, None, None],
["_Test Account Tax Assets", "Current Assets", 1, None, None],
["_Test Account VAT", "_Test Account Tax Assets", 0, "Tax", None],
["_Test Account Service Tax", "_Test Account Tax Assets", 0, "Tax", None],
["_Test Account Reserves and Surplus", "Current Liabilities", 0, None, None],
["_Test Account Cost for Goods Sold", "Expenses", 0, None, None],
["_Test Account Excise Duty", "_Test Account Tax Assets", 0, "Tax", None],
["_Test Account Education Cess", "_Test Account Tax Assets", 0, "Tax", None],
["_Test Account S&H Education Cess", "_Test Account Tax Assets", 0, "Tax", None],
["_Test Account CST", "Direct Expenses", 0, "Tax", None],
["_Test Account Discount", "Direct Expenses", 0, None, None],
["_Test Write Off", "Indirect Expenses", 0, None, None],
["_Test Exchange Gain/Loss", "Indirect Expenses", 0, None, None],
["_Test Account Sales", "Direct Income", 0, None, None],
# related to Account Inventory Integration
["_Test Account Stock In Hand", "Current Assets", 0, None, None],
# fixed asset depreciation
["_Test Fixed Asset", "Current Assets", 0, "Fixed Asset", None],
["_Test Accumulated Depreciations", "Current Assets", 0, "Accumulated Depreciation", None],
["_Test Depreciations", "Expenses", 0, "Depreciation", None],
["_Test Gain/Loss on Asset Disposal", "Expenses", 0, None, None],
# Receivable / Payable Account
["_Test Receivable", "Current Assets", 0, "Receivable", None],
["_Test Payable", "Current Liabilities", 0, "Payable", None],
["_Test Receivable USD", "Current Assets", 0, "Receivable", "USD"],
["_Test Payable USD", "Current Liabilities", 0, "Payable", "USD"],
]
for company, abbr in [
["_Test Company", "_TC"],
["_Test Company 1", "_TC1"],
["_Test Company with perpetual inventory", "TCP1"],
]:
test_objects = make_test_objects(
"Account",
[
{
"doctype": "Account",
"account_name": account_name,
"parent_account": parent_account + " - " + abbr,
"company": company,
"is_group": is_group,
"account_type": account_type,
"account_currency": currency,
}
for account_name, parent_account, is_group, account_type, currency in accounts
],
)
return test_objects
def get_inventory_account(company, warehouse=None):
account = None
if warehouse:

View File

@@ -1,6 +0,0 @@
[
{
"doctype": "Account",
"name": "_Test Account 1"
}
]

View File

@@ -7,6 +7,8 @@
"engine": "InnoDB",
"field_order": [
"account_category_name",
"root_type",
"column_break_qluu",
"description"
],
"fields": [
@@ -14,6 +16,7 @@
"fieldname": "account_category_name",
"fieldtype": "Data",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Account Category Name",
"reqd": 1,
"unique": 1
@@ -22,12 +25,29 @@
"fieldname": "description",
"fieldtype": "Small Text",
"label": "Description"
},
{
"fieldname": "column_break_qluu",
"fieldtype": "Column Break"
},
{
"fieldname": "root_type",
"fieldtype": "Select",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Root Type",
"options": "\nAsset\nLiability\nIncome\nExpense\nEquity"
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-10-15 03:19:47.171349",
"links": [
{
"link_doctype": "Account",
"link_fieldname": "account_category"
}
],
"modified": "2026-03-05 06:49:34.430723",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account Category",
@@ -64,7 +84,7 @@
}
],
"row_format": "Dynamic",
"search_fields": "account_category_name, description",
"search_fields": "account_category_name, root_type",
"sort_field": "creation",
"sort_order": "DESC",
"states": []

View File

@@ -21,6 +21,7 @@ class AccountCategory(Document):
account_category_name: DF.Data
description: DF.SmallText | None
root_type: DF.Literal["", "Asset", "Liability", "Income", "Expense", "Equity"]
# end: auto-generated types
def after_rename(self, old_name, new_name, merge):

View File

@@ -2,19 +2,3 @@
# See license.txt
# import frappe
from frappe.tests import IntegrationTestCase
# On IntegrationTestCase, the doctype test records and all
# link-field test record dependencies are recursively loaded
# Use these module variables to add/remove to/from that list
EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
class IntegrationTestAccountCategory(IntegrationTestCase):
"""
Integration tests for AccountCategory.
Use this class for testing interactions between multiple components.
"""
pass

View File

@@ -2,8 +2,9 @@
# See license.txt
# import frappe
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestAccountClosingBalance(IntegrationTestCase):
class TestAccountClosingBalance(ERPNextTestSuite):
pass

View File

@@ -43,6 +43,7 @@ class AccountingDimension(Document):
def validate(self):
self.validate_doctype()
validate_column_name(self.fieldname)
self.validate_fieldname_conflict()
self.validate_dimension_defaults()
def validate_doctype(self):
@@ -74,6 +75,27 @@ class AccountingDimension(Document):
message += _("Please create a new Accounting Dimension if required.")
frappe.throw(message)
def validate_fieldname_conflict(self):
conflicting_doctypes = []
for doctype in get_doctypes_with_dimensions():
meta = frappe.get_meta(doctype, cached=False)
if any(f.fieldname == self.fieldname for f in meta.get("fields")):
conflicting_doctypes.append(doctype)
if conflicting_doctypes:
frappe.msgprint(
_(
"Fieldname {0} already exists in the following doctypes: {1}. "
"A separate dimension field will not be added to these doctypes. "
"GL Entries will use the value of the existing field as the dimension value."
).format(
frappe.bold(self.fieldname),
", ".join(frappe.bold(d) for d in conflicting_doctypes),
),
title=_("Fieldname Conflict"),
indicator="orange",
)
def validate_dimension_defaults(self):
companies = []
for default in self.get("dimension_defaults"):
@@ -82,7 +104,7 @@ class AccountingDimension(Document):
else:
frappe.throw(_("Company {0} is added more than once").format(frappe.bold(default.company)))
def after_insert(self):
def on_update(self):
if frappe.in_test:
make_dimension_in_accounting_doctypes(doc=self)
else:
@@ -103,10 +125,6 @@ class AccountingDimension(Document):
if not self.fieldname:
self.fieldname = scrub(self.label)
def on_update(self):
frappe.flags.accounting_dimensions = None
frappe.flags.accounting_dimensions_details = None
def make_dimension_in_accounting_doctypes(doc, doclist=None):
if not doclist:
@@ -241,34 +259,26 @@ def get_doctypes_with_dimensions():
return frappe.get_hooks("accounting_dimension_doctypes")
def get_accounting_dimensions(as_list=True, filters=None):
if not filters:
filters = {"disabled": 0}
if frappe.flags.accounting_dimensions is None:
frappe.flags.accounting_dimensions = frappe.get_all(
"Accounting Dimension",
fields=["label", "fieldname", "disabled", "document_type"],
filters=filters,
)
def get_accounting_dimensions(as_list=True):
accounting_dimensions = frappe.get_all(
"Accounting Dimension",
fields=["label", "fieldname", "disabled", "document_type"],
filters={"disabled": 0},
)
if as_list:
return [d.fieldname for d in frappe.flags.accounting_dimensions]
return [d.fieldname for d in accounting_dimensions]
else:
return frappe.flags.accounting_dimensions
return accounting_dimensions
def get_checks_for_pl_and_bs_accounts():
if frappe.flags.accounting_dimensions_details is None:
# nosemgrep
frappe.flags.accounting_dimensions_details = frappe.db.sql(
"""SELECT p.label, p.disabled, p.fieldname, c.default_dimension, c.company, c.mandatory_for_pl, c.mandatory_for_bs
return frappe.db.sql(
"""SELECT p.label, p.disabled, p.fieldname, c.default_dimension, c.company, c.mandatory_for_pl, c.mandatory_for_bs
FROM `tabAccounting Dimension`p ,`tabAccounting Dimension Detail` c
WHERE p.name = c.parent AND p.disabled = 0""",
as_dict=1,
)
return frappe.flags.accounting_dimensions_details
as_dict=1,
)
def get_dimension_with_children(doctype, dimensions):

View File

@@ -3,18 +3,13 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
EXTRA_TEST_RECORD_DEPENDENCIES = ["Cost Center", "Location", "Warehouse", "Department"]
from erpnext.tests.utils import ERPNextTestSuite
class TestAccountingDimension(IntegrationTestCase):
def setUp(self):
create_dimension()
class TestAccountingDimension(ERPNextTestSuite):
def test_dimension_against_sales_invoice(self):
si = create_sales_invoice(do_not_save=1)
@@ -79,68 +74,3 @@ class TestAccountingDimension(IntegrationTestCase):
si.save()
self.assertRaises(frappe.ValidationError, si.submit)
def tearDown(self):
disable_dimension()
frappe.flags.accounting_dimensions_details = None
frappe.flags.dimension_filter_map = None
def create_dimension():
frappe.set_user("Administrator")
if not frappe.db.exists("Accounting Dimension", {"document_type": "Department"}):
dimension = frappe.get_doc(
{
"doctype": "Accounting Dimension",
"document_type": "Department",
}
)
dimension.append(
"dimension_defaults",
{
"company": "_Test Company",
"reference_document": "Department",
"default_dimension": "_Test Department - _TC",
},
)
dimension.insert()
dimension.save()
else:
dimension = frappe.get_doc("Accounting Dimension", "Department")
dimension.disabled = 0
dimension.save()
if not frappe.db.exists("Accounting Dimension", {"document_type": "Location"}):
dimension1 = frappe.get_doc(
{
"doctype": "Accounting Dimension",
"document_type": "Location",
}
)
dimension1.append(
"dimension_defaults",
{
"company": "_Test Company",
"reference_document": "Location",
"default_dimension": "Block 1",
},
)
dimension1.insert()
dimension1.save()
else:
dimension1 = frappe.get_doc("Accounting Dimension", "Location")
dimension1.disabled = 0
dimension1.save()
def disable_dimension():
dimension1 = frappe.get_doc("Accounting Dimension", "Department")
dimension1.disabled = 1
dimension1.save()
dimension2 = frappe.get_doc("Accounting Dimension", "Location")
dimension2.disabled = 1
dimension2.save()

View File

@@ -69,37 +69,34 @@ class AccountingDimensionFilter(Document):
def get_dimension_filter_map():
if not frappe.flags.get("dimension_filter_map"):
filters = frappe.db.sql(
"""
SELECT
a.applicable_on_account, d.dimension_value, p.accounting_dimension,
p.allow_or_restrict, p.fieldname, a.is_mandatory
FROM
`tabApplicable On Account` a,
`tabAccounting Dimension Filter` p
LEFT JOIN `tabAllowed Dimension` d ON d.parent = p.name
WHERE
p.name = a.parent
AND p.disabled = 0
""",
as_dict=1,
filters = frappe.db.sql(
"""
SELECT
a.applicable_on_account, d.dimension_value, p.accounting_dimension,
p.allow_or_restrict, p.fieldname, a.is_mandatory
FROM
`tabApplicable On Account` a,
`tabAccounting Dimension Filter` p
LEFT JOIN `tabAllowed Dimension` d ON d.parent = p.name
WHERE
p.name = a.parent
AND p.disabled = 0
""",
as_dict=1,
)
dimension_filter_map = {}
for f in filters:
build_map(
dimension_filter_map,
f.fieldname,
f.applicable_on_account,
f.dimension_value,
f.allow_or_restrict,
f.is_mandatory,
)
dimension_filter_map = {}
for f in filters:
build_map(
dimension_filter_map,
f.fieldname,
f.applicable_on_account,
f.dimension_value,
f.allow_or_restrict,
f.is_mandatory,
)
frappe.flags.dimension_filter_map = dimension_filter_map
return frappe.flags.dimension_filter_map
return dimension_filter_map
def build_map(map_object, dimension, account, filter_value, allow_or_restrict, is_mandatory):

View File

@@ -5,19 +5,13 @@ import unittest
import frappe
from erpnext.accounts.doctype.accounting_dimension.test_accounting_dimension import (
create_dimension,
disable_dimension,
)
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.exceptions import InvalidAccountDimensionError, MandatoryAccountDimensionError
EXTRA_TEST_RECORD_DEPENDENCIES = ["Location", "Cost Center", "Department"]
from erpnext.tests.utils import ERPNextTestSuite
class TestAccountingDimensionFilter(unittest.TestCase):
class TestAccountingDimensionFilter(ERPNextTestSuite):
def setUp(self):
create_dimension()
create_accounting_dimension_filter()
self.invoice_list = []
@@ -44,17 +38,6 @@ class TestAccountingDimensionFilter(unittest.TestCase):
self.assertRaises(MandatoryAccountDimensionError, si.submit)
self.invoice_list.append(si)
def tearDown(self):
disable_dimension_filter()
disable_dimension()
frappe.flags.accounting_dimensions_details = None
frappe.flags.dimension_filter_map = None
for si in self.invoice_list:
si.load_from_db()
if si.docstatus == 1:
si.cancel()
def create_accounting_dimension_filter():
if not frappe.db.get_value("Accounting Dimension Filter", {"accounting_dimension": "Cost Center"}):

View File

@@ -20,7 +20,6 @@
{
"fieldname": "period_name",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Period Name",
"reqd": 1,
"unique": 1
@@ -79,7 +78,7 @@
}
],
"links": [],
"modified": "2025-12-01 16:53:44.631299",
"modified": "2026-03-09 17:15:33.577217",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Period",

View File

@@ -97,7 +97,7 @@ def validate_accounting_period_on_doc_save(doc, method=None):
if doc.doctype == "Bank Clearance":
return
elif doc.doctype == "Asset":
if doc.is_existing_asset:
if doc.asset_type == "Existing Asset":
return
else:
date = doc.available_for_use_date

View File

@@ -3,7 +3,6 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import add_months, nowdate
from erpnext.accounts.doctype.accounting_period.accounting_period import (
@@ -11,11 +10,10 @@ from erpnext.accounts.doctype.accounting_period.accounting_period import (
OverlapError,
)
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
EXTRA_TEST_RECORD_DEPENDENCIES = ["Item"]
from erpnext.tests.utils import ERPNextTestSuite
class TestAccountingPeriod(IntegrationTestCase):
class TestAccountingPeriod(ERPNextTestSuite):
def test_overlap(self):
ap1 = create_accounting_period(
start_date="2018-04-01", end_date="2018-06-30", company="Wind Power LLC"
@@ -90,10 +88,6 @@ class TestAccountingPeriod(IntegrationTestCase):
doc.submit() # Should not raise
self.assertEqual(doc.docstatus, 1)
def tearDown(self):
for d in frappe.get_all("Accounting Period"):
frappe.delete_doc("Accounting Period", d.name)
def create_accounting_period(**args):
args = frappe._dict(args)

View File

@@ -2,7 +2,18 @@
// For license information, please see license.txt
frappe.ui.form.on("Accounts Settings", {
refresh: function (frm) {},
refresh: function (frm) {
frm.set_query("document_type", "repost_allowed_types", function (doc, cdt, cdn) {
return {
filters: {
name: ["in", frappe.boot.sysdefaults.repost_allowed_doctypes],
},
};
});
if (!frm.naming_controller) frm.naming_controller = new erpnext.NamingSeriesController(frm);
frm.naming_controller.render_table("transaction_naming_html", get_transactions(frm));
},
enable_immutable_ledger: function (frm) {
if (!frm.doc.enable_immutable_ledger) {
return;
@@ -30,16 +41,6 @@ frappe.ui.form.on("Accounts Settings", {
add_taxes_from_item_tax_template(frm) {
toggle_tax_settings(frm, "add_taxes_from_item_tax_template");
},
drop_ar_procedures: function (frm) {
frm.call({
doc: frm.doc,
method: "drop_ar_sql_procedures",
callback: function (r) {
frappe.show_alert(__("Procedures dropped"), 5);
},
});
},
});
function toggle_tax_settings(frm, field_name) {
@@ -51,3 +52,16 @@ function toggle_tax_settings(frm, field_name) {
frm.set_value(other_field, 0);
}
}
function get_transactions(frm) {
const transactions = [
{ label: __("Journal Entry"), doctype: "Journal Entry" },
{ label: __("Payment Entry"), doctype: "Payment Entry" },
{ label: __("Purchase Invoice"), doctype: "Purchase Invoice" },
{ label: __("Purchase Order"), doctype: "Purchase Order" },
{ label: __("Purchase Receipt"), doctype: "Purchase Receipt" },
{ label: __("Sales Invoice"), doctype: "Sales Invoice" },
];
return transactions;
}

View File

@@ -16,14 +16,15 @@
"invoicing_features_section",
"check_supplier_invoice_uniqueness",
"automatically_fetch_payment_terms",
"enable_subscription",
"column_break_17",
"enable_common_party_accounting",
"allow_multi_currency_invoices_against_single_party_account",
"confirm_before_resetting_posting_date",
"analytics_section",
"enable_discounts_and_margin",
"enable_accounting_dimensions",
"column_break_vtnr",
"enable_discounts_and_margin",
"journals_section",
"merge_similar_account_heads",
"deferred_accounting_settings_section",
@@ -42,7 +43,6 @@
"print_settings",
"show_inclusive_tax_in_print",
"show_taxes_as_table_in_print",
"column_break_12",
"show_payment_schedule_in_print",
"item_price_settings_section",
"maintain_same_internal_transaction_rate",
@@ -58,26 +58,30 @@
"payments_tab",
"section_break_jpd0",
"auto_reconcile_payments",
"exchange_gain_loss_posting_date",
"auto_reconciliation_job_trigger",
"reconciliation_queue_size",
"column_break_resa",
"exchange_gain_loss_posting_date",
"repost_section",
"column_break_mfor",
"repost_allowed_types",
"payment_options_section",
"fetch_payment_schedule_in_payment_request",
"enable_loyalty_point_program",
"column_break_ctam",
"invoicing_settings_tab",
"accounts_transactions_settings_section",
"over_billing_allowance",
"column_break_11",
"role_allowed_to_over_bill",
"credit_controller",
"make_payment_via_journal_entry",
"over_billing_allowance",
"credit_controller",
"role_allowed_to_over_bill",
"column_break_11",
"assets_tab",
"asset_settings_section",
"calculate_depr_using_total_days",
"column_break_gjcc",
"book_asset_depreciation_entry_automatically",
"calculate_depr_using_total_days",
"role_to_notify_on_depreciation_failure",
"column_break_gjcc",
"closing_settings_tab",
"period_closing_settings_section",
"ignore_account_closing_balance",
@@ -86,13 +90,12 @@
"reports_tab",
"remarks_section",
"general_ledger_remarks_length",
"column_break_lvjk",
"receivable_payable_remarks_length",
"column_break_lvjk",
"accounts_receivable_payable_tuning_section",
"receivable_payable_fetch_method",
"default_ageing_range",
"column_break_ntmi",
"drop_ar_procedures",
"legacy_section",
"ignore_is_opening_check_for_reporting",
"tab_break_dpet",
@@ -100,11 +103,14 @@
"show_balance_in_coa",
"banking_section",
"enable_party_matching",
"automatically_run_rules_on_unreconciled_transactions",
"enable_fuzzy_matching",
"payment_request_section",
"create_pr_in_draft_status",
"budget_section",
"use_legacy_budget_controller"
"use_legacy_budget_controller",
"document_naming_tab",
"transaction_naming_html"
],
"fields": [
{
@@ -112,14 +118,14 @@
"description": "Address used to determine Tax Category in transactions",
"fieldname": "determine_address_tax_category_from",
"fieldtype": "Select",
"label": "Determine Address Tax Category From",
"label": "Determine Address Tax Category from",
"options": "Billing Address\nShipping Address"
},
{
"fieldname": "credit_controller",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Role allowed to bypass Credit Limit",
"label": "Role allowed to bypass credit limit",
"options": "Role"
},
{
@@ -127,7 +133,7 @@
"description": "Enabling this ensures each Purchase Invoice has a unique value in Supplier Invoice No. field within a particular fiscal year",
"fieldname": "check_supplier_invoice_uniqueness",
"fieldtype": "Check",
"label": "Check Supplier Invoice Number Uniqueness"
"label": "Check Supplier invoice number uniqueness"
},
{
"default": "0",
@@ -138,27 +144,29 @@
},
{
"default": "1",
"documentation_url": "https://docs.frappe.io/erpnext/accounts-settings#4-unlink-payment-on-cancellation-of-invoice",
"fieldname": "unlink_payment_on_cancellation_of_invoice",
"fieldtype": "Check",
"label": "Unlink Payment on Cancellation of Invoice"
"label": "Unlink Payment on cancellation of invoice"
},
{
"default": "1",
"documentation_url": "https://docs.frappe.io/erpnext/accounts-settings#8-unlink-advance-payment-on-cancellation-of-order",
"fieldname": "unlink_advance_payment_on_cancelation_of_order",
"fieldtype": "Check",
"label": "Unlink Advance Payment on Cancellation of Order"
"label": "Unlink Advance Payment on cancellation of order"
},
{
"default": "1",
"fieldname": "book_asset_depreciation_entry_automatically",
"fieldtype": "Check",
"label": "Book Asset Depreciation Entry Automatically"
"label": "Book Asset Depreciation entry automatically"
},
{
"default": "1",
"fieldname": "add_taxes_from_item_tax_template",
"fieldtype": "Check",
"label": "Automatically Add Taxes and Charges from Item Tax Template"
"label": "Automatically add Taxes and Charges from Item Tax Template"
},
{
"fieldname": "print_settings",
@@ -169,17 +177,13 @@
"default": "0",
"fieldname": "show_inclusive_tax_in_print",
"fieldtype": "Check",
"label": "Show Inclusive Tax in Print"
},
{
"fieldname": "column_break_12",
"fieldtype": "Column Break"
"label": "Show inclusive tax in print"
},
{
"default": "0",
"fieldname": "show_payment_schedule_in_print",
"fieldtype": "Check",
"label": "Show Payment Schedule in Print"
"label": "Show Payment Schedule in print"
},
{
"fieldname": "currency_exchange_section",
@@ -205,7 +209,7 @@
"description": "Payment Terms from orders will be fetched into the invoices as is",
"fieldname": "automatically_fetch_payment_terms",
"fieldtype": "Check",
"label": "Automatically Fetch Payment Terms from Order"
"label": "Automatically fetch Payment Terms from Order/Quotation"
},
{
"description": "The percentage you are allowed to bill more against the amount ordered. For example, if the order value is $100 for an item and tolerance is set as 10%, then you are allowed to bill up to $110 ",
@@ -217,7 +221,7 @@
"default": "1",
"fieldname": "automatically_process_deferred_accounting_entry",
"fieldtype": "Check",
"label": "Automatically Process Deferred Accounting Entry"
"label": "Automatically process deferred Accounting entry"
},
{
"fieldname": "deferred_accounting_settings_section",
@@ -233,7 +237,7 @@
"description": "If this is unchecked, direct GL entries will be created to book deferred revenue or expense",
"fieldname": "book_deferred_entries_via_journal_entry",
"fieldtype": "Check",
"label": "Book Deferred Entries Via Journal Entry"
"label": "Book deferred entries via Journal Entry"
},
{
"default": "0",
@@ -241,38 +245,37 @@
"description": "If this is unchecked Journal Entries will be saved in a Draft state and will have to be submitted manually",
"fieldname": "submit_journal_entries",
"fieldtype": "Check",
"label": "Submit Journal Entries"
"label": "Submit Journal entries"
},
{
"default": "Days",
"description": "If \"Months\" is selected, a fixed amount will be booked as deferred revenue or expense for each month irrespective of the number of days in a month. It will be prorated if deferred revenue or expense is not booked for an entire month",
"fieldname": "book_deferred_entries_based_on",
"fieldtype": "Select",
"label": "Book Deferred Entries Based On",
"label": "Book Deferred entries based on",
"options": "Days\nMonths"
},
{
"default": "0",
"fieldname": "delete_linked_ledger_entries",
"fieldtype": "Check",
"label": "Delete Accounting and Stock Ledger Entries on deletion of Transaction"
"label": "Delete Accounting and Stock Ledger entries on deletion of transaction"
},
{
"depends_on": "eval: doc.over_billing_allowance > 0",
"description": "Users with this role are allowed to over bill above the allowance percentage",
"fieldname": "role_allowed_to_over_bill",
"fieldtype": "Link",
"label": "Role Allowed to Over Bill ",
"label": "Role Allowed to over bill ",
"options": "Role"
},
{
"fieldname": "period_closing_settings_section",
"fieldtype": "Section Break",
"label": "Period Closing Settings"
"fieldtype": "Section Break"
},
{
"fieldname": "accounts_transactions_settings_section",
"fieldtype": "Section Break",
"label": "Credit Limit Settings"
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_11",
@@ -357,14 +360,14 @@
"default": "1",
"fieldname": "show_balance_in_coa",
"fieldtype": "Check",
"label": "Show Balances in Chart Of Accounts"
"label": "Show balances in Chart of Accounts"
},
{
"default": "0",
"description": "Split Early Payment Discount Loss into Income and Tax Loss",
"fieldname": "book_tax_discount_loss",
"fieldtype": "Check",
"label": "Book Tax Loss on Early Payment Discount"
"label": "Book tax loss on early payment discount"
},
{
"fieldname": "journals_section",
@@ -376,7 +379,7 @@
"description": "Rows with Same Account heads will be merged on Ledger",
"fieldname": "merge_similar_account_heads",
"fieldtype": "Check",
"label": "Merge Similar Account Heads"
"label": "Merge similar Account Heads"
},
{
"fieldname": "section_break_jpd0",
@@ -387,13 +390,13 @@
"default": "0",
"fieldname": "auto_reconcile_payments",
"fieldtype": "Check",
"label": "Auto Reconcile Payments"
"label": "Auto reconcile Payments"
},
{
"default": "0",
"fieldname": "show_taxes_as_table_in_print",
"fieldtype": "Check",
"label": "Show Taxes as Table in Print"
"label": "Show taxes as table in print"
},
{
"default": "0",
@@ -415,14 +418,14 @@
"description": "Financial reports will be generated using GL Entry doctypes (should be enabled if Period Closing Voucher is not posted for all years sequentially or missing) ",
"fieldname": "ignore_account_closing_balance",
"fieldtype": "Check",
"label": "Ignore Account Closing Balance"
"label": "Ignore Account closing balance"
},
{
"default": "0",
"description": "Tax Amount will be rounded on a row(items) level",
"fieldname": "round_row_wise_tax",
"fieldtype": "Check",
"label": "Round Tax Amount Row-wise"
"label": "Round tax amount row-wise"
},
{
"fieldname": "reports_tab",
@@ -434,14 +437,14 @@
"description": "Truncates 'Remarks' column to set character length",
"fieldname": "general_ledger_remarks_length",
"fieldtype": "Int",
"label": "General Ledger"
"label": "General Ledger remarks length"
},
{
"default": "0",
"description": "Truncates 'Remarks' column to set character length",
"fieldname": "receivable_payable_remarks_length",
"fieldtype": "Int",
"label": "Accounts Receivable/Payable"
"label": "Accounts Receivable / Payable remarks length"
},
{
"fieldname": "column_break_lvjk",
@@ -475,7 +478,7 @@
"description": "Payment Requests made from Sales / Purchase Invoice will be put in Draft explicitly",
"fieldname": "create_pr_in_draft_status",
"fieldtype": "Check",
"label": "Create in Draft Status"
"label": "Create payment requests in Draft status"
},
{
"fieldname": "column_break_yuug",
@@ -490,14 +493,14 @@
"description": "Interval should be between 1 to 59 MInutes",
"fieldname": "auto_reconciliation_job_trigger",
"fieldtype": "Int",
"label": "Auto Reconciliation Job Trigger"
"label": "Auto Reconciliation job trigger"
},
{
"default": "5",
"description": "Documents Processed on each trigger. Queue Size should be between 5 and 100",
"fieldname": "reconciliation_queue_size",
"fieldtype": "Int",
"label": "Reconciliation Queue Size"
"label": "Reconciliation queue size"
},
{
"default": "0",
@@ -511,15 +514,15 @@
"description": "Only applies for Normal Payments",
"fieldname": "exchange_gain_loss_posting_date",
"fieldtype": "Select",
"label": "Posting Date Inheritance for Exchange Gain / Loss",
"label": "Posting Date inheritance for exchange gain / loss",
"options": "Invoice\nPayment\nReconciliation Date"
},
{
"default": "Buffered Cursor",
"fieldname": "receivable_payable_fetch_method",
"fieldtype": "Select",
"label": "Data Fetch Method",
"options": "Buffered Cursor\nUnBuffered Cursor\nRaw SQL"
"label": "Data fetch method",
"options": "Buffered Cursor\nUnBuffered Cursor"
},
{
"fieldname": "accounts_receivable_payable_tuning_section",
@@ -535,14 +538,14 @@
"default": "0",
"fieldname": "maintain_same_internal_transaction_rate",
"fieldtype": "Check",
"label": "Maintain Same Rate Throughout Internal Transaction"
"label": "Maintain same rate throughout internal Transaction"
},
{
"default": "Stop",
"depends_on": "maintain_same_internal_transaction_rate",
"fieldname": "maintain_same_rate_action",
"fieldtype": "Select",
"label": "Action if Same Rate is Not Maintained Throughout Internal Transaction",
"label": "Action if same rate is not maintained throughout internal transaction",
"mandatory_depends_on": "maintain_same_internal_transaction_rate",
"options": "Stop\nWarn"
},
@@ -550,7 +553,7 @@
"depends_on": "eval: doc.maintain_same_internal_transaction_rate && doc.maintain_same_rate_action == 'Stop'",
"fieldname": "role_to_override_stop_action",
"fieldtype": "Link",
"label": "Role Allowed to Override Stop Action",
"label": "Role allowed to override stop action",
"options": "Role"
},
{
@@ -582,36 +585,30 @@
"description": "If no taxes are set, and Taxes and Charges Template is selected, the system will automatically apply the taxes from the chosen template.",
"fieldname": "add_taxes_from_taxes_and_charges_template",
"fieldtype": "Check",
"label": "Automatically Add Taxes from Taxes and Charges Template"
"label": "Automatically add taxes from Taxes and Charges Template"
},
{
"fieldname": "column_break_ntmi",
"fieldtype": "Column Break"
},
{
"depends_on": "eval:doc.receivable_payable_fetch_method == \"Raw SQL\"",
"description": "Drops existing SQL Procedures and Function setup by Accounts Receivable report",
"fieldname": "drop_ar_procedures",
"fieldtype": "Button",
"label": "Drop Procedures"
},
{
"default": "0",
"fieldname": "fetch_valuation_rate_for_internal_transaction",
"fieldtype": "Check",
"label": "Fetch Valuation Rate for Internal Transaction"
"label": "Fetch valuation rate for internal Transaction"
},
{
"default": "0",
"description": "Enable this if you are experiencing issues with the new budget controller. Uses the older budget validation logic",
"fieldname": "use_legacy_budget_controller",
"fieldtype": "Check",
"label": "Use Legacy Budget Controller"
"label": "Use legacy Budget Controller"
},
{
"default": "1",
"fieldname": "use_legacy_controller_for_pcv",
"fieldtype": "Check",
"label": "Use Legacy Controller For Period Closing Voucher"
"label": "Use legacy controller for Period Closing Voucher"
},
{
"description": "Users with this role will be notified if the asset depreciation gets failed",
@@ -629,7 +626,7 @@
{
"fieldname": "chart_of_accounts_section",
"fieldtype": "Section Break",
"label": "Chart Of Accounts"
"label": "Chart of Accounts"
},
{
"fieldname": "banking_section",
@@ -674,6 +671,7 @@
},
{
"default": "0",
"documentation_url": "https://docs.frappe.io/erpnext/loyalty-program",
"fieldname": "enable_loyalty_point_program",
"fieldtype": "Check",
"label": "Enable Loyalty Point Program"
@@ -688,6 +686,44 @@
"fieldname": "enable_accounting_dimensions",
"fieldtype": "Check",
"label": "Enable Accounting Dimensions"
},
{
"default": "1",
"description": "Enable Subscription tracking in invoice",
"fieldname": "enable_subscription",
"fieldtype": "Check",
"label": "Enable Subscription"
},
{
"default": "1",
"fieldname": "fetch_payment_schedule_in_payment_request",
"fieldtype": "Check",
"label": "Fetch Payment Schedule in Payment Request"
},
{
"fieldname": "repost_section",
"fieldtype": "Section Break",
"label": "Repost"
},
{
"fieldname": "repost_allowed_types",
"fieldtype": "Table",
"label": "Allowed DocTypes",
"options": "Repost Allowed Types"
},
{
"fieldname": "document_naming_tab",
"fieldtype": "Tab Break",
"label": "Document Naming"
},
{
"fieldname": "transaction_naming_html",
"fieldtype": "HTML"
},
{
"description": "Changing the account in any transaction of the DocTypes listed below will trigger a repost. To prevent reposting, remove the relevant DocType from the list.",
"fieldname": "column_break_mfor",
"fieldtype": "Column Break"
}
],
"grid_page_length": 50,
@@ -697,7 +733,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2026-02-04 17:15:38.609327",
"modified": "2026-06-03 13:11:54.721495",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",

View File

@@ -10,6 +10,9 @@ from frappe.custom.doctype.property_setter.property_setter import make_property_
from frappe.model.document import Document
from frappe.utils import cint
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_accounting_dimensions,
)
from erpnext.accounts.utils import sync_auto_reconcile_config
SELLING_DOCTYPES = [
@@ -44,6 +47,8 @@ class AccountsSettings(Document):
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.repost_allowed_types.repost_allowed_types import RepostAllowedTypes
add_taxes_from_item_tax_template: DF.Check
add_taxes_from_taxes_and_charges_template: DF.Check
allow_multi_currency_invoices_against_single_party_account: DF.Check
@@ -72,7 +77,9 @@ class AccountsSettings(Document):
enable_immutable_ledger: DF.Check
enable_loyalty_point_program: DF.Check
enable_party_matching: DF.Check
enable_subscription: DF.Check
exchange_gain_loss_posting_date: DF.Literal["Invoice", "Payment", "Reconciliation Date"]
fetch_payment_schedule_in_payment_request: DF.Check
fetch_valuation_rate_for_internal_transaction: DF.Check
general_ledger_remarks_length: DF.Int
ignore_account_closing_balance: DF.Check
@@ -82,9 +89,10 @@ class AccountsSettings(Document):
make_payment_via_journal_entry: DF.Check
merge_similar_account_heads: DF.Check
over_billing_allowance: DF.Currency
receivable_payable_fetch_method: DF.Literal["Buffered Cursor", "UnBuffered Cursor", "Raw SQL"]
receivable_payable_fetch_method: DF.Literal["Buffered Cursor", "UnBuffered Cursor"]
receivable_payable_remarks_length: DF.Int
reconciliation_queue_size: DF.Int
repost_allowed_types: DF.Table[RepostAllowedTypes]
role_allowed_to_over_bill: DF.Link | None
role_to_notify_on_depreciation_failure: DF.Link | None
role_to_override_stop_action: DF.Link | None
@@ -135,10 +143,15 @@ class AccountsSettings(Document):
toggle_loyalty_point_program_section(not self.enable_loyalty_point_program)
clear_cache = True
if old_doc.enable_subscription != self.enable_subscription:
toggle_subscription_sections(not self.enable_subscription)
clear_cache = True
if clear_cache:
frappe.clear_cache()
self.validate_and_sync_auto_reconcile_config()
self.update_property_for_accounting_dimension()
def validate_stale_days(self):
if not self.allow_stale and cint(self.stale_days) <= 0:
@@ -185,12 +198,16 @@ class AccountsSettings(Document):
title=_("Auto Tax Settings Error"),
)
@frappe.whitelist()
def drop_ar_sql_procedures(self):
from erpnext.accounts.report.accounts_receivable.accounts_receivable import InitSQLProceduresForAR
def update_property_for_accounting_dimension(self):
doctypes = [entry.document_type for entry in self.repost_allowed_types]
if not doctypes:
return
frappe.db.sql(f"drop procedure if exists {InitSQLProceduresForAR.init_procedure_name}")
frappe.db.sql(f"drop procedure if exists {InitSQLProceduresForAR.allocate_procedure_name}")
from erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger import get_child_docs
doctypes += get_child_docs(doctypes)
set_allow_on_submit_for_dimension_fields(doctypes)
def toggle_accounting_dimension_sections(hide):
@@ -215,6 +232,12 @@ def toggle_loyalty_point_program_section(hide):
create_property_setter_for_hiding_field(doctype, "loyalty_points_redemption", hide)
def toggle_subscription_sections(hide):
subscription_doctypes = frappe.get_hooks("subscription_doctypes")
for doctype in subscription_doctypes:
create_property_setter_for_hiding_field(doctype, "subscription_section", hide)
def create_property_setter_for_hiding_field(doctype, field_name, hide):
make_property_setter(
doctype,
@@ -224,3 +247,12 @@ def create_property_setter_for_hiding_field(doctype, field_name, hide):
"Check",
validate_fields_for_doctype=False,
)
def set_allow_on_submit_for_dimension_fields(doctypes):
for dt in doctypes:
meta = frappe.get_meta(dt)
for dimension in get_accounting_dimensions():
df = meta.get_field(dimension)
if df and not df.allow_on_submit:
frappe.db.set_value("Custom Field", dt + "-" + dimension, "allow_on_submit", 1)

View File

@@ -1,17 +1,11 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestAccountsSettings(IntegrationTestCase):
def tearDown(self):
# Just in case `save` method succeeds, we need to take things back to default so that other tests
# don't break
cur_settings = frappe.get_doc("Accounts Settings", "Accounts Settings")
cur_settings.allow_stale = 1
cur_settings.save()
class TestAccountsSettings(ERPNextTestSuite):
def test_stale_days(self):
cur_settings = frappe.get_doc("Accounts Settings", "Accounts Settings")
cur_settings.allow_stale = 0

View File

@@ -2,7 +2,6 @@
# See license.txt
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import nowdate, today
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
@@ -10,14 +9,13 @@ from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
# On IntegrationTestCase, the doctype test records and all
# On ERPNextTestSuite, the doctype test records and all
# link-field test record depdendencies are recursively loaded
# Use these module variables to add/remove to/from that list
EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
from erpnext.tests.utils import ERPNextTestSuite
class TestAdvancePaymentLedgerEntry(AccountsTestMixin, IntegrationTestCase):
class TestAdvancePaymentLedgerEntry(ERPNextTestSuite, AccountsTestMixin):
"""
Integration tests for AdvancePaymentLedgerEntry.
Use this class for testing interactions between multiple components.
@@ -30,9 +28,6 @@ class TestAdvancePaymentLedgerEntry(AccountsTestMixin, IntegrationTestCase):
self.create_item()
self.clear_old_entries()
def tearDown(self):
frappe.db.rollback()
def create_sales_order(self, qty=1, rate=100, currency="INR", do_not_submit=False):
"""
Helper method

View File

@@ -2,8 +2,8 @@
# See license.txt
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestBank(IntegrationTestCase):
class TestBank(ERPNextTestSuite):
pass

View File

@@ -116,6 +116,7 @@ def get_default_company_bank_account(company, party_type, party):
@frappe.whitelist()
def get_bank_account_details(bank_account):
frappe.has_permission("Bank Account", doc=bank_account, ptype="read", throw=True)
return frappe.get_cached_value(
"Bank Account", bank_account, ["account", "bank", "bank_account_no"], as_dict=1
)

View File

@@ -2,10 +2,8 @@
# See license.txt
import unittest
import frappe
from frappe import ValidationError
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestBankAccount(IntegrationTestCase):
class TestBankAccount(ERPNextTestSuite):
pass

View File

@@ -2,8 +2,8 @@
# See license.txt
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestBankAccountSubtype(IntegrationTestCase):
class TestBankAccountSubtype(ERPNextTestSuite):
pass

View File

@@ -3,8 +3,8 @@
# import frappe
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestBankAccountType(IntegrationTestCase):
class TestBankAccountType(ERPNextTestSuite):
pass

View File

@@ -5,8 +5,10 @@
import frappe
from frappe import _, msgprint
from frappe.model.document import Document
from frappe.query_builder import Case
from frappe.query_builder.custom import ConstantColumn
from frappe.utils import cint, flt, fmt_money, get_link_to_form, getdate
from frappe.query_builder.functions import Coalesce, Sum
from frappe.utils import cint, flt, fmt_money, getdate
from pypika import Order
import erpnext
@@ -182,65 +184,162 @@ def get_payment_entries_for_bank_clearance(
):
entries = []
condition = ""
pe_condition = ""
journal_entry = frappe.qb.DocType("Journal Entry")
journal_entry_account = frappe.qb.DocType("Journal Entry Account")
journal_entry_query = (
frappe.qb.from_(journal_entry_account)
.inner_join(journal_entry)
.on(journal_entry_account.parent == journal_entry.name)
.select(
ConstantColumn("Journal Entry").as_("payment_document"),
journal_entry.name.as_("payment_entry"),
journal_entry.cheque_no.as_("cheque_number"),
journal_entry.cheque_date,
Sum(journal_entry_account.debit_in_account_currency).as_("debit"),
Sum(journal_entry_account.credit_in_account_currency).as_("credit"),
journal_entry.posting_date,
journal_entry_account.against_account,
journal_entry.clearance_date,
journal_entry_account.account_currency,
)
.where(
(journal_entry_account.account == account)
& (journal_entry.docstatus == 1)
& (journal_entry.posting_date >= from_date)
& (journal_entry.posting_date <= to_date)
& (journal_entry.is_opening == "No")
)
)
if not include_reconciled_entries:
condition = "and (clearance_date IS NULL or clearance_date='0000-00-00')"
pe_condition = "and (pe.clearance_date IS NULL or pe.clearance_date='0000-00-00')"
journal_entry_query = journal_entry_query.where(
(journal_entry.clearance_date.isnull()) | (journal_entry.clearance_date == "0000-00-00")
)
journal_entries = frappe.db.sql(
f"""
select
"Journal Entry" as payment_document, t1.name as payment_entry,
t1.cheque_no as cheque_number, t1.cheque_date,
sum(t2.debit_in_account_currency) as debit, sum(t2.credit_in_account_currency) as credit,
t1.posting_date, t2.against_account, t1.clearance_date, t2.account_currency
from
`tabJournal Entry` t1, `tabJournal Entry Account` t2
where
t2.parent = t1.name and t2.account = %(account)s and t1.docstatus=1
and t1.posting_date >= %(from)s and t1.posting_date <= %(to)s
and ifnull(t1.is_opening, 'No') = 'No' {condition}
group by t2.account, t1.name
order by t1.posting_date ASC, t1.name DESC
""",
{"account": account, "from": from_date, "to": to_date},
as_dict=1,
journal_entries = (
journal_entry_query.groupby(journal_entry_account.account, journal_entry.name)
.orderby(journal_entry.posting_date)
.orderby(journal_entry.name, order=Order.desc)
).run(as_dict=True)
pe = frappe.qb.DocType("Payment Entry")
company = frappe.qb.DocType("Company")
payment_entry_query = (
frappe.qb.from_(pe)
.join(company)
.on(pe.company == company.name)
.select(
ConstantColumn("Payment Entry").as_("payment_document"),
pe.name.as_("payment_entry"),
pe.reference_no.as_("cheque_number"),
pe.reference_date.as_("cheque_date"),
(
Case()
.when(
pe.paid_from == account,
(
pe.paid_amount
+ (
Case()
.when(
(pe.payment_type == "Pay")
& (company.default_currency == pe.paid_from_account_currency),
pe.base_total_taxes_and_charges,
)
.else_(pe.total_taxes_and_charges)
)
),
)
.else_(0)
).as_("credit"),
(
Case()
.when(pe.paid_from == account, 0)
.else_(
pe.received_amount
+ (
Case()
.when(
company.default_currency == pe.paid_to_account_currency,
pe.base_total_taxes_and_charges,
)
.else_(pe.total_taxes_and_charges)
)
)
).as_("debit"),
pe.posting_date,
Coalesce(pe.party, Case().when(pe.paid_from == account, pe.paid_to).else_(pe.paid_from)).as_(
"against_account"
),
pe.clearance_date,
(
Case()
.when(pe.paid_to == account, pe.paid_to_account_currency)
.else_(pe.paid_from_account_currency)
).as_("account_currency"),
)
.where(
((pe.paid_from == account) | (pe.paid_to == account))
& (pe.docstatus == 1)
& (pe.posting_date >= from_date)
& (pe.posting_date <= to_date)
)
)
payment_entries = frappe.db.sql(
f"""
select
"Payment Entry" as payment_document, pe.name as payment_entry,
pe.reference_no as cheque_number, pe.reference_date as cheque_date,
if(pe.paid_from=%(account)s, pe.paid_amount + if(pe.payment_type = 'Pay' and c.default_currency = pe.paid_from_account_currency, pe.base_total_taxes_and_charges, pe.total_taxes_and_charges) , 0) as credit,
if(pe.paid_from=%(account)s, 0, pe.received_amount + pe.total_taxes_and_charges) as debit,
pe.posting_date, ifnull(pe.party,if(pe.paid_from=%(account)s,pe.paid_to,pe.paid_from)) as against_account, pe.clearance_date,
if(pe.paid_to=%(account)s, pe.paid_to_account_currency, pe.paid_from_account_currency) as account_currency
from `tabPayment Entry` as pe
join `tabCompany` c on c.name = pe.company
where
(pe.paid_from=%(account)s or pe.paid_to=%(account)s) and pe.docstatus=1
and pe.posting_date >= %(from)s and pe.posting_date <= %(to)s
{pe_condition}
order by
pe.posting_date ASC, pe.name DESC
""",
{
"account": account,
"from": from_date,
"to": to_date,
},
as_dict=1,
if not include_reconciled_entries:
payment_entry_query = payment_entry_query.where(
(pe.clearance_date.isnull()) | (pe.clearance_date == "0000-00-00")
)
payment_entries = (payment_entry_query.orderby(pe.posting_date).orderby(pe.name, order=Order.desc)).run(
as_dict=True
)
pos_sales_invoices, pos_purchase_invoices = [], []
acc = frappe.qb.DocType("Account")
pi = frappe.qb.DocType("Purchase Invoice")
paid_purchase_invoices_query = (
frappe.qb.from_(pi)
.inner_join(acc)
.on(pi.cash_bank_account == acc.name)
.select(
ConstantColumn("Purchase Invoice").as_("payment_document"),
pi.name.as_("payment_entry"),
pi.paid_amount.as_("credit"),
pi.posting_date,
pi.supplier.as_("against_account"),
pi.bill_no.as_("cheque_number"),
pi.clearance_date,
acc.account_currency,
ConstantColumn(0).as_("debit"),
)
.where(
(pi.docstatus == 1)
& (pi.is_paid == 1)
& (pi.cash_bank_account == account)
& (pi.posting_date >= from_date)
& (pi.posting_date <= to_date)
)
)
if not include_reconciled_entries:
paid_purchase_invoices_query = paid_purchase_invoices_query.where(
(pi.clearance_date.isnull()) | (pi.clearance_date == "0000-00-00")
)
paid_purchase_invoices = (
paid_purchase_invoices_query.orderby(pi.posting_date).orderby(pi.name, order=Order.desc)
).run(as_dict=True)
pos_sales_invoices = []
if include_pos_transactions:
si_payment = frappe.qb.DocType("Sales Invoice Payment")
si = frappe.qb.DocType("Sales Invoice")
acc = frappe.qb.DocType("Account")
pos_sales_invoices = (
pos_sales_invoices_query = (
frappe.qb.from_(si_payment)
.inner_join(si)
.on(si_payment.parent == si.name)
@@ -263,38 +362,22 @@ def get_payment_entries_for_bank_clearance(
& (si.posting_date >= from_date)
& (si.posting_date <= to_date)
)
.orderby(si.posting_date)
.orderby(si.name, order=Order.desc)
).run(as_dict=True)
)
pi = frappe.qb.DocType("Purchase Invoice")
if not include_reconciled_entries:
pos_sales_invoices_query = pos_sales_invoices_query.where(
(si_payment.clearance_date.isnull()) | (si_payment.clearance_date == "0000-00-00")
)
pos_purchase_invoices = (
frappe.qb.from_(pi)
.inner_join(acc)
.on(pi.cash_bank_account == acc.name)
.select(
ConstantColumn("Purchase Invoice").as_("payment_document"),
pi.name.as_("payment_entry"),
pi.paid_amount.as_("credit"),
pi.posting_date,
pi.supplier.as_("against_account"),
pi.clearance_date,
acc.account_currency,
ConstantColumn(0).as_("debit"),
)
.where(
(pi.docstatus == 1)
& (pi.cash_bank_account == account)
& (pi.posting_date >= from_date)
& (pi.posting_date <= to_date)
)
.orderby(pi.posting_date)
.orderby(pi.name, order=Order.desc)
pos_sales_invoices = (
pos_sales_invoices_query.orderby(si.posting_date).orderby(si.name, order=Order.desc)
).run(as_dict=True)
entries = (
list(payment_entries) + list(journal_entries) + list(pos_sales_invoices) + list(pos_purchase_invoices)
list(payment_entries)
+ list(journal_entries)
+ list(pos_sales_invoices)
+ list(paid_purchase_invoices)
)
return entries

View File

@@ -3,7 +3,6 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import add_months, getdate
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
@@ -15,13 +14,12 @@ from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.stock.doctype.item.test_item import create_item
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
from erpnext.tests.utils import if_lending_app_installed, if_lending_app_not_installed
from erpnext.tests.utils import ERPNextTestSuite, if_lending_app_installed, if_lending_app_not_installed
class TestBankClearance(IntegrationTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
class TestBankClearance(ERPNextTestSuite):
def setUp(self):
frappe.clear_cache()
create_warehouse(
warehouse_name="_Test Warehouse",
properties={"parent_warehouse": "All Warehouses - _TC"},

View File

@@ -2,8 +2,8 @@
# See license.txt
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestBankGuarantee(IntegrationTestCase):
class TestBankGuarantee(ERPNextTestSuite):
pass

View File

@@ -4,7 +4,6 @@
import frappe
from frappe import qb
from frappe.tests import IntegrationTestCase
from frappe.utils import add_days, today
from erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool import (
@@ -13,9 +12,10 @@ from erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool
)
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
from erpnext.tests.utils import ERPNextTestSuite
class TestBankReconciliationTool(AccountsTestMixin, IntegrationTestCase):
class TestBankReconciliationTool(ERPNextTestSuite, AccountsTestMixin):
def setUp(self):
self.create_company()
self.create_customer()
@@ -24,9 +24,6 @@ class TestBankReconciliationTool(AccountsTestMixin, IntegrationTestCase):
qb.from_(bank_dt).delete().where(bank_dt.name == "HDFC").run()
self.create_bank_account()
def tearDown(self):
frappe.db.rollback()
def create_bank_account(self):
bank = frappe.get_doc(
{
@@ -43,6 +40,7 @@ class TestBankReconciliationTool(AccountsTestMixin, IntegrationTestCase):
"bank": bank.name,
"is_company_account": True,
"account": self.bank, # account from Chart of Accounts
"company": self.company,
}
)
.insert()

View File

@@ -1,7 +1,6 @@
{
"actions": [],
"autoname": "format:Bank Statement Import on {creation}",
"beta": 1,
"creation": "2019-08-04 14:16:08.318714",
"doctype": "DocType",
"editable_grid": 1,
@@ -226,7 +225,7 @@
],
"hide_toolbar": 1,
"links": [],
"modified": "2025-06-11 02:23:22.159961",
"modified": "2026-05-30 20:51:10.353723",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Statement Import",
@@ -251,4 +250,4 @@
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

View File

@@ -1,15 +1,14 @@
# Copyright (c) 2020, Frappe Technologies and Contributors
# See license.txt
import unittest
from erpnext.accounts.doctype.bank_statement_import.bank_statement_import import (
is_mt940_format,
preprocess_mt940_content,
)
from erpnext.tests.utils import ERPNextTestSuite
class TestBankStatementImport(unittest.TestCase):
class TestBankStatementImport(ERPNextTestSuite):
"""Unit tests for Bank Statement Import functions"""
def test_preprocess_mt940_content_with_long_statement_number(self):

View File

@@ -2,27 +2,20 @@
# License: GNU General Public License v3. See license.txt
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import nowdate
from erpnext.accounts.doctype.bank_transaction.test_bank_transaction import create_bank_account
from erpnext.tests.utils import ERPNextTestSuite
IBAN_1 = "DE02000000003716541159"
IBAN_2 = "DE02500105170137075030"
class TestAutoMatchParty(IntegrationTestCase):
@classmethod
def setUpClass(cls):
class TestAutoMatchParty(ERPNextTestSuite):
def setUp(self):
create_bank_account()
frappe.db.set_single_value("Accounts Settings", "enable_party_matching", 1)
frappe.db.set_single_value("Accounts Settings", "enable_fuzzy_matching", 1)
return super().setUpClass()
@classmethod
def tearDownClass(cls):
frappe.db.set_single_value("Accounts Settings", "enable_party_matching", 0)
frappe.db.set_single_value("Accounts Settings", "enable_fuzzy_matching", 0)
def test_match_by_account_number(self):
create_supplier_for_match(account_no=IBAN_1[11:])

View File

@@ -6,7 +6,6 @@ import json
import frappe
from frappe import utils
from frappe.model.docstatus import DocStatus
from frappe.tests import IntegrationTestCase
from erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool import (
get_linked_payments,
@@ -19,12 +18,10 @@ from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_paymen
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.tests.utils import if_lending_app_installed
EXTRA_TEST_RECORD_DEPENDENCIES = ["Item", "Cost Center"]
from erpnext.tests.utils import ERPNextTestSuite, if_lending_app_installed
class TestBankTransaction(IntegrationTestCase):
class TestBankTransaction(ERPNextTestSuite):
def setUp(self):
make_pos_profile()
@@ -385,7 +382,7 @@ def add_vouchers(gl_account="_Test Bank - _TC"):
frappe.get_doc(
{
"doctype": "Customer",
"customer_group": "All Customer Groups",
"customer_group": "Individual",
"customer_type": "Company",
"customer_name": "Poore Simon's",
}
@@ -416,7 +413,7 @@ def add_vouchers(gl_account="_Test Bank - _TC"):
frappe.get_doc(
{
"doctype": "Customer",
"customer_group": "All Customer Groups",
"customer_group": "Individual",
"customer_type": "Company",
"customer_name": "Fayva",
}

View File

@@ -2,10 +2,11 @@
# See license.txt
import frappe
from frappe.tests import UnitTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestBankTransactionFees(UnitTestCase):
class TestBankTransactionFees(ERPNextTestSuite):
def test_included_fee_throws(self):
"""A fee that's part of a withdrawal cannot be bigger than the
withdrawal itself."""

View File

@@ -121,7 +121,7 @@ class BisectAccountingStatements(Document):
cur_node.save()
@frappe.whitelist()
@frappe.whitelist(methods=["POST"])
def build_tree(self):
frappe.db.delete("Bisect Nodes")

View File

@@ -2,8 +2,10 @@
# See license.txt
# import frappe
from frappe.tests import IntegrationTestCase
class TestBisectAccountingStatements(IntegrationTestCase):
from erpnext.tests.utils import ERPNextTestSuite
class TestBisectAccountingStatements(ERPNextTestSuite):
pass

View File

@@ -2,8 +2,10 @@
# See license.txt
# import frappe
from frappe.tests import IntegrationTestCase
class TestBisectNodes(IntegrationTestCase):
from erpnext.tests.utils import ERPNextTestSuite
class TestBisectNodes(ERPNextTestSuite):
pass

View File

@@ -707,18 +707,20 @@ def get_ordered_amount(params):
def get_other_condition(params, for_doc):
condition = f"expense_account = '{params.expense_account}'"
condition = f"expense_account = {frappe.db.escape(params.expense_account)}"
budget_against_field = params.get("budget_against_field")
if budget_against_field and params.get(budget_against_field):
condition += f" and child.{budget_against_field} = '{params.get(budget_against_field)}'"
condition += (
f" and child.{budget_against_field} = {frappe.db.escape(params.get(budget_against_field))}"
)
date_field = "schedule_date" if for_doc == "Material Request" else "transaction_date"
start_date = frappe.get_cached_value("Fiscal Year", params.from_fiscal_year, "year_start_date")
end_date = frappe.get_cached_value("Fiscal Year", params.to_fiscal_year, "year_end_date")
condition += f" and parent.{date_field} between '{start_date}' and '{end_date}'"
condition += f" and parent.{date_field} between {frappe.db.escape(str(start_date))} and {frappe.db.escape(str(end_date))}"
return condition

View File

@@ -19,12 +19,6 @@ from erpnext.tests.utils import ERPNextTestSuite
class TestBudget(ERPNextTestSuite):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.make_monthly_distribution()
cls.make_projects()
def setUp(self):
frappe.db.set_single_value("Accounts Settings", "use_legacy_budget_controller", False)
self.company = "_Test Company"

View File

@@ -2,8 +2,8 @@
# See license.txt
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestCashierClosing(IntegrationTestCase):
class TestCashierClosing(ERPNextTestSuite):
pass

View File

@@ -2,8 +2,8 @@
# See license.txt
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestChartofAccountsImporter(IntegrationTestCase):
class TestChartofAccountsImporter(ERPNextTestSuite):
pass

View File

@@ -6,12 +6,14 @@ frappe.provide("erpnext.cheque_print");
frappe.ui.form.on("Cheque Print Template", {
refresh: function (frm) {
if (!frm.doc.__islocal) {
frm.add_custom_button(
frm.doc.has_print_format ? __("Update Print Format") : __("Create Print Format"),
function () {
erpnext.cheque_print.view_cheque_print(frm);
}
).addClass("btn-primary");
if (frappe.user.has_role("System Manager")) {
frm.add_custom_button(
frm.doc.has_print_format ? __("Update Print Format") : __("Create Print Format"),
function () {
erpnext.cheque_print.view_cheque_print(frm);
}
).addClass("btn-primary");
}
$(frm.fields_dict.cheque_print_preview.wrapper).empty();

View File

@@ -1,5 +1,6 @@
{
"actions": [],
"allow_bulk_edit": 1,
"autoname": "field:bank_name",
"creation": "2016-05-04 14:35:00.402544",
"doctype": "DocType",
@@ -294,7 +295,7 @@
],
"links": [],
"max_attachments": 1,
"modified": "2024-03-27 13:06:44.654989",
"modified": "2026-06-08 12:10:35.829531",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cheque Print Template",
@@ -325,19 +326,17 @@
"write": 1
},
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts User",
"share": 1,
"write": 1
"share": 1
}
],
"row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}
}

View File

@@ -48,6 +48,8 @@ class ChequePrintTemplate(Document):
@frappe.whitelist()
def create_or_update_cheque_print_format(template_name):
frappe.only_for("System Manager")
if not frappe.db.exists("Print Format", template_name):
cheque_print = frappe.new_doc("Print Format")
cheque_print.update(

View File

@@ -2,8 +2,8 @@
# See license.txt
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestChequePrintTemplate(IntegrationTestCase):
class TestChequePrintTemplate(ERPNextTestSuite):
pass

View File

@@ -126,7 +126,7 @@
"idx": 1,
"is_tree": 1,
"links": [],
"modified": "2025-01-22 10:46:42.904001",
"modified": "2026-04-14 18:15:27.367298",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cost Center",
@@ -173,11 +173,20 @@
"role": "Employee",
"select": 1,
"share": 1
},
{
"role": "HR User",
"select": 1
},
{
"role": "HR Manager",
"select": 1
}
],
"row_format": "Dynamic",
"search_fields": "parent_cost_center, is_group",
"show_name_in_global_search": 1,
"sort_field": "creation",
"sort_order": "ASC",
"states": []
}
}

View File

@@ -3,10 +3,11 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestCostCenter(IntegrationTestCase):
class TestCostCenter(ERPNextTestSuite):
def test_cost_center_creation_against_child_node(self):
cost_center = frappe.get_doc(
{

View File

@@ -1,23 +0,0 @@
[
{
"company": "_Test Company",
"cost_center_name": "_Test Cost Center",
"doctype": "Cost Center",
"is_group": 0,
"parent_cost_center": "_Test Company - _TC"
},
{
"company": "_Test Company",
"cost_center_name": "_Test Cost Center 2",
"doctype": "Cost Center",
"is_group": 0,
"parent_cost_center": "_Test Company - _TC"
},
{
"company": "_Test Company",
"cost_center_name": "_Test Write Off Cost Center",
"doctype": "Cost Center",
"is_group": 0,
"parent_cost_center": "_Test Company - _TC"
}
]

View File

@@ -4,7 +4,6 @@ import unittest
import frappe
from frappe.query_builder.functions import Sum
from frappe.tests import IntegrationTestCase
from frappe.utils import add_days, today
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
@@ -16,9 +15,10 @@ from erpnext.accounts.doctype.cost_center_allocation.cost_center_allocation impo
WrongPercentageAllocation,
)
from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry
from erpnext.tests.utils import ERPNextTestSuite
class TestCostCenterAllocation(IntegrationTestCase):
class TestCostCenterAllocation(ERPNextTestSuite):
def setUp(self):
cost_centers = [
"Main Cost Center 1",
@@ -191,7 +191,7 @@ class TestCostCenterAllocation(IntegrationTestCase):
coa2.cancel()
jv.cancel()
@IntegrationTestCase.change_settings("System Settings", {"rounding_method": "Commercial Rounding"})
@ERPNextTestSuite.change_settings("System Settings", {"rounding_method": "Commercial Rounding"})
def test_debit_credit_on_cost_center_allocation_for_commercial_rounding(self):
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice

View File

@@ -3,11 +3,9 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
EXTRA_TEST_RECORD_DEPENDENCIES = ["Item"]
from erpnext.tests.utils import ERPNextTestSuite
def test_create_test_data():
@@ -88,6 +86,7 @@ def test_create_test_data():
"partner_name": "_Test Coupon Partner",
"commission_rate": 2,
"referral_code": "COPART",
"territory": "All Territories",
}
)
sales_partner.insert()
@@ -110,13 +109,10 @@ def test_create_test_data():
coupon_code.insert()
class TestCouponCode(IntegrationTestCase):
class TestCouponCode(ERPNextTestSuite):
def setUp(self):
test_create_test_data()
def tearDown(self):
frappe.set_user("Administrator")
def test_sales_order_with_coupon_code(self):
frappe.db.set_value("Coupon Code", "SAVE30", "used", 0)

View File

@@ -101,11 +101,11 @@
"label": "Use HTTP Protocol"
}
],
"hide_toolbar": 1,
"hide_toolbar": 0,
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2026-01-02 18:19:02.873815",
"modified": "2026-03-16 13:28:21.075743",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Currency Exchange Settings",

View File

@@ -3,8 +3,8 @@
# import frappe
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestCurrencyExchangeSettings(IntegrationTestCase):
class TestCurrencyExchangeSettings(ERPNextTestSuite):
pass

View File

@@ -2,7 +2,6 @@
"actions": [],
"allow_events_in_timeline": 1,
"autoname": "naming_series:",
"beta": 1,
"creation": "2019-07-05 16:34:31.013238",
"doctype": "DocType",
"engine": "InnoDB",
@@ -400,7 +399,7 @@
],
"is_submittable": 1,
"links": [],
"modified": "2024-11-26 13:46:07.760867",
"modified": "2026-05-30 23:18:04.712528",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Dunning",
@@ -449,9 +448,10 @@
"write": 1
}
],
"row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "ASC",
"states": [],
"title_field": "customer_name",
"track_changes": 1
}
}

View File

@@ -4,37 +4,20 @@ import json
import frappe
from frappe.model import mapper
from frappe.tests import IntegrationTestCase
from frappe.utils import add_days, nowdate, today
from erpnext import get_default_cost_center
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import (
unlink_payment_on_cancel_of_invoice,
)
from erpnext.accounts.doctype.sales_invoice.sales_invoice import (
create_dunning as create_dunning_from_sales_invoice,
)
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import (
create_sales_invoice_against_cost_center,
)
EXTRA_TEST_RECORD_DEPENDENCIES = ["Company", "Cost Center"]
from erpnext.tests.utils import ERPNextTestSuite
class TestDunning(IntegrationTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
create_dunning_type("First Notice", fee=0.0, interest=0.0, is_default=1)
create_dunning_type("Second Notice", fee=10.0, interest=10.0, is_default=0)
unlink_payment_on_cancel_of_invoice()
@classmethod
def tearDownClass(cls):
unlink_payment_on_cancel_of_invoice(0)
super().tearDownClass()
class TestDunning(ERPNextTestSuite):
def test_dunning_without_fees(self):
dunning = create_dunning(overdue_days=20)

View File

@@ -1,7 +1,6 @@
{
"actions": [],
"allow_rename": 1,
"beta": 1,
"creation": "2019-12-04 04:59:08.003664",
"doctype": "DocType",
"editable_grid": 1,
@@ -107,7 +106,7 @@
"link_fieldname": "dunning_type"
}
],
"modified": "2024-03-27 13:08:19.584112",
"modified": "2026-05-30 23:18:20.740726",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Dunning Type",
@@ -151,8 +150,9 @@
"write": 1
}
],
"row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

View File

@@ -3,8 +3,8 @@
# import frappe
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestDunningType(IntegrationTestCase):
class TestDunningType(ERPNextTestSuite):
pass

View File

@@ -1,36 +0,0 @@
[
{
"doctype": "Dunning Type",
"dunning_type": "_Test First Notice",
"company": "_Test Company",
"is_default": 1,
"dunning_fee": 0.0,
"rate_of_interest": 0.0,
"dunning_letter_text": [
{
"language": "en",
"body_text": "We have still not received payment for our invoice",
"closing_text": "We kindly request that you pay the outstanding amount immediately, including interest and late fees."
}
],
"income_account": "Sales - _TC",
"cost_center": "_Test Cost Center - _TC"
},
{
"doctype": "Dunning Type",
"dunning_type": "_Test Second Notice",
"company": "_Test Company",
"is_default": 0,
"dunning_fee": 10.0,
"rate_of_interest": 10.0,
"dunning_letter_text": [
{
"language": "en",
"body_text": "We have still not received payment for our invoice",
"closing_text": "We kindly request that you pay the outstanding amount immediately, including interest and late fees."
}
],
"income_account": "Sales - _TC",
"cost_center": "_Test Cost Center - _TC"
}
]

View File

@@ -5,15 +5,15 @@
import frappe
from frappe.query_builder import functions
from frappe.query_builder.utils import DocType
from frappe.tests import IntegrationTestCase
from frappe.utils import add_days, flt, today
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
from erpnext.tests.utils import ERPNextTestSuite
class TestExchangeRateRevaluation(AccountsTestMixin, IntegrationTestCase):
class TestExchangeRateRevaluation(ERPNextTestSuite, AccountsTestMixin):
def setUp(self):
self.create_company()
self.create_usd_receivable_account()
@@ -22,14 +22,13 @@ class TestExchangeRateRevaluation(AccountsTestMixin, IntegrationTestCase):
self.clear_old_entries()
self.set_system_and_company_settings()
def tearDown(self):
frappe.db.rollback()
def set_system_and_company_settings(self):
# set number and currency precision
system_settings = frappe.get_doc("System Settings")
system_settings.float_precision = 2
system_settings.currency_precision = 2
system_settings.language = "en"
system_settings.time_zone = "Asia/Kolkata"
system_settings.save()
# Using Exchange Gain/Loss account for unrealized as well.
@@ -37,7 +36,7 @@ class TestExchangeRateRevaluation(AccountsTestMixin, IntegrationTestCase):
company_doc.unrealized_exchange_gain_loss_account = company_doc.exchange_gain_loss_account
company_doc.save()
@IntegrationTestCase.change_settings(
@ERPNextTestSuite.change_settings(
"Accounts Settings",
{"allow_multi_currency_invoices_against_single_party_account": 1, "allow_stale": 0},
)
@@ -91,7 +90,7 @@ class TestExchangeRateRevaluation(AccountsTestMixin, IntegrationTestCase):
)[0]
self.assertEqual(acc_balance.balance, 8500.0)
@IntegrationTestCase.change_settings(
@ERPNextTestSuite.change_settings(
"Accounts Settings",
{"allow_multi_currency_invoices_against_single_party_account": 1, "allow_stale": 0},
)
@@ -164,7 +163,7 @@ class TestExchangeRateRevaluation(AccountsTestMixin, IntegrationTestCase):
self.assertEqual(acc_balance.balance, 0.0)
self.assertEqual(acc_balance.balance_in_account_currency, 0.0)
@IntegrationTestCase.change_settings(
@ERPNextTestSuite.change_settings(
"Accounts Settings",
{"allow_multi_currency_invoices_against_single_party_account": 1, "allow_stale": 0},
)
@@ -259,7 +258,7 @@ class TestExchangeRateRevaluation(AccountsTestMixin, IntegrationTestCase):
self.assertEqual(flt(acc_balance.balance, precision), 0.0)
self.assertEqual(flt(acc_balance.balance_in_account_currency, precision), 0.0)
@IntegrationTestCase.change_settings(
@ERPNextTestSuite.change_settings(
"Accounts Settings",
{"allow_multi_currency_invoices_against_single_party_account": 1, "allow_stale": 0},
)

View File

@@ -3,12 +3,12 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry
from erpnext.tests.utils import ERPNextTestSuite
class TestFinanceBook(IntegrationTestCase):
class TestFinanceBook(ERPNextTestSuite):
def test_finance_book(self):
finance_book = create_finance_book()

View File

@@ -6,7 +6,7 @@ import json
import math
from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from functools import reduce
from functools import cache, reduce
from typing import Any, Union
import frappe
@@ -15,6 +15,7 @@ from frappe.database.operator_map import OPERATOR_MAP
from frappe.query_builder import Case
from frappe.query_builder.functions import Sum
from frappe.utils import cstr, date_diff, flt, getdate
from frappe.utils.xlsxutils import XLSXMetadata, XLSXStyleBuilder
from pypika.terms import Bracket, LiteralValue
from erpnext import get_company_currency
@@ -38,6 +39,9 @@ from erpnext.accounts.report.financial_statements import (
)
from erpnext.accounts.utils import get_children, get_currency_precision
DEFAULT_BULLET_PREFIX = ""
SEGMENT_PREFIX = "seg_"
# ============================================================================
# DATA MODELS
# ============================================================================
@@ -141,7 +145,7 @@ class SegmentData:
@property
def id(self) -> str:
return f"seg_{self.index}"
return f"{SEGMENT_PREFIX}{self.index}"
@dataclass
@@ -222,14 +226,38 @@ class FinancialReportEngine:
return context.get_result()
def _validate_filters(self, filters: dict[str, Any]) -> None:
required_filters = ["report_template", "period_start_date", "period_end_date"]
filter_labels = {
"report_template": _("Report Template"),
"filter_based_on": _("Filter Based On"),
"period_start_date": _("Start Date"),
"period_end_date": _("End Date"),
"from_fiscal_year": _("Start Year"),
"to_fiscal_year": _("End Year"),
}
required_filters_by_basis = {
"Date Range": ("period_start_date", "period_end_date"),
"Fiscal Year": ("from_fiscal_year", "to_fiscal_year"),
}
required_filters = ["report_template", "filter_based_on"]
required_filters.extend(required_filters_by_basis.get(filters.get("filter_based_on"), ()))
for filter_key in required_filters:
if not filters.get(filter_key):
frappe.throw(_("Missing required filter: {0}").format(filter_key))
frappe.throw(
title=_("Missing Required Filter"),
msg=_("Missing required filter: {0}").format(
frappe.bold(filter_labels.get(filter_key, filter_key))
),
)
if filters.get("presentation_currency"):
frappe.msgprint(_("Currency filters are currently unsupported in Custom Financial Report."))
frappe.msgprint(
title=_("Unsupported Feature"),
msg=_("Currency filters are currently unsupported in Custom Financial Report."),
indicator="orange",
)
# Margin view is dependent on first row being an income account. Hence not supported.
# Way to implement this would be using calculated rows with formulas.
@@ -464,6 +492,7 @@ class FinancialQueryBuilder:
self.periods = periods
self.company = filters.get("company")
self.account_meta = {} # {name: {account_name, account_number}}
self.ignore_opening_entries = False
def fetch_account_balances(self, accounts: list[dict]) -> dict[str, AccountData]:
"""
@@ -501,6 +530,8 @@ class FinancialQueryBuilder:
"""
Return opening balances for *all accounts* defaulting to zero.
"""
self.ignore_opening_entries = False
if frappe.get_single_value("Accounts Settings", "ignore_account_closing_balance"):
return self._get_opening_balances_from_gl(accounts)
@@ -520,9 +551,9 @@ class FinancialQueryBuilder:
if last_closing_voucher:
closing_voucher = last_closing_voucher[0]
closing_data = self._get_closing_balances(accounts, closing_voucher.name)
self.ignore_opening_entries = True # Else it will double count
if sum(closing_data.values()) != 0.0:
return self._rebase_closing_balances(closing_data, closing_voucher.period_end_date)
return self._rebase_closing_balances(closing_data, closing_voucher.period_end_date)
return self._get_opening_balances_from_gl(accounts)
@@ -534,18 +565,19 @@ class FinancialQueryBuilder:
frappe.qb.from_(acb_table)
.select(
acb_table.account,
(acb_table.debit - acb_table.credit).as_("balance"),
Sum(acb_table.debit - acb_table.credit).as_("balance"),
)
.where(acb_table.company == self.company)
.where(acb_table.account.isin(account_names))
.where(acb_table.period_closing_voucher == closing_voucher)
.groupby(acb_table.account)
)
query = self._apply_standard_filters(query, acb_table, "Account Closing Balance")
results = self._execute_with_permissions(query, "Account Closing Balance")
for row in results:
closing_balances[row["account"]] = row["balance"]
closing_balances[row["account"]] = row["balance"] or 0.0
return closing_balances
@@ -616,7 +648,12 @@ class FinancialQueryBuilder:
.groupby(gl_table.account)
)
if not frappe.get_single_value("Accounts Settings", "ignore_is_opening_check_for_reporting"):
ignore_is_opening = frappe.get_single_value(
"Accounts Settings", "ignore_is_opening_check_for_reporting"
)
if self.ignore_opening_entries and not ignore_is_opening:
# This filter here applies to all accounts (BS & PL)
# However, in legacy query, this filter only applies to BS accounts
query = query.where(gl_table.is_opening == "No")
# Add period-specific columns
@@ -680,11 +717,18 @@ class FinancialQueryBuilder:
account_data.unaccumulate_values()
def _apply_standard_filters(self, query, table, doctype: str = "GL Entry"):
if self.filters.get("ignore_closing_entries"):
if doctype == "GL Entry":
query = query.where(table.voucher_type != "Period Closing Voucher")
else:
query = query.where(table.is_period_closing_voucher_entry == 0)
# Exclude PCV-generated entries except those posted to a closing-account-head
# so BS retained earnings survive while P&L reversal entries are filtered out
pcv = frappe.qb.DocType("Period Closing Voucher")
closing_heads = frappe.qb.from_(pcv).select(pcv.closing_account_head).where(pcv.docstatus == 1)
if doctype == "GL Entry":
is_pcv = table.voucher_type == "Period Closing Voucher"
else:
# Account Closing Balance
is_pcv = table.is_period_closing_voucher_entry == 1
query = query.where(~is_pcv | table.account.isin(closing_heads))
if self.filters.get("project"):
projects = self.filters.get("project")
@@ -1392,7 +1436,8 @@ class FormattingEngine:
condition=lambda rd: getattr(rd.row, "italic_text", False), format_properties={"italic": True}
),
FormattingRule(
condition=lambda rd: rd.is_detail_row, format_properties={"is_detail": True, "prefix": ""}
condition=lambda rd: rd.is_detail_row,
format_properties={"is_detail": True, "prefix": DEFAULT_BULLET_PREFIX},
),
FormattingRule(
condition=lambda rd: getattr(rd.row, "warn_if_negative", False),
@@ -1838,3 +1883,124 @@ class GrowthViewTransformer:
return 0.0
else:
return flt(((current_value - previous_value) / abs(previous_value)) * 100, 2)
# ============================================================================
# XLSX EXPORT STYLING
# ============================================================================
def get_xlsx_styles(metadata: XLSXMetadata) -> dict | None:
"""
Generate XLSX styles for financial report templates.
NOTE: Currently only custom report generated with "Report Template" filter will have styles applied.
"""
# skip styling
if not metadata.filters.get("report_template"):
return
builder = XLSXStyleBuilder(metadata, default_styling=False)
builder.apply_default_styles(currency_formatting=False)
# currency is fixed for all columns (only if report template filter is applied)
currency = get_company_currency(metadata.filters.get("company"))
styles = {
"bold": builder.register_style({"bold": True}),
"italic": builder.register_style({"italic": True}),
"warning": builder.register_style({"font_color": "#dc3545"}), # text-danger
}
fieldtype_formats = {
"Int": builder.register_style({"num_format": "General"}),
"Float": builder.register_style({"num_format": builder.get_number_format("Float")}),
"Percent": builder.register_style({"num_format": builder.get_number_format("Percent")}),
"Currency": builder.register_style({"num_format": builder.get_number_format("Currency", currency)}),
}
# quick access for hot loop
style_cell = builder.style_cell
@cache
def get_color_style(color: str) -> int:
return builder.register_style({"font_color": color})
@cache
def get_prefix_style(prefix: str) -> int:
prefix = f"{prefix or DEFAULT_BULLET_PREFIX}@"
return builder.register_style({"num_format": prefix})
@cache
def get_indent_style(indent: int) -> int:
return builder.register_style({"align": "left", "indent": indent})
# column level styling of currency columns
for col_idx, col in metadata.column_map.items():
if col.get("fieldtype") != "Currency":
continue
builder.style_column(col_idx, fieldtype_formats["Currency"])
# cell level styling
for row_idx, row in metadata.row_map.items():
# skip total row
if metadata.has_total_row and row_idx == builder.last_row_index:
continue
is_segmented = (row.get("_segment_info", {}).get("total_segments", 1) or 1) > 1
segment_values = row.get("segment_values", {}) or {}
for col_idx, col in metadata.column_map.items():
fieldname = col.get("fieldname")
is_account = fieldname == "account"
# determine formatting bucket
if is_segmented and fieldname.startswith(SEGMENT_PREFIX):
formatting = row.copy()
_, seg_idx, seg_fieldname = fieldname.split("_", 2)
is_account = seg_fieldname == "account"
formatting.update(segment_values.get(f"{SEGMENT_PREFIX}{seg_idx}", {}) or {})
else:
formatting = row # default formatting bucket.
if not is_account and formatting.get("is_blank_line"):
continue
col_fieldtype = col.get("fieldtype")
cell_fieldtype = formatting.get("fieldtype") or col_fieldtype
cell_value = row.get(fieldname)
if cell_value in (None, ""):
continue
# account column and other fieldtype styling
if is_account:
if formatting.get("is_detail") or (prefix := formatting.get("prefix")):
style_cell(row_idx, col_idx, get_prefix_style(prefix))
# custom indentation (different segment might have different indentation levels)
if is_segmented and (indent := formatting.get("indent")) and indent > 0:
style_cell(row_idx, col_idx, get_indent_style(indent))
else:
if col_fieldtype != cell_fieldtype and cell_fieldtype in fieldtype_formats:
style_cell(row_idx, col_idx, fieldtype_formats[cell_fieldtype])
# text styles
for style_key in ("bold", "italic"):
if formatting.get(style_key):
style_cell(row_idx, col_idx, styles[style_key])
# color styles
if (
formatting.get("warn_if_negative")
and cell_fieldtype in frappe.model.numeric_fieldtypes
and flt(cell_value) < 0
):
style_cell(row_idx, col_idx, styles["warning"])
elif color := formatting.get("color"):
style_cell(row_idx, col_idx, get_color_style(color))
return builder.result

View File

@@ -3,6 +3,8 @@
frappe.ui.form.on("Financial Report Template", {
refresh(frm) {
if (frm.is_new() || frm.doc.rows.length === 0) return;
// add custom button to view missed accounts
frm.add_custom_button(__("View Account Coverage"), function () {
let selected_rows = frm.get_field("rows").grid.get_selected_children();
@@ -20,7 +22,7 @@ frappe.ui.form.on("Financial Report Template", {
});
},
validate(frm) {
after_save(frm) {
if (!frm.doc.rows || frm.doc.rows.length === 0) {
frappe.msgprint(__("At least one row is required for a financial report template"));
}
@@ -34,14 +36,6 @@ frappe.ui.form.on("Financial Report Row", {
update_formula_label(frm, row.data_source);
update_formula_description(frm, row.data_source);
if (row.data_source !== "Account Data") {
frappe.model.set_value(cdt, cdn, "balance_type", "");
}
if (["Blank Line", "Column Break", "Section Break"].includes(row.data_source)) {
frappe.model.set_value(cdt, cdn, "calculation_formula", "");
}
set_up_filters_editor(frm, cdt, cdn);
},
@@ -322,6 +316,8 @@ function update_formula_description(frm, data_source) {
const list_style = `style="margin-bottom: var(--margin-sm); color: var(--text-muted); font-size: 0.9em;"`;
const note_style = `style="margin-bottom: 0; color: var(--text-muted); font-size: 0.9em;"`;
const tip_style = `style="margin-bottom: 0; color: var(--text-color); font-size: 0.85em;"`;
const code_style = `style="background: var(--bg-light-gray); padding: var(--padding-xs); border-radius: var(--border-radius); font-size: 0.85em; width: max-content; margin-bottom: var(--margin-sm);"`;
const pre_style = `style="margin: 0; border-radius: var(--border-radius)"`;
let description_html = "";
@@ -382,8 +378,13 @@ function update_formula_description(frm, data_source) {
<li><code>my_app.financial_reports.get_kpi_data</code></li>
</ul>
<h6 ${subtitle_style}>Method Signature:</h6>
<div ${code_style}>
<pre ${pre_style}>def get_custom_data(filters, periods, row): <br>&nbsp; # filters: dict — report filters (company, period, etc.) <br>&nbsp; # periods: list[dict] — period definitions <br>&nbsp; # row: dict — the current report row <br><br>&nbsp; return [1000.0, 1200.0, 1150.0] # one value per period</pre>
</div>
<h6 ${subtitle_style}>Return Format:</h6>
<p ${text_style}>Numbers for each period: <code>[1000.0, 1200.0, 1150.0]</code></p>
<p ${text_style}>A list of numbers, one for each period: <code>[1000.0, 1200.0, 1150.0]</code></p>
</div>`;
} else if (data_source === "Blank Line") {
description_html = `

View File

@@ -1,6 +1,5 @@
{
"actions": [],
"allow_rename": 1,
"autoname": "field:template_name",
"creation": "2025-08-02 04:44:15.184541",
"doctype": "DocType",
@@ -31,7 +30,8 @@
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Report Type",
"options": "\nProfit and Loss Statement\nBalance Sheet\nCash Flow\nCustom Financial Statement"
"options": "\nProfit and Loss Statement\nBalance Sheet\nCash Flow\nCustom Financial Statement",
"reqd": 1
},
{
"depends_on": "eval:frappe.boot.developer_mode",
@@ -66,7 +66,7 @@
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-11-14 00:11:03.508139",
"modified": "2026-02-23 01:04:05.797161",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Financial Report Template",

View File

@@ -32,6 +32,19 @@ class FinancialReportTemplate(Document):
template_name: DF.Data
# end: auto-generated types
def before_validate(self):
self.clear_hidden_fields()
def clear_hidden_fields(self):
style_data_sources = {"Blank Line", "Column Break", "Section Break"}
for row in self.rows:
if row.data_source != "Account Data":
row.balance_type = None
if row.data_source in style_data_sources:
row.calculation_formula = None
def validate(self):
validator = TemplateValidator(self)
result = validator.validate()

View File

@@ -70,8 +70,8 @@ class ValidationResult:
self.warnings.append(issue)
def notify_user(self) -> None:
warnings = "<br><br>".join(str(w) for w in self.warnings)
errors = "<br><br>".join(str(e) for e in self.issues)
warnings = "<br><br>".join(str(w) for w in self.warnings if w)
errors = "<br><br>".join(str(e) for e in self.issues if e)
if warnings:
frappe.msgprint(warnings, title=_("Warnings"), indicator="orange")
@@ -99,9 +99,8 @@ class TemplateValidator:
result.merge(validator.validate(self.template))
# Run row-level validations
account_fields = {field.fieldname for field in frappe.get_meta("Account").fields}
for row in self.template.rows:
result.merge(self.formula_validator.validate(row, account_fields))
result.merge(self.formula_validator.validate(row))
return result
@@ -383,7 +382,8 @@ class AccountFilterValidator(Validator):
"""Validates account filter expressions used in Account Data rows"""
def __init__(self, account_fields: set | None = None):
self.account_fields = account_fields or set(frappe.get_meta("Account")._valid_columns)
self.account_meta = frappe.get_meta("Account")
self.account_fields = account_fields or set(self.account_meta._valid_columns)
def validate(self, row) -> ValidationResult:
result = ValidationResult()
@@ -403,7 +403,11 @@ class AccountFilterValidator(Validator):
try:
filter_config = json.loads(row.calculation_formula)
error = self._validate_filter_structure(filter_config, self.account_fields)
error = self._validate_filter_structure(
filter_config,
self.account_fields,
row.advanced_filtering,
)
if error:
result.add_error(
@@ -425,7 +429,12 @@ class AccountFilterValidator(Validator):
return result
def _validate_filter_structure(self, filter_config, account_fields: set) -> str | None:
def _validate_filter_structure(
self,
filter_config,
account_fields: set,
advanced_filtering: bool = False,
) -> str | None:
# simple condition: [field, operator, value]
if isinstance(filter_config, list):
if len(filter_config) != 3:
@@ -436,8 +445,10 @@ class AccountFilterValidator(Validator):
if not isinstance(field, str) or not isinstance(operator, str):
return "Field and operator must be strings"
display = (field if advanced_filtering else self.account_meta.get_label(field)) or field
if field not in account_fields:
return f"Field '{field}' is not a valid account field"
return f"Field '{display}' is not a valid Account field"
if operator.casefold() not in OPERATOR_MAP:
return f"Invalid operator '{operator}'"
@@ -460,7 +471,7 @@ class AccountFilterValidator(Validator):
# recursive
for condition in conditions:
error = self._validate_filter_structure(condition, account_fields)
error = self._validate_filter_structure(condition, account_fields, advanced_filtering)
if error:
return error
else:
@@ -476,7 +487,7 @@ class FormulaValidator(Validator):
self.calculation_validator = CalculationFormulaValidator(reference_codes)
self.account_filter_validator = AccountFilterValidator()
def validate(self, row, account_fields: set) -> ValidationResult:
def validate(self, row) -> ValidationResult:
result = ValidationResult()
if not row.calculation_formula:
@@ -486,9 +497,6 @@ class FormulaValidator(Validator):
return self.calculation_validator.validate(row)
elif row.data_source == "Account Data":
# Update account fields if provided
if account_fields:
self.account_filter_validator.account_fields = account_fields
return self.account_filter_validator.validate(row)
elif row.data_source == "Custom API":

View File

@@ -10,6 +10,7 @@ from erpnext.accounts.doctype.financial_report_template.financial_report_engine
DependencyResolver,
FilterExpressionParser,
FinancialQueryBuilder,
FinancialReportEngine,
FormulaCalculator,
PeriodValue,
)
@@ -18,12 +19,7 @@ from erpnext.accounts.doctype.financial_report_template.test_financial_report_te
)
from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry
from erpnext.accounts.utils import get_currency_precision, get_fiscal_year
# On IntegrationTestCase, the doctype test records and all
# link-field test record dependencies are recursively loaded
# Use these module variables to add/remove to/from that list
EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
from erpnext.tests.utils import change_settings
class TestDependencyResolver(FinancialReportTemplateTestCase):
@@ -1301,6 +1297,7 @@ class TestFilterExpressionParser(FinancialReportTemplateTestCase):
self.data_source = "Account Data"
self.idx = 1
self.reverse_sign = 0
self.advanced_filtering = True
return MockReportRow(formula, reference_code)
@@ -1957,6 +1954,257 @@ class TestFinancialQueryBuilder(FinancialReportTemplateTestCase):
jv_2023.cancel()
@change_settings("Accounts Settings", {"use_legacy_controller_for_pcv": 1})
def test_opening_balance_sums_acb_rows_across_dimensions(self):
"""
Account Closing Balance stores one row per (account, cost_center,
project, finance_book). The closing-balance fetch must sum all rows.
"""
company = "_Test Company"
cash_account = "_Test Cash - _TC"
sales_account = "Sales - _TC"
cc_1 = "_Test Cost Center - _TC"
cc_2 = "_Test Cost Center 2 - _TC"
docs = []
try:
jv_2023_cc1 = make_journal_entry(
account1=cash_account,
account2=sales_account,
amount=3000,
posting_date="2023-06-15",
cost_center=cc_1,
company=company,
submit=True,
)
docs.append(jv_2023_cc1)
jv_2023_cc2 = make_journal_entry(
account1=cash_account,
account2=sales_account,
amount=2000,
posting_date="2023-06-15",
cost_center=cc_2,
company=company,
submit=True,
)
docs.append(jv_2023_cc2)
fy_2023 = get_fiscal_year("2023-06-15", company=company)
pcv = frappe.get_doc(
{
"doctype": "Period Closing Voucher",
"transaction_date": "2023-12-31",
"period_start_date": fy_2023[1],
"period_end_date": fy_2023[2],
"company": company,
"fiscal_year": fy_2023[0],
"cost_center": cc_1,
"closing_account_head": "Deferred Revenue - _TC",
"remarks": "Test multi-dim PCV",
}
)
pcv.insert()
pcv.submit()
docs.append(pcv)
jv_2024 = make_journal_entry(
account1=cash_account,
account2=sales_account,
amount=100,
posting_date="2024-01-15",
cost_center=cc_1,
company=company,
submit=True,
)
docs.append(jv_2024)
filters = {
"company": company,
"from_fiscal_year": "2024",
"to_fiscal_year": "2024",
"period_start_date": "2024-01-01",
"period_end_date": "2024-03-31",
"filter_based_on": "Date Range",
"periodicity": "Monthly",
"ignore_closing_entries": True,
}
periods = [
{"key": "2024_jan", "from_date": "2024-01-01", "to_date": "2024-01-31"},
{"key": "2024_feb", "from_date": "2024-02-01", "to_date": "2024-02-29"},
{"key": "2024_mar", "from_date": "2024-03-01", "to_date": "2024-03-31"},
]
query_builder = FinancialQueryBuilder(filters, periods)
accounts = [
frappe._dict({"name": cash_account, "account_name": "Cash", "account_number": "1001"}),
]
balances_data = query_builder.fetch_account_balances(accounts)
cash_data = balances_data.get(cash_account)
self.assertIsNotNone(cash_data, "Cash account must appear in results")
jan_cash = cash_data.get_period("2024_jan")
self.assertEqual(jan_cash.opening, 5000.0)
self.assertEqual(jan_cash.movement, 100.0)
self.assertEqual(jan_cash.closing, 5100.0)
finally:
self.cancel_docs(docs)
def test_opening_entries_roll_into_opening_after_period_closing(self):
"""
Sequence:
1. is_opening JV of 3000 in current year (FY 2024)
2. is_opening JV of 5000 in next year (FY 2025)
3. Period Closing Voucher for previous year (FY 2023)
Expected (BS report for FY 2024):
opening of FY 2024 = 3000 + 5000 = 8000
(all is_opening entries roll into opening irrespective of fiscal year,
on top of the PCV carry-forward — here PCV closing for cash is 0).
"""
company = "_Test Company"
cash_account = "_Test Cash - _TC"
# Opening JVs cannot post against P&L accounts; use a Balance Sheet offset.
opening_offset_account = "Temporary Opening - _TC"
pcv = None
jv_current_year = None
jv_next_year = None
original_pcv_setting = frappe.db.get_single_value(
"Accounts Settings", "use_legacy_controller_for_pcv"
)
try:
# Step 1: opening JV in current year (FY 2024) — must be posted before PCV
# exists, else `validate_against_pcv` rejects it.
jv_current_year = make_journal_entry(
account1=cash_account,
account2=opening_offset_account,
amount=3000,
posting_date="2024-06-15",
company=company,
save=False,
)
jv_current_year.is_opening = "Yes"
jv_current_year.insert()
jv_current_year.submit()
# Step 2: opening JV in next year (FY 2025)
jv_next_year = make_journal_entry(
account1=cash_account,
account2=opening_offset_account,
amount=5000,
posting_date="2025-06-15",
company=company,
save=False,
)
jv_next_year.is_opening = "Yes"
jv_next_year.insert()
jv_next_year.submit()
# Step 3: book Period Closing Voucher for previous year (FY 2023)
closing_account = frappe.db.get_value(
"Account",
{
"company": company,
"root_type": "Liability",
"is_group": 0,
"account_type": ["not in", ["Payable", "Receivable"]],
},
"name",
)
fy_2023 = get_fiscal_year("2023-06-15", company=company)
frappe.db.set_single_value("Accounts Settings", "use_legacy_controller_for_pcv", 1)
pcv = frappe.get_doc(
{
"doctype": "Period Closing Voucher",
"transaction_date": "2023-12-31",
"period_start_date": fy_2023[1],
"period_end_date": fy_2023[2],
"company": company,
"fiscal_year": fy_2023[0],
"cost_center": "_Test Cost Center - _TC",
"closing_account_head": closing_account,
"remarks": "Test Period Closing",
}
)
pcv.insert()
pcv.submit()
pcv.reload()
# Run BS report for FY 2024
filters = {
"company": company,
"from_fiscal_year": "2024",
"to_fiscal_year": "2024",
"period_start_date": "2024-01-01",
"period_end_date": "2024-12-31",
"filter_based_on": "Date Range",
"periodicity": "Yearly",
"ignore_closing_entries": True,
}
periods = [{"key": "2024", "from_date": "2024-01-01", "to_date": "2024-12-31"}]
query_builder = FinancialQueryBuilder(filters, periods)
accounts = [
frappe._dict({"name": cash_account, "account_name": "Cash", "account_number": "1001"}),
frappe._dict(
{
"name": opening_offset_account,
"account_name": "Temporary Opening",
"account_number": "1900",
}
),
]
balances_data = query_builder.fetch_account_balances(accounts)
cash_data = balances_data.get(cash_account)
offset_data = balances_data.get(opening_offset_account)
self.assertIsNotNone(cash_data, "Cash account should exist in results")
self.assertIsNotNone(offset_data, "Offset account should exist in results")
year_2024_cash = cash_data.get_period("2024")
year_2024_offset = offset_data.get_period("2024")
self.assertIsNotNone(year_2024_cash, "FY 2024 period should exist for cash")
self.assertIsNotNone(year_2024_offset, "FY 2024 period should exist for offset")
# All is_opening JVs (current + next year) roll into FY 2024 opening
self.assertEqual(
year_2024_cash.opening,
8000.0,
"FY 2024 cash opening must combine is_opening JVs from current and next year",
)
self.assertEqual(
year_2024_offset.opening,
-8000.0,
"FY 2024 offset opening must combine is_opening JVs from current and next year",
)
self.assertEqual(
year_2024_cash.movement, 0.0, "Opening JVs must not be counted as period movement"
)
self.assertEqual(year_2024_cash.closing, 8000.0, "Closing = opening when no non-opening movement")
finally:
frappe.db.set_single_value(
"Accounts Settings", "use_legacy_controller_for_pcv", original_pcv_setting or 0
)
if pcv:
pcv.reload()
if pcv.docstatus == 1:
pcv.cancel()
if jv_next_year and jv_next_year.docstatus == 1:
jv_next_year.cancel()
if jv_current_year and jv_current_year.docstatus == 1:
jv_current_year.cancel()
def test_account_with_gl_entries_but_no_prior_closing_balance(self):
company = "_Test Company"
cash_account = "_Test Cash - _TC"
@@ -2030,3 +2278,210 @@ class TestFinancialQueryBuilder(FinancialReportTemplateTestCase):
finally:
jv.cancel()
def test_pl_pcv_exclusion_and_growth_view_year_over_year(self):
"""
Sequence:
1. Expense JV 2000 in FY 2024, PCV for FY 2024
→ assert FY 2024 movement = 2000 via FinancialQueryBuilder
2. Expense JV 3000 in FY 2025, PCV for FY 2025
3. Run FinancialReportEngine with selected_view="Growth"
→ assert col_2024 = 2000 (raw), col_2025 = 50.0 (% growth)
"""
company = "_Test Company"
expense_account = "Administrative Expenses - _TC"
bank_account = "_Test Bank - _TC"
template = None
pcv_2024 = None
pcv_2025 = None
jv_2024 = None
jv_2025 = None
original_pcv_setting = frappe.db.get_single_value(
"Accounts Settings", "use_legacy_controller_for_pcv"
)
try:
closing_account = frappe.db.get_value(
"Account",
{
"company": company,
"root_type": "Liability",
"is_group": 0,
"account_type": ["not in", ["Payable", "Receivable"]],
},
"name",
)
frappe.db.set_single_value("Accounts Settings", "use_legacy_controller_for_pcv", 1)
accounts = [
frappe._dict(
{
"name": expense_account,
"account_name": "Administrative Expenses",
"account_number": "5001",
}
),
]
# --- Step 1: FY 2024 expense + PCV, assert PCV reversal excluded ---
jv_2024 = make_journal_entry(
account1=expense_account,
account2=bank_account,
amount=2000,
posting_date="2024-06-15",
company=company,
submit=True,
)
fy_2024 = get_fiscal_year("2024-06-15", company=company)
pcv_2024 = frappe.get_doc(
{
"doctype": "Period Closing Voucher",
"transaction_date": "2024-12-31",
"period_start_date": fy_2024[1],
"period_end_date": fy_2024[2],
"company": company,
"fiscal_year": fy_2024[0],
"cost_center": "_Test Cost Center - _TC",
"closing_account_head": closing_account,
"remarks": "Test PCV FY 2024",
}
)
pcv_2024.insert()
pcv_2024.submit()
pcv_2024.reload()
builder_2024 = FinancialQueryBuilder(
{
"company": company,
"from_fiscal_year": "2024",
"to_fiscal_year": "2024",
"period_start_date": "2024-01-01",
"period_end_date": "2024-12-31",
"filter_based_on": "Date Range",
"periodicity": "Yearly",
},
[{"key": "2024", "from_date": "2024-01-01", "to_date": "2024-12-31"}],
)
data_2024 = builder_2024.fetch_account_balances(accounts)
expense_2024 = data_2024.get(expense_account)
self.assertIsNotNone(expense_2024, "Expense account must appear in FY 2024 results")
year_2024 = expense_2024.get_period("2024")
self.assertEqual(
year_2024.movement,
2000.0,
"FY 2024 expense movement must equal real expense (PCV reversal excluded)",
)
# --- Step 2: FY 2025 expense + PCV ---
jv_2025 = make_journal_entry(
account1=expense_account,
account2=bank_account,
amount=3000,
posting_date="2025-06-15",
company=company,
submit=True,
)
fy_2025 = get_fiscal_year("2025-06-15", company=company)
pcv_2025 = frappe.get_doc(
{
"doctype": "Period Closing Voucher",
"transaction_date": "2025-12-31",
"period_start_date": fy_2025[1],
"period_end_date": fy_2025[2],
"company": company,
"fiscal_year": fy_2025[0],
"cost_center": "_Test Cost Center - _TC",
"closing_account_head": closing_account,
"remarks": "Test PCV FY 2025",
}
)
pcv_2025.insert()
pcv_2025.submit()
pcv_2025.reload()
# --- Step 3: full pipeline with Growth view across both years ---
template_name = f"Test Growth Template {frappe.generate_hash()[:8]}"
template = frappe.get_doc(
{
"doctype": "Financial Report Template",
"template_name": template_name,
"report_type": "Profit and Loss Statement",
"rows": [
{
"reference_code": "EXP_ADMIN",
"display_name": "Administrative Expenses",
"indentation_level": 0,
"data_source": "Account Data",
"balance_type": "Closing Balance",
"calculation_formula": f'["name", "=", "{expense_account}"]',
},
],
}
)
template.insert()
filters = frappe._dict(
{
"company": company,
"report_template": template_name,
"from_fiscal_year": fy_2024[0],
"to_fiscal_year": fy_2025[0],
"period_start_date": "2024-01-01",
"period_end_date": "2025-12-31",
"filter_based_on": "Date Range",
"periodicity": "Yearly",
"accumulated_values": 0,
"selected_view": "Growth",
}
)
_columns, formatted_data, _msg, _chart = FinancialReportEngine().execute(filters)
expense_row = next(
(row for row in formatted_data if row.get("account_name") == "Administrative Expenses"),
None,
)
self.assertIsNotNone(expense_row, "Administrative Expenses row must appear in growth view")
period_keys = expense_row.get("_segment_info", {}).get("period_keys", [])
self.assertEqual(len(period_keys), 2, "Yearly view must yield exactly two periods")
first_period_key, second_period_key = period_keys
# First column: raw absolute value (FY 2024 expense)
self.assertEqual(
flt(expense_row[first_period_key]),
2000.0,
"First column in growth view must keep raw FY 2024 expense value",
)
# Second column: ((3000 - 2000) / 2000) * 100 = 50.0
self.assertEqual(
flt(expense_row[second_period_key]),
50.0,
"Second column must be % growth FY 2024 → FY 2025",
)
finally:
frappe.db.set_single_value(
"Accounts Settings", "use_legacy_controller_for_pcv", original_pcv_setting or 0
)
if pcv_2025:
pcv_2025.reload()
if pcv_2025.docstatus == 1:
pcv_2025.cancel()
if jv_2025 and jv_2025.docstatus == 1:
jv_2025.cancel()
if pcv_2024:
pcv_2024.reload()
if pcv_2024.docstatus == 1:
pcv_2024.cancel()
if jv_2024 and jv_2024.docstatus == 1:
jv_2024.cancel()
if template and frappe.db.exists("Financial Report Template", template.name):
frappe.delete_doc("Financial Report Template", template.name, force=1)

View File

@@ -2,29 +2,24 @@
# For license information, please see license.txt
import frappe
from frappe.tests import IntegrationTestCase
from frappe.tests.utils import make_test_records
# On IntegrationTestCase, the doctype test records and all
# link-field test record dependencies are recursively loaded
# Use these module variables to add/remove to/from that list
EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
from erpnext.tests.utils import ERPNextTestSuite
class TestFinancialReportTemplate(IntegrationTestCase):
pass
class FinancialReportTemplateTestCase(IntegrationTestCase):
class FinancialReportTemplateTestCase(ERPNextTestSuite):
"""Utility class with common setup and helper methods for all test classes"""
@classmethod
def setUpClass(cls):
def cancel_docs(self, docs):
"""Cancel submitted docs in reverse creation order to avoid dependency issues."""
for doc in reversed(docs):
if doc:
doc.reload()
if doc.docstatus == 1:
doc.cancel()
def setUp(self):
"""Set up test data"""
make_test_records("Company")
make_test_records("Fiscal Year")
cls.create_test_template()
self.create_test_template()
@classmethod
def create_test_template(cls):

View File

@@ -33,6 +33,12 @@ class FiscalYear(Document):
self.validate_dates()
self.validate_overlap()
def on_update(self):
frappe.cache().delete_key("fiscal_years")
def on_trash(self):
frappe.cache().delete_key("fiscal_years")
def validate_dates(self):
self.validate_from_to_dates("year_start_date", "year_end_date")
if self.is_short_year:

View File

@@ -3,13 +3,12 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import now_datetime
IGNORE_TEST_RECORD_DEPENDENCIES = ["Company"]
from erpnext.tests.utils import ERPNextTestSuite
class TestFiscalYear(IntegrationTestCase):
class TestFiscalYear(ERPNextTestSuite):
def test_extra_year(self):
if frappe.db.exists("Fiscal Year", "_Test Fiscal Year 2000"):
frappe.delete_doc("Fiscal Year", "_Test Fiscal Year 2000")

View File

@@ -489,4 +489,5 @@ def rename_temporarily_named_docs(doctype):
for hook in frappe.get_hooks(hook_type):
frappe.call(hook, newname=newname, oldname=oldname)
frappe.db.commit()
if not frappe.in_test:
frappe.db.commit()

View File

@@ -4,13 +4,13 @@ import unittest
import frappe
from frappe.model.naming import parse_naming_series
from frappe.tests import IntegrationTestCase
from erpnext.accounts.doctype.gl_entry.gl_entry import rename_gle_sle_docs
from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry
from erpnext.tests.utils import ERPNextTestSuite
class TestGLEntry(IntegrationTestCase):
class TestGLEntry(ERPNextTestSuite):
def test_round_off_entry(self):
frappe.db.set_value("Company", "_Test Company", "round_off_account", "_Test Write Off - _TC")
frappe.db.set_value("Company", "_Test Company", "round_off_cost_center", "_Test Cost Center - _TC")

View File

@@ -3,16 +3,16 @@
import unittest
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import add_days, flt, nowdate
from erpnext.accounts.doctype.account.test_account import create_account
from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry_against_invoice
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import get_gl_entries
from erpnext.tests.utils import ERPNextTestSuite
class TestInvoiceDiscounting(IntegrationTestCase):
class TestInvoiceDiscounting(ERPNextTestSuite):
def setUp(self):
self.ar_credit = create_account(
account_name="_Test Accounts Receivable Credit",

View File

@@ -47,3 +47,12 @@ frappe.ui.form.on("Item Tax Template", {
});
},
});
frappe.ui.form.on("Item Tax Template Detail", {
not_applicable: function (frm, cdt, cdn) {
let row = locals[cdt][cdn];
if (row.not_applicable) {
frappe.model.set_value(cdt, cdn, "tax_rate", 0);
}
},
});

View File

@@ -27,8 +27,15 @@ class ItemTaxTemplate(Document):
# end: auto-generated types
def validate(self):
self.set_zero_rate_for_not_applicable_tax()
self.validate_tax_accounts()
def set_zero_rate_for_not_applicable_tax(self):
"""Ensure tax_rate is 0 for any row marked as not applicable."""
for row in self.get("taxes"):
if row.not_applicable:
row.tax_rate = 0
def autoname(self):
if self.company and self.title:
abbr = frappe.get_cached_value("Company", self.company, "abbr")

View File

@@ -2,8 +2,8 @@
# See license.txt
import unittest
from frappe.tests import IntegrationTestCase
from erpnext.tests.utils import ERPNextTestSuite
class TestItemTaxTemplate(IntegrationTestCase):
class TestItemTaxTemplate(ERPNextTestSuite):
pass

View File

@@ -1,79 +0,0 @@
[
{
"doctype": "Item Tax Template",
"title": "_Test Account Excise Duty @ 10",
"company": "_Test Company",
"taxes": [
{
"doctype": "Item Tax Template Detail",
"parentfield": "taxes",
"tax_rate": 10,
"tax_type": "_Test Account Excise Duty - _TC"
}
]
},
{
"doctype": "Item Tax Template",
"title": "_Test Account Excise Duty @ 12",
"company": "_Test Company",
"taxes": [
{
"doctype": "Item Tax Template Detail",
"parentfield": "taxes",
"tax_rate": 12,
"tax_type": "_Test Account Excise Duty - _TC"
}
]
},
{
"doctype": "Item Tax Template",
"title": "_Test Account Excise Duty @ 15",
"company": "_Test Company",
"taxes": [
{
"doctype": "Item Tax Template Detail",
"parentfield": "taxes",
"tax_rate": 15,
"tax_type": "_Test Account Excise Duty - _TC"
}
]
},
{
"doctype": "Item Tax Template",
"title": "_Test Account Excise Duty @ 20",
"company": "_Test Company",
"taxes": [
{
"doctype": "Item Tax Template Detail",
"parentfield": "taxes",
"tax_rate": 20,
"tax_type": "_Test Account Excise Duty - _TC"
}
]
},
{
"doctype": "Item Tax Template",
"title": "_Test Item Tax Template 1",
"company": "_Test Company",
"taxes": [
{
"doctype": "Item Tax Template Detail",
"parentfield": "taxes",
"tax_rate": 5,
"tax_type": "_Test Account Excise Duty - _TC"
},
{
"doctype": "Item Tax Template Detail",
"parentfield": "taxes",
"tax_rate": 10,
"tax_type": "_Test Account Education Cess - _TC"
},
{
"doctype": "Item Tax Template Detail",
"parentfield": "taxes",
"tax_rate": 15,
"tax_type": "_Test Account S&H Education Cess - _TC"
}
]
}
]

View File

@@ -6,7 +6,8 @@
"engine": "InnoDB",
"field_order": [
"tax_type",
"tax_rate"
"tax_rate",
"not_applicable"
],
"fields": [
{
@@ -21,20 +22,30 @@
"fieldname": "tax_rate",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Tax Rate"
"label": "Tax Rate",
"read_only_depends_on": "eval:doc.not_applicable"
},
{
"default": "0",
"description": "Check if this tax is not applicable to items (distinct from 0% rate)",
"fieldname": "not_applicable",
"fieldtype": "Check",
"in_list_view": 1,
"label": "Not Applicable"
}
],
"istable": 1,
"links": [],
"modified": "2024-03-27 13:09:55.735360",
"modified": "2025-12-26 17:19:18.791891",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Item Tax Template Detail",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

View File

@@ -14,6 +14,7 @@ class ItemTaxTemplateDetail(Document):
if TYPE_CHECKING:
from frappe.types import DF
not_applicable: DF.Check
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data

View File

@@ -70,6 +70,10 @@ frappe.ui.form.on("Journal Entry", {
},
refresh: function (frm) {
if (frm.doc.reversal_of && (frm.is_new() || frm.doc.docstatus == 0)) {
frm.set_read_only();
}
erpnext.toggle_naming_series();
if (frm.doc.docstatus > 0) {
@@ -303,10 +307,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
}
onload_post_render() {
this.frm.get_field("accounts").grid.set_multiple_add("account");
}
load_defaults() {
//this.frm.show_print_first = true;
if (this.frm.doc.__islocal && this.frm.doc.company) {
@@ -433,15 +433,17 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
accounts_add(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
row.exchange_rate = 1;
$.each(doc.accounts, function (i, d) {
if (d.account && d.party && d.party_type) {
row.account = d.account;
row.party = d.party;
row.party_type = d.party_type;
row.exchange_rate = d.exchange_rate;
}
});
if (!row.exchange_rate) row.exchange_rate = 1;
if (!row.account) {
$.each(doc.accounts, function (i, d) {
if (d.account && d.party && d.party_type) {
row.account = d.account;
row.party = d.party;
row.party_type = d.party_type;
row.exchange_rate = d.exchange_rate;
}
});
}
// set difference
if (doc.difference) {
@@ -652,7 +654,7 @@ $.extend(erpnext.journal_entry, {
reqd: 1,
default: frm.doc.posting_date,
},
{ fieldtype: "Small Text", fieldname: "user_remark", label: __("User Remark") },
{ fieldtype: "Small Text", fieldname: "remark", label: __("Remark") },
{
fieldtype: "Select",
fieldname: "naming_series",
@@ -669,8 +671,14 @@ $.extend(erpnext.journal_entry, {
var values = dialog.get_values();
frm.set_value("posting_date", values.posting_date);
frm.set_value("user_remark", values.user_remark);
frm.set_value("naming_series", values.naming_series);
if (values.remark) {
frm.set_value("custom_remark", 1);
frm.set_value("remark", values.remark);
} else {
frm.set_value("custom_remark", 0);
frm.set_value("remark", "");
}
// clear table is used because there might've been an error while adding child
// and cleanup didn't happen

View File

@@ -10,18 +10,15 @@
"field_order": [
"entry_type_and_date",
"company",
"is_system_generated",
"title",
"voucher_type",
"naming_series",
"process_deferred_accounting",
"reversal_of",
"column_break1",
"from_template",
"naming_series",
"posting_date",
"finance_book",
"multi_currency",
"apply_tds",
"tax_withholding_category",
"is_system_generated",
"amended_from",
"section_break_tcvw",
"for_all_stock_asset_accounts",
"column_break_wpau",
@@ -30,52 +27,61 @@
"get_balance_for_periodic_accounting",
"2_add_edit_gl_entries",
"accounts",
"section_break99",
"cheque_no",
"cheque_date",
"user_remark",
"column_break99",
"section_break_ouaq",
"total_debit",
"column_break_cixu",
"total_credit",
"difference",
"get_balance",
"multi_currency",
"total_amount_currency",
"total_amount",
"total_amount_in_words",
"section_break99",
"cheque_no",
"cheque_date",
"clearance_date",
"column_break_oizh",
"user_remark",
"auto_repeat_section",
"auto_repeat",
"tax_withholding_tab",
"section_tax_withholding_entry",
"tax_withholding_group",
"ignore_tax_withholding_threshold",
"override_tax_withholding_entries",
"tax_withholding_entries",
"more_info_tab",
"reference",
"clearance_date",
"remark",
"inter_company_journal_entry_reference",
"column_break98",
"bill_no",
"bill_date",
"due_date",
"column_break_isfa",
"inter_company_journal_entry_reference",
"process_deferred_accounting",
"reversal_of",
"payment_order",
"stock_entry",
"printing_settings",
"pay_to_recd_from",
"letter_head",
"select_print_heading",
"column_break_35",
"total_amount_currency",
"total_amount",
"total_amount_in_words",
"write_off",
"write_off_based_on",
"get_outstanding_invoices",
"column_break_30",
"write_off_amount",
"printing_settings",
"pay_to_recd_from",
"column_break_35",
"letter_head",
"select_print_heading",
"addtional_info",
"mode_of_payment",
"payment_order",
"party_not_required",
"column_break3",
"is_opening",
"stock_entry",
"subscription_section",
"auto_repeat",
"amended_from"
"finance_book",
"from_template",
"title",
"column_break3",
"custom_remark",
"remark",
"mode_of_payment",
"party_not_required"
],
"fields": [
{
@@ -135,6 +141,7 @@
{
"fieldname": "company",
"fieldtype": "Link",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Company",
"oldfieldname": "company",
@@ -155,6 +162,7 @@
{
"fieldname": "2_add_edit_gl_entries",
"fieldtype": "Section Break",
"hide_border": 1,
"oldfieldtype": "Section Break",
"options": "fa fa-table"
},
@@ -175,7 +183,6 @@
"fieldname": "cheque_no",
"fieldtype": "Data",
"in_global_search": 1,
"in_list_view": 1,
"label": "Reference Number",
"mandatory_depends_on": "eval:doc.voucher_type == \"Bank Entry\"",
"no_copy": 1,
@@ -196,16 +203,13 @@
{
"fieldname": "user_remark",
"fieldtype": "Small Text",
"hidden": 1,
"label": "User Remark",
"no_copy": 1,
"oldfieldname": "user_remark",
"oldfieldtype": "Small Text",
"print_hide": 1
},
{
"fieldname": "column_break99",
"fieldtype": "Column Break"
},
{
"fieldname": "total_debit",
"fieldtype": "Currency",
@@ -313,7 +317,7 @@
"no_copy": 1,
"oldfieldname": "remark",
"oldfieldtype": "Small Text",
"read_only": 1
"read_only_depends_on": "eval: !doc.custom_remark"
},
{
"depends_on": "eval:doc.voucher_type== \"Inter Company Journal Entry\"",
@@ -429,7 +433,7 @@
"collapsible": 1,
"fieldname": "addtional_info",
"fieldtype": "Section Break",
"label": "More Information",
"label": "Additional Info",
"oldfieldtype": "Section Break",
"options": "fa fa-file-text"
},
@@ -473,11 +477,6 @@
"options": "Stock Entry",
"read_only": 1
},
{
"fieldname": "subscription_section",
"fieldtype": "Section Break",
"label": "Subscription Section"
},
{
"allow_on_submit": 1,
"fieldname": "auto_repeat",
@@ -593,12 +592,10 @@
"no_copy": 1
},
{
"collapsible": 1,
"collapsible_depends_on": "eval: doc.apply_tds && doc.docstatus == 0",
"depends_on": "eval: doc.apply_tds",
"fieldname": "section_tax_withholding_entry",
"fieldtype": "Section Break",
"label": "Tax Withholding Entry"
"fieldtype": "Section Break"
},
{
"fieldname": "tax_withholding_group",
@@ -624,6 +621,44 @@
"label": "Tax Withholding Entries",
"options": "Tax Withholding Entry",
"read_only_depends_on": "eval: !doc.override_tax_withholding_entries"
},
{
"fieldname": "more_info_tab",
"fieldtype": "Tab Break",
"label": "More Info"
},
{
"fieldname": "section_break_ouaq",
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_cixu",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_oizh",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_isfa",
"fieldtype": "Column Break"
},
{
"depends_on": "eval: doc.apply_tds",
"fieldname": "tax_withholding_tab",
"fieldtype": "Tab Break",
"label": "Tax Withholding"
},
{
"fieldname": "auto_repeat_section",
"fieldtype": "Section Break",
"label": "Auto Repeat"
},
{
"default": "0",
"fieldname": "custom_remark",
"fieldtype": "Check",
"label": "Custom Remark"
}
],
"icon": "fa fa-file-text",
@@ -638,7 +673,7 @@
"table_fieldname": "payment_entries"
}
],
"modified": "2026-02-03 14:40:39.944524",
"modified": "2026-04-08 14:19:30.870894",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry",

View File

@@ -61,6 +61,7 @@ class JournalEntry(AccountsController):
cheque_no: DF.Data | None
clearance_date: DF.Date | None
company: DF.Link
custom_remark: DF.Check
difference: DF.Currency
due_date: DF.Date | None
finance_book: DF.Link | None
@@ -293,6 +294,8 @@ class JournalEntry(AccountsController):
# References for this Journal are removed on the `on_cancel` event in accounts_controller
super().on_cancel()
from_doc_events = getattr(self, "ignore_linked_doctypes", ())
self.ignore_linked_doctypes = (
"GL Entry",
"Stock Ledger Entry",
@@ -306,6 +309,10 @@ class JournalEntry(AccountsController):
"Advance Payment Ledger Entry",
"Tax Withholding Entry",
)
if from_doc_events and from_doc_events != self.ignore_linked_doctypes:
self.ignore_linked_doctypes = self.ignore_linked_doctypes + from_doc_events
self.make_gl_entries(1)
JournalTaxWithholding(self).on_cancel()
self.unlink_advance_entry_reference()
@@ -347,8 +354,11 @@ class JournalEntry(AccountsController):
frappe.throw(_("Account {0} should be of type Expense").format(d.account))
def validate_stock_accounts(self):
if self.voucher_type == "Periodic Accounting Entry":
# Skip validation for periodic accounting entry
if (
not erpnext.is_perpetual_inventory_enabled(self.company)
or self.voucher_type == "Periodic Accounting Entry"
):
# Skip validation for periodic accounting entry and Perpetual Inventory Disabled Company.
return
stock_accounts = get_stock_accounts(self.company, accounts=self.accounts)
@@ -1017,8 +1027,8 @@ class JournalEntry(AccountsController):
if self.flags.skip_remarks_creation:
return
if self.user_remark:
r.append(_("Note: {0}").format(self.user_remark))
if self.get("custom_remark"):
return
if self.cheque_no:
if self.cheque_date:
@@ -1281,7 +1291,11 @@ class JournalEntry(AccountsController):
self.validate_total_debit_and_credit()
def get_values(self):
cond = f" and outstanding_amount <= {self.write_off_amount}" if flt(self.write_off_amount) > 0 else ""
cond = (
f" and outstanding_amount <= {flt(self.write_off_amount)}"
if flt(self.write_off_amount) > 0
else ""
)
if self.write_off_based_on == "Accounts Receivable":
return frappe.db.sql(
@@ -1532,31 +1546,31 @@ def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
if not frappe.db.has_column("Journal Entry", searchfield):
return []
return frappe.db.sql(
f"""
SELECT jv.name, jv.posting_date, jv.user_remark
FROM `tabJournal Entry` jv, `tabJournal Entry Account` jv_detail
WHERE jv_detail.parent = jv.name
AND jv_detail.account = %(account)s
AND IFNULL(jv_detail.party, '') = %(party)s
AND (
jv_detail.reference_type IS NULL
OR jv_detail.reference_type = ''
)
AND jv.docstatus = 1
AND jv.`{searchfield}` LIKE %(txt)s
ORDER BY jv.name DESC
LIMIT %(limit)s offset %(offset)s
""",
dict(
account=filters.get("account"),
party=cstr(filters.get("party")),
txt=f"%{txt}%",
offset=start,
limit=page_len,
),
JournalEntry = frappe.qb.DocType("Journal Entry")
JournalEntryAccount = frappe.qb.DocType("Journal Entry Account")
query = (
frappe.qb.from_(JournalEntry)
.join(JournalEntryAccount)
.on(JournalEntryAccount.parent == JournalEntry.name)
.select(JournalEntry.name, JournalEntry.posting_date, JournalEntry.remark)
.where(JournalEntryAccount.account == filters.get("account"))
.where(JournalEntryAccount.reference_type.isnull() | (JournalEntryAccount.reference_type == ""))
.where(JournalEntry.docstatus == 1)
.where(JournalEntry[searchfield].like(f"%{txt}%"))
.orderby(JournalEntry.name, order=frappe.qb.desc)
.limit(page_len)
.offset(start)
)
party = filters.get("party")
if party:
query = query.where(JournalEntryAccount.party == party)
else:
query = query.where(JournalEntryAccount.party.isnull() | (JournalEntryAccount.party == ""))
return query.run()
@frappe.whitelist()
def get_outstanding(args):

View File

@@ -1,5 +1,5 @@
frappe.listview_settings["Journal Entry"] = {
add_fields: ["voucher_type", "posting_date", "total_debit", "company", "user_remark"],
add_fields: ["voucher_type", "posting_date", "total_debit", "company", "remark"],
get_indicator: function (doc) {
if (doc.docstatus === 1) {
return [__(doc.voucher_type), "blue", `voucher_type,=,${doc.voucher_type}`];

View File

@@ -2,19 +2,20 @@
# License: GNU General Public License v3. See license.txt
import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import flt, nowdate
from erpnext.accounts.doctype.account.test_account import get_inventory_account
from erpnext.accounts.doctype.journal_entry.journal_entry import StockAccountInvalidTransaction
from erpnext.exceptions import InvalidAccountCurrency
from erpnext.selling.doctype.customer.test_customer import make_customer, set_credit_limit
from erpnext.tests.utils import ERPNextTestSuite
class TestJournalEntry(IntegrationTestCase):
@IntegrationTestCase.change_settings(
"Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1}
)
class TestJournalEntry(ERPNextTestSuite):
def setUp(self):
self.load_test_records("Journal Entry")
@ERPNextTestSuite.change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1})
def test_journal_entry_with_against_jv(self):
jv_invoice = frappe.copy_doc(self.globalTestRecords["Journal Entry"][2])
base_jv = frappe.copy_doc(self.globalTestRecords["Journal Entry"][0])
@@ -149,7 +150,6 @@ class TestJournalEntry(IntegrationTestCase):
if account_bal == stock_bal:
self.assertRaises(StockAccountInvalidTransaction, jv.save)
frappe.db.rollback()
else:
jv.submit()
jv.cancel()
@@ -413,9 +413,9 @@ class TestJournalEntry(IntegrationTestCase):
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
# Configure Repost Accounting Ledger for JVs
settings = frappe.get_doc("Repost Accounting Ledger Settings")
if not [x for x in settings.allowed_types if x.document_type == "Journal Entry"]:
settings.append("allowed_types", {"document_type": "Journal Entry", "allowed": True})
settings = frappe.get_doc("Accounts Settings")
if "Journal Entry" not in [x.document_type for x in settings.repost_allowed_types]:
settings.append("repost_allowed_types", {"document_type": "Journal Entry"})
settings.save()
# Create JV with defaut cost center - _Test Cost Center
@@ -523,7 +523,7 @@ class TestJournalEntry(IntegrationTestCase):
jv = frappe.new_doc("Journal Entry")
jv.posting_date = nowdate()
jv.company = "_Test Company"
jv.user_remark = "test"
jv.remark = "test"
jv.extend(
"accounts",
[
@@ -592,6 +592,14 @@ class TestJournalEntry(IntegrationTestCase):
self.assertEqual(jv.pay_to_recd_from, "_Test Receiver 2")
def test_custom_remark(self):
# When custom_remark is enabled, remark should not be auto-overwritten on save
jv = make_journal_entry("_Test Cash - _TC", "_Test Bank - _TC", 100, save=False)
jv.custom_remark = 1
jv.remark = "My custom remark text"
jv.insert()
self.assertEqual(jv.remark, "My custom remark text")
def test_credit_limit_for_customer(self):
customer = make_customer("_Test New Customer")
set_credit_limit("_Test New Customer", "_Test Company", 50)
@@ -620,7 +628,7 @@ def make_journal_entry(
jv = frappe.new_doc("Journal Entry")
jv.posting_date = posting_date or nowdate()
jv.company = company or "_Test Company"
jv.user_remark = "test"
jv.remark = "test"
jv.multi_currency = 1
jv.set(
"accounts",

Some files were not shown because too many files have changed in this diff Show More