From 4d5c665e222f299e8b3efc428d96256d678b21af Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 28 Apr 2026 21:03:29 +0000 Subject: [PATCH 01/36] chore(release): Bumped to Version 16.16.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # [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](https://github.com/frappe/erpnext/commit/9f04fcc190eac3491d655d101706acbffdbe006c)) * add filter labels and required filters for financial report validation ([e6f0bb6](https://github.com/frappe/erpnext/commit/e6f0bb66e29ee8d9cb8dc7815d005fbe54abe558)) * add party type for dynamic link support ([c6d4802](https://github.com/frappe/erpnext/commit/c6d48028576e726d1e8c1977f06f04ceafaed2a9)) * always exclude pcv entries except for closing account head ([446c111](https://github.com/frappe/erpnext/commit/446c111653e097154529c7dee70a2d2cc461cb6b)) * 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](https://github.com/frappe/erpnext/commit/5de4b013eada0e9a4a14896a00a395a0f122519a)) * correct display depends on condition ([#54556](https://github.com/frappe/erpnext/issues/54556)) ([0df38a8](https://github.com/frappe/erpnext/commit/0df38a841e2353a50c21f7565758477f2c7a3452)) * 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](https://github.com/frappe/erpnext/commit/d9a9a5bcde08ae084c3fe0c1b29d37200e85aad0)) * delivery schedule in the sales order ([386f499](https://github.com/frappe/erpnext/commit/386f49978ef6849bffbef52ed444e46506baca08)) * 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](https://github.com/frappe/erpnext/commit/11117710d3f7cf35d85461bbb214c1ba8730f0d2)) * **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](https://github.com/frappe/erpnext/commit/2a244d162b5915090f1d434f867064458738cf66)), closes [#54488](https://github.com/frappe/erpnext/issues/54488) * ensure fiscal year is checked before validating date filters in financial statements ([fba7871](https://github.com/frappe/erpnext/commit/fba78711cc7b331725103266aee84faf18bc80e3)) * ensure tax withholding entries respect date range of category ([719d982](https://github.com/frappe/erpnext/commit/719d982a07e6888bbf24e9077cff50c0251e7b47)) * filter opening entries in first year in custom financial statement ([6bd6e62](https://github.com/frappe/erpnext/commit/6bd6e62c8c5219b570556243a1d1965d39b432ff)) * 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](https://github.com/frappe/erpnext/commit/8f8bf13b41ee49bbbac688e5e3338defd94009ad)) * hide feature flag controlled fields on install ([45dc2c4](https://github.com/frappe/erpnext/commit/45dc2c40fd7c09813155a4586d7094c567577d2e)) * 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](https://github.com/frappe/erpnext/commit/d56df96f73d0457713bc47a9e927e0d8368f6b93)) * **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](https://github.com/frappe/erpnext/commit/f14751d5382a137902e5a6c66de892f89cf1c94b)) * 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](https://github.com/frappe/erpnext/commit/f7fa394aea779e32f595e1450d22b8a29aea4dab)) * **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](https://github.com/frappe/erpnext/commit/5289aa0ab32640d79c3fd76fca966aa0ee8515fb)) * **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](https://github.com/frappe/erpnext/commit/f3996fb97151549e505c9cb4954bbc0bc8b3394a)) * 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](https://github.com/frappe/erpnext/commit/456e99b3521d16b7c127edff6d1c5cbdc103d865)) * py error on stock ageing report (backport [#54467](https://github.com/frappe/erpnext/issues/54467)) ([#54469](https://github.com/frappe/erpnext/issues/54469)) ([090aab3](https://github.com/frappe/erpnext/commit/090aab33fb7f70731dcc00a531c1672ad696b4f1)) * skip BudgetValidation when cancelling GL entries ([1b14673](https://github.com/frappe/erpnext/commit/1b146738c4024cc1e517811bf7c3e763bda4039a)) * **stock:** add stock entry in batch master connection ([62bbe28](https://github.com/frappe/erpnext/commit/62bbe28a728a5cad956c752b72cdc2363464d4c3)) * **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](https://github.com/frappe/erpnext/commit/cc85370d54c474d98ef592b41faffce2b53cd44e)) * **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](https://github.com/frappe/erpnext/commit/cabea2f2889b8d00a982d4e4d647ef3bebf3e1f9)) * **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](https://github.com/frappe/erpnext/commit/f7b87ed0e341da57f32873073e9f0f20af656c63)) * **stock:** show item code in serial and batch selector dialog ([85d1eb8](https://github.com/frappe/erpnext/commit/85d1eb8379813d2bcdf33a7fdb95d6198209b5fa)) * summing of values could be zero even if values exist ([d51ce66](https://github.com/frappe/erpnext/commit/d51ce66cb2989551d2dfba0e7d07df018b95dd7f)) * update account identification to avoid using name_field in financial statements ([7b60ec8](https://github.com/frappe/erpnext/commit/7b60ec8457fc965ef6371c62aa694b275be27070)) * update fiscal year filter to use mandatory_depends_on instead of reqd ([6570796](https://github.com/frappe/erpnext/commit/6570796fba30acfe0ac610efe6b1163da84c9caf)) * update status of quotation in patch (backport [#54577](https://github.com/frappe/erpnext/issues/54577)) ([#54580](https://github.com/frappe/erpnext/issues/54580)) ([134e4b7](https://github.com/frappe/erpnext/commit/134e4b744632979d3b5d4caa1d0d2a4fc07feb87)) ### Features * add setting to hide Subscription references across doctypes ([#54576](https://github.com/frappe/erpnext/issues/54576)) ([15b6633](https://github.com/frappe/erpnext/commit/15b6633fc3ba07cbaa7d577e06cafff39ba89aca)) * Add XLSX styling support to custom financial report templates ([#52612](https://github.com/frappe/erpnext/issues/52612)) ([055ff56](https://github.com/frappe/erpnext/commit/055ff56ce4c32a731e0708f764bf740aa9602a39)) * 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](https://github.com/frappe/erpnext/commit/df3fbeded2bec0d94cf636ada7b334beb7ea4d43)) * danish_bosnian_address_template (backport [#54093](https://github.com/frappe/erpnext/issues/54093)) ([#54516](https://github.com/frappe/erpnext/issues/54516)) ([5c0d2cb](https://github.com/frappe/erpnext/commit/5c0d2cb47419ce57def83321c39be7dc53b0ca39)) * enhance account category with root type ([#53190](https://github.com/frappe/erpnext/issues/53190)) ([96bab08](https://github.com/frappe/erpnext/commit/96bab08ae0f4fd2cc71d64ba60bb12cc80b56aea)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index be5aa72a516..047eef9bcb4 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.15.1" +__version__ = "16.16.0" def get_default_company(user=None): From 7b494dc9e8e47d288de5427bae25ce8a52c37d96 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 5 May 2026 16:32:20 +0000 Subject: [PATCH 02/36] 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](https://github.com/frappe/erpnext/commit/982810a700756db622b2a77bc85375527181ba85)) * 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](https://github.com/frappe/erpnext/commit/bca893a508d6974208e6cb65930b15940d672b4d)) * 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](https://github.com/frappe/erpnext/commit/a22d773341faffdad2f3389e77e354e9e0a914f4)) * 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](https://github.com/frappe/erpnext/commit/e24ab72c0d8cb568f28226f9490f8537fbefe6d6)) * correct project filter in buying doctypes (backport [#54644](https://github.com/frappe/erpnext/issues/54644)) ([#54652](https://github.com/frappe/erpnext/issues/54652)) ([86cf256](https://github.com/frappe/erpnext/commit/86cf25635888b032fc3ed769c2c2561e3e531c6b)) * 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](https://github.com/frappe/erpnext/commit/38cfeb1bb7115065be4e5defdcc5cbe8c46044d7)) * 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](https://github.com/frappe/erpnext/commit/6dbc17d71abc36e19cb80580f1d4d10719f86389)) * error when creating quotation from CRM (backport [#54722](https://github.com/frappe/erpnext/issues/54722)) ([#54725](https://github.com/frappe/erpnext/issues/54725)) ([2cd4c1a](https://github.com/frappe/erpnext/commit/2cd4c1a052175a062ded46747027726a7b7bdd9f)) * 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](https://github.com/frappe/erpnext/commit/e60490dceb54ab1deedacd15e48e7d40f867a02d)) * 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](https://github.com/frappe/erpnext/commit/0dade2c38c2e8bdf1bd000d97d86a4abab08c2d7)) * 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](https://github.com/frappe/erpnext/commit/126e13be25ef0b016736e85387b83abd02f12a87)) * **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](https://github.com/frappe/erpnext/commit/19a8ebe8a5912e4f351ba117a523aff986d8ee96)) * **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](https://github.com/frappe/erpnext/commit/288cdf3bf0f36e44ccaa06bf11c29dd45b13409e)) * py error on sales forecast doctype (backport [#54641](https://github.com/frappe/erpnext/issues/54641)) ([#54643](https://github.com/frappe/erpnext/issues/54643)) ([7bd360a](https://github.com/frappe/erpnext/commit/7bd360aa297b61549c86531577f1626eb992581a)) * Remove bom stock report link from manufacturing workspace ([0f27881](https://github.com/frappe/erpnext/commit/0f27881fed633e49afd9ea392630d1a8841794f5)) * **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](https://github.com/frappe/erpnext/commit/9db03bc52060c3ed5e0c2fb9730070894078c976)) * 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](https://github.com/frappe/erpnext/commit/bbb4e79d0a75ed8dcecefbf95b275edcbd65a540)) * 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](https://github.com/frappe/erpnext/commit/d6f2ff6b87efd411249a6f5bcd1740d0bc09fe8d)) * show in and out qty in the stock ledger report for stock recos ([d27cf48](https://github.com/frappe/erpnext/commit/d27cf48b199598444877b1d29ab8442a6e908d92)) * skip depreciation rescheduling when asset is fully depreciated on sale ([d3c893d](https://github.com/frappe/erpnext/commit/d3c893d08b801fb2fda5d2e745dc6b1097fe298c)) * skip rescheduling only for asset being disposed ([07a957c](https://github.com/frappe/erpnext/commit/07a957c164e26288cb7cb29b902f81817ec3463d)) * 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](https://github.com/frappe/erpnext/commit/b3001595abb75db85a3e83d7105265f9c10bd644)) ### Features * copy terms attachments to transactions (backport [#53403](https://github.com/frappe/erpnext/issues/53403)) ([#54661](https://github.com/frappe/erpnext/issues/54661)) ([bd932da](https://github.com/frappe/erpnext/commit/bd932da08b6f3d9d6030245b833478570a65aac4)) * **ux:** Naming series dialog ([#54554](https://github.com/frappe/erpnext/issues/54554)) ([48ebb4c](https://github.com/frappe/erpnext/commit/48ebb4ca614c642527e2d34bbf81815abbe19f6a)) ### 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](https://github.com/frappe/erpnext/commit/808214fd9517248c72e6e1d6a113b0eb147e5e42)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 047eef9bcb4..85dbea2cacc 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.16.0" +__version__ = "16.17.0" def get_default_company(user=None): From dc914adb6221d73c5d54cf1c9c9f3aefc86cf5d9 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 12 May 2026 18:49:27 +0000 Subject: [PATCH 03/36] chore(release): Bumped to Version 16.18.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # [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](https://github.com/frappe/erpnext/commit/98de025a09f215c3d9c0d3fe633d03e6de0a095a)) * 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](https://github.com/frappe/erpnext/commit/0db7e1e56b7ac6dfa58711f108a4be1e6ef54b04)) * **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](https://github.com/frappe/erpnext/commit/f36bdaadae92d0bffe870f190efe005c39ac187e)) * decimal issue ([8b9b83a](https://github.com/frappe/erpnext/commit/8b9b83a9df7b67bebd24ba38d89001fe0a4e43c0)) * 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](https://github.com/frappe/erpnext/commit/f24b55633600facf3eba3f76b7cd7c682d323317)) * 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](https://github.com/frappe/erpnext/commit/4fbaea17f847802ab4a2553ad3043ea7c73a39af)) * incorrect serial nos picked during disassemble (backport [#54757](https://github.com/frappe/erpnext/issues/54757)) ([#54760](https://github.com/frappe/erpnext/issues/54760)) ([66ae590](https://github.com/frappe/erpnext/commit/66ae590adc2bd4aa7d0b690bb74deeffb062b157)) * 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](https://github.com/frappe/erpnext/commit/379ebbe8c4c8b6b28ae6242c85e3050820882c65)) * 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](https://github.com/frappe/erpnext/commit/3dbadfadd5e273f11019daacc605acc49a848b71)) * rename supplier wise stock analytics report ([7086db1](https://github.com/frappe/erpnext/commit/7086db1e1cb46f364c14986f1b20413e4962c859)) * **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](https://github.com/frappe/erpnext/commit/cf0d9dfbfddbc9f9192a58759783770210d6ab14)) * **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](https://github.com/frappe/erpnext/commit/338d1904c1c6990a8ad68517cffdef5f4b69fd92)) * **stock:** priorities pick list parent warehouse (backport [#54788](https://github.com/frappe/erpnext/issues/54788)) ([#54793](https://github.com/frappe/erpnext/issues/54793)) ([d3bc629](https://github.com/frappe/erpnext/commit/d3bc629f684525eb51fde92767d7f70d574d6ef3)) * **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](https://github.com/frappe/erpnext/commit/b962a1a0cd9ccd040c81d03f015b4cc71d26b99e)) * validate variant values (backport [#54831](https://github.com/frappe/erpnext/issues/54831)) ([#54839](https://github.com/frappe/erpnext/issues/54839)) ([87b798b](https://github.com/frappe/erpnext/commit/87b798b93639bffbe4509793e139461e8a7a7fa2)) ### Features * partial delivery in dropshipping (backport [#54787](https://github.com/frappe/erpnext/issues/54787)) ([#54800](https://github.com/frappe/erpnext/issues/54800)) ([f64f871](https://github.com/frappe/erpnext/commit/f64f871d451666ab77fe2b65a0ef85a997135282)) * Philippines chart of account (backport [#53918](https://github.com/frappe/erpnext/issues/53918)) ([#54888](https://github.com/frappe/erpnext/issues/54888)) ([8f03108](https://github.com/frappe/erpnext/commit/8f0310859d314324f52d7883be35cff0c7da5d8b)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 85dbea2cacc..15e7db7c638 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.17.0" +__version__ = "16.18.0" def get_default_company(user=None): From cfd384725550193e9a29246dadb3a5b5a7037b41 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 13 May 2026 10:14:46 +0000 Subject: [PATCH 04/36] =?UTF-8?q?Revert=20"fix:=20debit=20credit=20not=20e?= =?UTF-8?q?qual=20in=20purchase=20transactions=20for=20mult=E2=80=A6=20(ba?= =?UTF-8?q?ckport=20#54906)=20(backport=20#54908)=20(#54916)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 75bcea57f4d7600334eec941fd15aa8b17dd6279. * Revert "test: add test case" This reverts commit 1d30a202c329183af7d1523fb49b1f8be2bbc761. * Revert "fix: include rejected qty in tax (purchase receipt)" This reverts commit 8c9a88abbedf6babcfa1d1fea84335768af4067e. (cherry picked from commit cf5e8ce87846ae4557087dc465ee78332f6e97df) (cherry picked from commit 0d07083299e1f882eae583e55527e34a4a20c258) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: Mihir Kandoi --- erpnext/controllers/buying_controller.py | 12 +------- erpnext/controllers/taxes_and_totals.py | 21 ++------------ .../purchase_receipt/purchase_receipt.py | 9 +----- .../purchase_receipt/test_purchase_receipt.py | 29 +------------------ 4 files changed, 5 insertions(+), 66 deletions(-) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 0f74ea12348..47ad8459905 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -461,17 +461,7 @@ class BuyingController(SubcontractingController): get_conversion_factor(item.item_code, item.uom).get("conversion_factor") or 1.0 ) - net_rate = ( - flt( - (item.base_net_amount / item.received_qty) * item.qty, - item.precision("base_net_amount"), - ) - if item.received_qty - and frappe.get_single_value( - "Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice" - ) - else item.base_net_amount - ) + net_rate = item.base_net_amount if item.sales_incoming_rate: # for internal transfer net_rate = item.qty * item.sales_incoming_rate diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 6a0a41b1799..86bb26ac607 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -169,10 +169,6 @@ class calculate_taxes_and_totals: return if not self.discount_amount_applied: - bill_for_rejected_quantity_in_purchase_invoice = frappe.get_single_value( - "Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice" - ) - do_not_round_fields = ["valuation_rate", "incoming_rate"] for item in self.doc.items: @@ -236,13 +232,7 @@ class calculate_taxes_and_totals: elif not item.qty and self.doc.get("is_debit_note"): item.amount = flt(item.rate, item.precision("amount")) else: - qty = ( - (item.qty + item.rejected_qty) - if bill_for_rejected_quantity_in_purchase_invoice - and self.doc.doctype == "Purchase Receipt" - else item.qty - ) - item.amount = flt(item.rate * qty, item.precision("amount")) + item.amount = flt(item.rate * item.qty, item.precision("amount")) item.net_amount = item.amount @@ -402,16 +392,9 @@ class calculate_taxes_and_totals: self.doc.total ) = self.doc.base_total = self.doc.net_total = self.doc.base_net_total = 0.0 - bill_for_rejected_quantity_in_purchase_invoice = frappe.get_single_value( - "Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice" - ) for item in self._items: self.doc.total += item.amount - self.doc.total_qty += ( - (item.qty + item.rejected_qty) - if bill_for_rejected_quantity_in_purchase_invoice and self.doc.doctype == "Purchase Receipt" - else item.qty - ) + self.doc.total_qty += item.qty self.doc.base_total += item.base_amount self.doc.net_total += item.net_amount self.doc.base_net_total += item.base_net_amount diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 770b03596d6..7806a51209b 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -561,14 +561,7 @@ class PurchaseReceipt(BuyingController): else flt(item.net_amount, item.precision("net_amount")) ) - outgoing_amount = ( - flt((item.base_net_amount / item.received_qty) * item.qty, item.precision("base_net_amount")) - if item.received_qty - and frappe.get_single_value( - "Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice" - ) - else item.base_net_amount - ) + outgoing_amount = item.base_net_amount if self.is_internal_transfer() and item.valuation_rate: outgoing_amount = abs(get_stock_value_difference(self.name, item.name, item.from_warehouse)) credit_amount = outgoing_amount diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index 828ad603d8e..6cb75bc5312 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -4610,7 +4610,7 @@ class TestPurchaseReceipt(ERPNextTestSuite): self.assertEqual(srbnb_cost, 1500) - def test_valuation_rate_for_rejected_materials_without_accepted_materials(self): + def test_valuation_rate_for_rejected_materials_withoout_accepted_materials(self): item = make_item("Test Item with Rej Material Valuation WO Accepted", {"is_stock_item": 1}) company = "_Test Company with perpetual inventory" @@ -5423,33 +5423,6 @@ class TestPurchaseReceipt(ERPNextTestSuite): self.assertEqual(row.warehouse, "_Test Warehouse 1 - _TC") self.assertEqual(row.incoming_rate, 100) - def test_bill_for_rejected_quantity_in_purchase_invoice(self): - item_code = make_item("Test Rejected Qty", {"is_stock_item": 1}).name - - with self.change_settings("Buying Settings", {"bill_for_rejected_quantity_in_purchase_invoice": 0}): - pr = make_purchase_receipt( - item_code=item_code, - qty=10, - rejected_qty=2, - rate=10, - warehouse="_Test Warehouse - _TC", - ) - - self.assertEqual(pr.total_qty, 10) - self.assertEqual(pr.total, 100) - - with self.change_settings("Buying Settings", {"bill_for_rejected_quantity_in_purchase_invoice": 1}): - pr = make_purchase_receipt( - item_code=item_code, - qty=10, - rejected_qty=2, - rate=10, - warehouse="_Test Warehouse - _TC", - ) - - self.assertEqual(pr.total_qty, 12) - self.assertEqual(pr.total, 120) - def test_different_exchange_rate_in_pr_and_pi(self): from erpnext.accounts.doctype.account.test_account import create_account From c4b7b158240373566b2bf4325e87f87169c08285 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 13 May 2026 10:16:21 +0000 Subject: [PATCH 05/36] chore(release): Bumped to Version 16.18.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [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](https://github.com/frappe/erpnext/commit/cfd384725550193e9a29246dadb3a5b5a7037b41)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 15e7db7c638..28eaa819026 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.18.0" +__version__ = "16.18.1" def get_default_company(user=None): From ab090295d9aecbb6719db99d4713d850a63961a0 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 13 May 2026 13:16:00 +0530 Subject: [PATCH 06/36] fix: posting date and time (cherry picked from commit fb6c05f186c91b117eb9e783e8df5607dc4f09b3) (cherry picked from commit 1c44c60dbdba6cd4a8d5c03fe231e45af0b1acc1) --- erpnext/stock/serial_batch_bundle.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 4a47144ecf1..8687157699f 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -13,6 +13,7 @@ from erpnext.stock.deprecated_serial_batch import ( DeprecatedBatchNoValuation, DeprecatedSerialNoValuation, ) +from erpnext.stock.utils import get_combine_datetime from erpnext.stock.valuation import round_off_if_near_zero CONSUMED_SERIAL_NO_STOCK_ENTRY_PURPOSES = ( @@ -1069,6 +1070,10 @@ class SerialBatchCreation: self.__dict__.update(item_details) def set_other_details(self): + if not self.get("posting_datetime"): + if self.get("posting_date") and self.get("posting_time"): + self.posting_datetime = get_combine_datetime(self.posting_date, self.posting_time) + if not self.get("posting_datetime"): self.posting_datetime = now() self.__dict__["posting_datetime"] = self.posting_datetime From 927360dd1d30045a40a0b9d86ece5b7d2cf35feb Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Wed, 13 May 2026 14:05:55 +0530 Subject: [PATCH 07/36] chore: fixed test case (cherry picked from commit c740f77a6fe7f53c89034f1b2b35c82c67310d96) (cherry picked from commit f4e66914c6ee9835935b60ee766a1cf936f0b5a2) --- erpnext/stock/serial_batch_bundle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 8687157699f..42e4df2d502 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -13,7 +13,6 @@ from erpnext.stock.deprecated_serial_batch import ( DeprecatedBatchNoValuation, DeprecatedSerialNoValuation, ) -from erpnext.stock.utils import get_combine_datetime from erpnext.stock.valuation import round_off_if_near_zero CONSUMED_SERIAL_NO_STOCK_ENTRY_PURPOSES = ( @@ -1070,6 +1069,7 @@ class SerialBatchCreation: self.__dict__.update(item_details) def set_other_details(self): + from erpnext.stock.utils import get_combine_datetime if not self.get("posting_datetime"): if self.get("posting_date") and self.get("posting_time"): self.posting_datetime = get_combine_datetime(self.posting_date, self.posting_time) From b79ec7cbdd1c915cfd9e0582df034b2bf974ce19 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Wed, 13 May 2026 18:50:09 +0530 Subject: [PATCH 08/36] chore: fix linter issue (cherry picked from commit 3c993377aaa7fb9cf3349565553515d1d7e0b735) (cherry picked from commit 21ada7799cdfff258856384dddfd604db7eab0a6) --- erpnext/stock/serial_batch_bundle.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 42e4df2d502..633867dcc79 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -1070,6 +1070,7 @@ class SerialBatchCreation: def set_other_details(self): from erpnext.stock.utils import get_combine_datetime + if not self.get("posting_datetime"): if self.get("posting_date") and self.get("posting_time"): self.posting_datetime = get_combine_datetime(self.posting_date, self.posting_time) From dd35cd1f8460dc59ed25de3821223b25eaf8ad9a Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Thu, 14 May 2026 05:35:39 +0000 Subject: [PATCH 09/36] 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](https://github.com/frappe/erpnext/commit/ab090295d9aecbb6719db99d4713d850a63961a0)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 28eaa819026..b1789a32503 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.18.1" +__version__ = "16.18.2" def get_default_company(user=None): From 5271773595ece92af52418d81e5bf3b8525a2797 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 09:37:26 +0000 Subject: [PATCH 10/36] 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 78a79120ea99379aab0b64ed46d281ee58abac5f) (cherry picked from commit 3c571a1691707fcad2fb0da595568ed9a4bfaf46) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: Mihir Kandoi --- .../doctype/purchase_order/purchase_order.py | 13 ++++++++++--- .../purchase_order_item.json | 3 +-- .../selling/doctype/sales_order/sales_order.py | 18 ++++++------------ .../doctype/sales_order/test_sales_order.py | 7 ++++++- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 5a4d1db2a6c..ebd7c03bb52 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -491,7 +491,6 @@ class PurchaseOrder(BuyingController): self.update_status_updater_if_from_pp() if self.has_drop_ship_item(): - self.update_delivered_qty_in_sales_order() self.set_received_qty_to_zero_for_drop_ship_items() self.update_receiving_percentage() @@ -623,9 +622,17 @@ class PurchaseOrder(BuyingController): ) ) - item.received_qty += d.get("qty_change") + qty_change = item.received_qty + d.get("qty_change") + item.db_set("received_qty", qty_change, update_modified=True) + self.add_comment( + "Label", + _("updated delivered quantity for item {0} to {1}").format( + frappe.bold(item.item_code), frappe.bold(qty_change) + ), + ) self.update_receiving_percentage() - self.save() + self.set_status(update=True) + self.update_delivered_qty_in_sales_order() def is_against_so(self): return any(d.sales_order for d in self.items if d.sales_order) diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json index 7770b3b572d..daeb262ba7c 100644 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json @@ -622,7 +622,6 @@ "width": "100px" }, { - "allow_on_submit": 1, "depends_on": "received_qty", "fieldname": "received_qty", "fieldtype": "Float", @@ -952,7 +951,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2026-05-08 20:40:10.683023", + "modified": "2026-05-14 12:16:16.192936", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order Item", diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 4b38369d048..74262ab0873 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -684,18 +684,12 @@ class SalesOrder(SellingController): for item in self.items: if item.delivered_by_supplier: - item_delivered_qty = frappe.db.sql( - """select sum(qty) - from `tabPurchase Order Item` poi, `tabPurchase Order` po - where poi.sales_order_item = %s - and poi.item_code = %s - and poi.parent = po.name - and po.docstatus = 1 - and po.status = 'Delivered'""", - (item.name, item.item_code), - ) - - item_delivered_qty = item_delivered_qty[0][0] if item_delivered_qty else 0 + item_delivered_qty = frappe.get_all( + "Purchase Order Item", + {"sales_order_item": item.name, "docstatus": 1}, + [{"SUM": "received_qty", "AS": "received_qty"}], + pluck="received_qty", + )[0] item.db_set("delivered_qty", flt(item_delivered_qty), update_modified=False) delivered_qty += min(item.delivered_qty, item.qty) diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index d74f849facd..c7585df93fd 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -1224,9 +1224,14 @@ class TestSalesOrder(ERPNextTestSuite): self.assertEqual(abs(flt(reserved_qty)), 0) # test per_delivered status - update_status("Delivered", po.name) + self.assertEqual(po.status, "To Receive and Bill") + self.assertEqual(so.status, "To Deliver and Bill") + po.update_dropship_received_qty([{"name": po.items[0].name, "qty_change": 2}]) self.assertEqual(flt(frappe.db.get_value("Sales Order", so.name, "per_delivered"), 2), 100.00) po.load_from_db() + so.reload() + self.assertEqual(po.status, "To Bill") + self.assertEqual(so.status, "To Bill") # test after closing so so.db_set("status", "Closed") From 2807c9f08fff3f161c0a2e10745a26aa6331ffd5 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Thu, 14 May 2026 09:39:02 +0000 Subject: [PATCH 11/36] 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](https://github.com/frappe/erpnext/commit/5271773595ece92af52418d81e5bf3b8525a2797)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index b1789a32503..ad96d28a29a 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.18.2" +__version__ = "16.18.3" def get_default_company(user=None): From 48f59a033f57639d89a93f7371c481f7b1f9492c Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 15 May 2026 10:26:20 +0530 Subject: [PATCH 12/36] refactor: flag to disable opening balance calculation (cherry picked from commit 28a2230d0221088ea424b71e2a783c622fbfc405) --- .../report/general_ledger/general_ledger.js | 6 ++++++ .../report/general_ledger/general_ledger.py | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js index 1f66b2768a6..7ebaf84d9d2 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.js +++ b/erpnext/accounts/report/general_ledger/general_ledger.js @@ -177,10 +177,16 @@ frappe.query_reports["General Ledger"] = { fieldtype: "Check", default: 1, }, + { + fieldname: "disable_opening_balance_calculation", + label: __("Disable Opening Balance Calculation"), + fieldtype: "Check", + }, { fieldname: "show_opening_entries", label: __("Show Opening Entries"), fieldtype: "Check", + depends_on: "eval: !doc.disable_opening_balance_calculation", }, { fieldname: "include_default_book_entries", diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index 06c305563d8..90b89fe8ea8 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -283,7 +283,15 @@ def get_conditions(filters): if filters.get("party"): conditions.append("party in %(party)s") - if not ( + if filters.get("disable_opening_balance_calculation"): + if not ignore_is_opening: + conditions.append("(posting_date >=%(from_date)s or is_opening = 'Yes')") + else: + conditions.append("posting_date >=%(from_date)s") + + # opening balance calculation is done only if filtered on account/party + # so from_date filter is not applied + elif not ( filters.get("account") or filters.get("party") or filters.get("categorize_by") in ["Categorize by Account", "Categorize by Party"] @@ -548,7 +556,11 @@ def get_accountwise_gle(filters, accounting_dimensions, gl_entries, gle_map): gle.remarks = _(gle.remarks) gle.party_type = _(gle.party_type) - if gle.posting_date < from_date or (cstr(gle.is_opening) == "Yes" and not show_opening_entries): + if gle.posting_date < from_date or ( + cstr(gle.is_opening) == "Yes" + and not show_opening_entries + and not filters.disable_opening_balance_calculation + ): if not group_by_voucher_consolidated: update_value_in_dict(gle_map[group_by_value].totals, "opening", gle, True) update_value_in_dict(gle_map[group_by_value].totals, "closing", gle, True) From fdfcbf72bd264a230ffa398a8c3bfdd0432de891 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 20 May 2026 04:10:54 +0000 Subject: [PATCH 13/36] chore(release): Bumped to Version 16.19.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # [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](https://github.com/frappe/erpnext/commit/c4037daca8572a63e1195d223fa8bc0a77dca83a)) * add warehouse vaildation for repack entry (backport [#54866](https://github.com/frappe/erpnext/issues/54866)) ([#54901](https://github.com/frappe/erpnext/issues/54901)) ([596c257](https://github.com/frappe/erpnext/commit/596c2571f6e56ced85da3ad0577137618943e376)) * changes to gl print template ([caa524f](https://github.com/frappe/erpnext/commit/caa524f661cd3c240f20c61b7ea8dfa0f0fca6b2)) * disallow editing on reversal journals ([6a53982](https://github.com/frappe/erpnext/commit/6a53982f4a5d62f2fd936f90561cb8816dfe6061)) * **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](https://github.com/frappe/erpnext/commit/c041cd27b5d6700ba92a1ae02bbb8e3ad52f4c0a)) * 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](https://github.com/frappe/erpnext/commit/f272d32f80a0672199570aafc211d802a2329805)) * improve design and refactor ar print template ([059372a](https://github.com/frappe/erpnext/commit/059372add58c9782b84cd9666738dbdd7dcec8a3)) * improve filter details render logic to avoid showing duplicate information ([040b31d](https://github.com/frappe/erpnext/commit/040b31d3a702396e0ee6ba0563333e3e352f6637)) * incoming rate for legacy serial no (backport [#54962](https://github.com/frappe/erpnext/issues/54962)) ([#54978](https://github.com/frappe/erpnext/issues/54978)) ([6bce78c](https://github.com/frappe/erpnext/commit/6bce78c66dafb881642c36cde73c8d6a2c00db9b)) * minor bug fixes for ar print template ([09b19f7](https://github.com/frappe/erpnext/commit/09b19f7a2ad6d0d6a925536f687bd921e60bfccb)) * minor bugs in print templates ([e1446fc](https://github.com/frappe/erpnext/commit/e1446fc6f455c78ab0a71bcafad906ac23d8e454)) * minor changes in print template ([0ead229](https://github.com/frappe/erpnext/commit/0ead2296e6af30b31764ad67cc3549d4b3f54edb)) * minor changes in print template ([16bc28b](https://github.com/frappe/erpnext/commit/16bc28bd70ef91dc6146552968e494c430ccc2e3)) * minor changes in print templates ([0d50e03](https://github.com/frappe/erpnext/commit/0d50e03595f70534ca53894c03d3fa706cc8065b)) * minor text issues in print ([daaa4ca](https://github.com/frappe/erpnext/commit/daaa4ca0c8b364872a63c4e1695561dc62adf678)) * normalize date comparison to avoid datatype mismatch ([42f6cb4](https://github.com/frappe/erpnext/commit/42f6cb40d17f8a6879b56c61a539a32e6a9f78b2)) * **patch:** drop dead procedures first before other changes ([0df9591](https://github.com/frappe/erpnext/commit/0df959191013f638c2a6b9fa29b067602986c046)) * **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](https://github.com/frappe/erpnext/commit/48b09eb52ebf38e17297707c2bf9ce679fa19e36)) * posting date and time ([1c44c60](https://github.com/frappe/erpnext/commit/1c44c60dbdba6cd4a8d5c03fe231e45af0b1acc1)) * 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](https://github.com/frappe/erpnext/commit/9857cc64d679221e8cf365e19500b31320eeecec)) * remove parent page ([10b4090](https://github.com/frappe/erpnext/commit/10b409005d5ec1e6f6ea917880a627c2cbd897dd)) * remove sql procedure method from AR report ([414319d](https://github.com/frappe/erpnext/commit/414319daebc207021f0ef3bf500ded3ecd99dcc3)) * revamp print formats for accounts receivable summary and accounts payable summary reports ([928fab6](https://github.com/frappe/erpnext/commit/928fab6f7e72dd421c2f6db7af877fb2d7a379b5)) * 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](https://github.com/frappe/erpnext/commit/3c571a1691707fcad2fb0da595568ed9a4bfaf46)) * stock balance showing incorrect value because of incorrect SLE ([0b3344b](https://github.com/frappe/erpnext/commit/0b3344bad9863220bfe57dbaf86f078e33e32e19)) * **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](https://github.com/frappe/erpnext/commit/c4994548c36e865cc1d8d2a9d3986bc2b4ff87e9)) * **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](https://github.com/frappe/erpnext/commit/5e5b5cfa0cb9f11f33a959c0a334240133fed50d)) * **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](https://github.com/frappe/erpnext/commit/88706192d758c328c22d0907e3646e2fe2394209)) * styling in trial_balance.html and print format ([9a18d31](https://github.com/frappe/erpnext/commit/9a18d318d92237a1152e80f1f52e3a8adc756a24)) * toast message for item price insert ([#55009](https://github.com/frappe/erpnext/issues/55009)) ([c967792](https://github.com/frappe/erpnext/commit/c967792ccb7415a84259731c52864109d90dd7bc)) * 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](https://github.com/frappe/erpnext/commit/1941c3b136f3d328ebcbe821fe2507d36e24f25b)) * **UX:** Buying settings form cleanup ([#54731](https://github.com/frappe/erpnext/issues/54731)) ([e7ae296](https://github.com/frappe/erpnext/commit/e7ae29661447f1f58f43b3d44a77f186f096b727)) * **UX:** Item master form cleanup ([#54538](https://github.com/frappe/erpnext/issues/54538)) ([0eb049c](https://github.com/frappe/erpnext/commit/0eb049cd85e5e2f7273c16f295b4d37f15b21e1c)) * 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](https://github.com/frappe/erpnext/commit/4015c2b9a4095f23726e588dd1610be5ee0cc3b9)) * 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](https://github.com/frappe/erpnext/commit/68a5eae3ffa0976bd80f558417f8a0876f028a8e)) ### Features * add print format for accounts payable report ([1c6dc80](https://github.com/frappe/erpnext/commit/1c6dc80b7082fdbd72a91cd23a627e4bad11dbc2)) * introduce print format for Accounts Receivable report ([4e7f2ee](https://github.com/frappe/erpnext/commit/4e7f2eeaa027ca3bf14d1dc77586e0b3d3585547)) * introduce print formats for financial statements ([3283c46](https://github.com/frappe/erpnext/commit/3283c461f1b24cae30713e2d7f22523b587646b4)) * print format for report trial balance ([1d08448](https://github.com/frappe/erpnext/commit/1d08448d1ade313a33514e645d5b6da7dd0d7de8)) ### 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](https://github.com/frappe/erpnext/commit/0d07083299e1f882eae583e55527e34a4a20c258)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index ad96d28a29a..92d697675cc 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.18.3" +__version__ = "16.19.0" def get_default_company(user=None): From fa4aa0c1b627c28b7a07c794893fd825b4916ddb Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 20 May 2026 10:40:15 +0530 Subject: [PATCH 14/36] fix: faster range calculation on process period closing voucher (cherry picked from commit ee33574a6d0a8d6b639a55f85dfc1504c086ff7a) --- .../process_period_closing_voucher.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py index c5435e847e4..1d9bb252ce7 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py @@ -72,8 +72,8 @@ class ProcessPeriodClosingVoucher(Document): pcv = frappe.get_doc("Period Closing Voucher", self.parent_pcv) if pcv.is_first_period_closing_voucher(): gl = qb.DocType("GL Entry") - min = qb.from_(gl).select(Min(gl.posting_date)).where(gl.company.eq(pcv.company)).run()[0][0] - max = qb.from_(gl).select(Max(gl.posting_date)).where(gl.company.eq(pcv.company)).run()[0][0] + min = qb.from_(gl).select(Min(gl.posting_date)).run()[0][0] + max = qb.from_(gl).select(Max(gl.posting_date)).run()[0][0] dates = self.get_dates(get_datetime(min), get_datetime(max)) for x in dates: From ea1d0cc277f056de1e1b4fe8dec453595267876f Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 20 May 2026 11:19:00 +0530 Subject: [PATCH 15/36] refactor: ppcv select with for update and skip locked (cherry picked from commit eba58b28372721e2c8c7563a19e10afa7d8bc5ca) --- .../process_period_closing_voucher.py | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py index 1d9bb252ce7..cf10d3152d5 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py @@ -93,12 +93,16 @@ class ProcessPeriodClosingVoucher(Document): def start_pcv_processing(docname: str): if frappe.db.get_value("Process Period Closing Voucher", docname, "status") in ["Queued", "Running"]: frappe.db.set_value("Process Period Closing Voucher", docname, "status", "Running") - if normal_balances := frappe.db.get_all( - "Process Period Closing Voucher Detail", - filters={"parent": docname, "status": "Queued"}, - fields=["processing_date", "report_type", "parentfield"], - order_by="parentfield, idx, processing_date", - limit=4, + + ppcvd = qb.DocType("Process Period Closing Voucher Detail") + if normal_balances := ( + qb.from_(ppcvd) + .select(ppcvd.processing_date, ppcvd.report_type, ppcvd.parentfield) + .where(ppcvd.parent.eq(docname) & ppcvd.status.eq("Queued")) + .orderby(ppcvd.parentfield, ppcvd.idx, ppcvd.processing_date) + .limit(4) + .for_update(skip_locked=True) + .run(as_dict=True) ): if not is_scheduler_inactive(): for x in normal_balances: @@ -238,12 +242,15 @@ def get_gle_for_closing_account(pcv, dimension_balance, dimensions): @frappe.whitelist() def schedule_next_date(docname: str): - if to_process := frappe.db.get_all( - "Process Period Closing Voucher Detail", - filters={"parent": docname, "status": "Queued"}, - fields=["processing_date", "report_type", "parentfield"], - order_by="parentfield, idx, processing_date", - limit=1, + ppcvd = qb.DocType("Process Period Closing Voucher Detail") + if to_process := ( + qb.from_(ppcvd) + .select(ppcvd.processing_date, ppcvd.report_type, ppcvd.parentfield) + .where(ppcvd.parent.eq(docname) & ppcvd.status.eq("Queued")) + .orderby(ppcvd.parentfield, ppcvd.idx, ppcvd.processing_date) + .limit(1) + .for_update(skip_locked=True) + .run(as_dict=True) ): if not is_scheduler_inactive(): frappe.db.set_value( From 6ef4a2d82cfe3815a8bd491436256df3e4ed79b8 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 20 May 2026 07:25:32 +0000 Subject: [PATCH 16/36] 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](https://github.com/frappe/erpnext/commit/fa4aa0c1b627c28b7a07c794893fd825b4916ddb)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 92d697675cc..7123da699aa 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.19.0" +__version__ = "16.19.1" def get_default_company(user=None): From d215fa76236068c3a902bfb4c2527f32d63c5b08 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 27 May 2026 01:21:08 +0000 Subject: [PATCH 17/36] chore: remove frappe-semgrep-rules submodule (backport #55083) (#55319) Co-authored-by: diptanilsaha --- frappe-semgrep-rules | 1 - 1 file changed, 1 deletion(-) delete mode 160000 frappe-semgrep-rules diff --git a/frappe-semgrep-rules b/frappe-semgrep-rules deleted file mode 160000 index a05bce32ad3..00000000000 --- a/frappe-semgrep-rules +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a05bce32ad3e37cf9a87a6913e9b08e45c8ba8cf From ff46d20b259a2d65a7ded959df9f9a42991a3562 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 27 May 2026 01:22:47 +0000 Subject: [PATCH 18/36] chore(release): Bumped to Version 16.20.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # [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](https://github.com/frappe/erpnext/commit/a1457c759de24ec0a6de925b2402af964a894e25)) * consumed operation cost calculation (backport [#54858](https://github.com/frappe/erpnext/issues/54858)) ([#55133](https://github.com/frappe/erpnext/issues/55133)) ([dfc9144](https://github.com/frappe/erpnext/commit/dfc91441b45fc9ae40ac340087e99c4fc45c2aa6)) * correct description for Is Rate Adjustment Entry (Debit Note) checkbox ([a39733d](https://github.com/frappe/erpnext/commit/a39733ddd0fa6ce40e03ffe0bb91940819eb26c8)) * correct remarks for foreign currency payment entries ([f3f8f32](https://github.com/frappe/erpnext/commit/f3f8f327df96d747fb5b738941fe0f00e7372b17)) * 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](https://github.com/frappe/erpnext/commit/1a75c143087762637189df0b787f32f4a8806f11)) * default use_for_shopping_cart to 0 in set_taxes ([54be4ee](https://github.com/frappe/erpnext/commit/54be4ee275fda435255e3fe9a77042c61a2851b3)) * don't reset net_purchase_amount for Composite Asset if already set ([99642b9](https://github.com/frappe/erpnext/commit/99642b9636bc78af0473a3c15c6355fdcac31b69)) * 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](https://github.com/frappe/erpnext/commit/123b4ad563705a670a12864b9313e0bf2c1485b4)) * **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](https://github.com/frappe/erpnext/commit/4dff5a78205cdf59c60cd2d70b8b2df231a3aeec)) * faster range calculation on process period closing voucher ([e56ee38](https://github.com/frappe/erpnext/commit/e56ee383bcb1c16ca0d4fee1b533fcff3cc75d4d)) * fg valuation rate in repack entry when multiple FGs ([7b6adce](https://github.com/frappe/erpnext/commit/7b6adce89a3c6a6abb6633ee35ffa3a48cccebd0)) * inclusive tax amount not considered while setting LCV from purchase invoice ([bd4c244](https://github.com/frappe/erpnext/commit/bd4c24493ceee8f754b8345ec2ab88a16e6559db)) * 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](https://github.com/frappe/erpnext/commit/17bc2b691f9ba5fb86ec61fa285743f3011ba286)) * invalid filter on item_group (backport [#55186](https://github.com/frappe/erpnext/issues/55186)) ([#55188](https://github.com/frappe/erpnext/issues/55188)) ([ea86347](https://github.com/frappe/erpnext/commit/ea863477a418dfdfc1caefa0436d24e81db71fb3)) * item price with party condition (backport [#55100](https://github.com/frappe/erpnext/issues/55100)) ([#55107](https://github.com/frappe/erpnext/issues/55107)) ([cc438a4](https://github.com/frappe/erpnext/commit/cc438a46007680531e03a9604771c20a269e3abc)) * job card buttons color (backport [#55252](https://github.com/frappe/erpnext/issues/55252)) ([#55261](https://github.com/frappe/erpnext/issues/55261)) ([69c6ed3](https://github.com/frappe/erpnext/commit/69c6ed3cd98a4aa1de5a07d41eb8f33f87841d16)) * **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](https://github.com/frappe/erpnext/commit/36aca51fbb8b8521487e4acbda92155470390776)) * **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](https://github.com/frappe/erpnext/commit/bde7f1660e38e5d48e30090432b60fff9391b065)) * **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](https://github.com/frappe/erpnext/commit/705814f0666bc91b9380b0c7c4ae3c56e15740e3)) * pos profile form cleanup (backport [#52436](https://github.com/frappe/erpnext/issues/52436)) ([#55285](https://github.com/frappe/erpnext/issues/55285)) ([1f14ef2](https://github.com/frappe/erpnext/commit/1f14ef23441fcc7dbd8f13d64d09932fc6a77759)) * prevent AttributeError in batch query filters (backport [#55257](https://github.com/frappe/erpnext/issues/55257)) ([#55279](https://github.com/frappe/erpnext/issues/55279)) ([bfd37dc](https://github.com/frappe/erpnext/commit/bfd37dcc21268d9076915a9acf14a99bf3a4ef8e)) * **project:** update customer and sales order as no copy ([1e61ca1](https://github.com/frappe/erpnext/commit/1e61ca162fb79ba17c17ad6fdb0dc6db7cd2b736)) * removed redundant code ([a7eb3ac](https://github.com/frappe/erpnext/commit/a7eb3acd1aba96016db3a4a0d8c71e6f9d60f0cd)) * **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](https://github.com/frappe/erpnext/commit/cd7e1bbff1d08b2a82249913867078efbc29ef6d)) * 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](https://github.com/frappe/erpnext/commit/bb87ffc90a7593223ba7be6bd5535a88460e4a32)) * single variant creation error ([82b0372](https://github.com/frappe/erpnext/commit/82b0372d5b9d63446e2cf6ecca84a73e32b21415)) * slow query ([66c9170](https://github.com/frappe/erpnext/commit/66c9170465e8d151dd48d26fbdd35f2c6fa28a7d)) * **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](https://github.com/frappe/erpnext/commit/edf6bea2eecd98966793c8788b654d658a4a4e2d)) * **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](https://github.com/frappe/erpnext/commit/9600ecd61c0a217e2ad9407a0320999d47ffe62a)) * **stock:** remove recalculate current qty function (backport [#54774](https://github.com/frappe/erpnext/issues/54774)) ([#55075](https://github.com/frappe/erpnext/issues/55075)) ([56a9b37](https://github.com/frappe/erpnext/commit/56a9b37fac30c6a4ee80f634f8b1a4d4636ee0f3)) * use passed posting date in make_reverse_gl_entries ([3ce9cf2](https://github.com/frappe/erpnext/commit/3ce9cf2bd827e545c1d3827795c5671abcf365ac)) * 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](https://github.com/frappe/erpnext/commit/b11365b8c258e17e487fb65bd97c0a3e1e6a6892)) ### Features * add get_parent_supplier_groups using query builder ([82793cb](https://github.com/frappe/erpnext/commit/82793cbd4d44f04e92ad78ad61a4788716b672b4)) * 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](https://github.com/frappe/erpnext/commit/a618f4cca43e70d43a2b718f4bad16da305b5fce)) * allow creation of any number of variants in multiple item variant creation dialog ([27db98d](https://github.com/frappe/erpnext/commit/27db98d222d4d6852edfa367bfae4507b94589b3)) * pending qty in job card ([b372e6f](https://github.com/frappe/erpnext/commit/b372e6f1183cad21389f58bd3ff877b28ef32302)) ### Performance Improvements * skip delink_original_entry during cancellation when Immutable Ledger is enabled ([#55130](https://github.com/frappe/erpnext/issues/55130)) ([8a4cb28](https://github.com/frappe/erpnext/commit/8a4cb28d9018b5618cef8056000cabfaedba1e75)) * 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](https://github.com/frappe/erpnext/commit/92689e05da14800e735b06ecfdf018e4b14b43e0)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 7123da699aa..48ab218d8c0 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.19.1" +__version__ = "16.20.0" def get_default_company(user=None): From d6b7791f18a4e34938a161b735a92f03c2daebf4 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 29 May 2026 19:17:34 +0530 Subject: [PATCH 19/36] fix: billing address does not belongs to the company error (cherry picked from commit 9df07b367a29eceae700614d5a98485cf48df080) (cherry picked from commit e1f29de078afc0c63e68899f51cc89613e3db90a) --- erpnext/public/js/controllers/buying.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index a82756e9570..aa4f5b70b9e 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -178,14 +178,9 @@ erpnext.buying = { callback: (r) => { if (!r.message) return; - if (!this.frm.doc.billing_address) { - this.frm.set_value("billing_address", r.message.primary_address || ""); - } + this.frm.set_value("billing_address", r.message.primary_address || ""); - if ( - frappe.meta.has_field(this.frm.doc.doctype, "shipping_address") && - !this.frm.doc.shipping_address - ) { + if (frappe.meta.has_field(this.frm.doc.doctype, "shipping_address")) { this.frm.set_value("shipping_address", r.message.shipping_address || ""); } }, From 9af618d6bf1df0f08d292bce6ad38761d01c6a17 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Mon, 1 Jun 2026 06:08:21 +0000 Subject: [PATCH 20/36] 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](https://github.com/frappe/erpnext/commit/d6b7791f18a4e34938a161b735a92f03c2daebf4)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 48ab218d8c0..0d0f4eaa25d 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.20.0" +__version__ = "16.20.1" def get_default_company(user=None): From 5206b279b6f75ff8d62b7348d931bbc4e79b4fd0 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 1 Jun 2026 12:13:49 +0530 Subject: [PATCH 21/36] refactor: only consider non-opening balance for Balance sheet accounts (cherry picked from commit a2b83340461de901f097a99910de8e79052f8b67) --- .../process_period_closing_voucher.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py index 24b9fabd998..522a181ba75 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py @@ -562,6 +562,9 @@ def process_individual_date(docname: str, date, report_type, parentfield): if parentfield == "z_opening_balances": query = query.where(gle.is_opening.eq("Yes")) + else: + # Keep balances aligned with legacy PCV logic (non-opening transactions only) + query = query.where(gle.is_opening.eq("No")) query = query.groupby(gle.account) for dim in dimensions: From de42a9e86ea34b52f988134ff4fdb57a5c5c51c9 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 1 Jun 2026 12:17:44 +0530 Subject: [PATCH 22/36] refactor: tabbed view for process period closing voucher (cherry picked from commit 1960c816194d8f3ce91c1508b2db23430ef481c1) --- .../process_period_closing_voucher.json | 23 +++++++++++++++---- .../process_period_closing_voucher.py | 2 +- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.json b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.json index a06a16f156c..0a30b6564b5 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.json +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.json @@ -1,5 +1,6 @@ { "actions": [], + "allow_bulk_edit": 1, "autoname": "format:Process-PCV-{###}", "creation": "2025-09-25 15:44:03.534699", "doctype": "DocType", @@ -7,11 +8,13 @@ "field_order": [ "parent_pcv", "status", + "amended_from", + "section_normal_balances", "p_l_closing_balance", - "normal_balances", "bs_closing_balance", - "z_opening_balances", - "amended_from" + "normal_balances", + "section_opening_balances", + "z_opening_balances" ], "fields": [ { @@ -64,17 +67,27 @@ "fieldname": "bs_closing_balance", "fieldtype": "JSON", "label": "Balance Sheet Closing Balance" + }, + { + "fieldname": "section_normal_balances", + "fieldtype": "Tab Break", + "label": "Normal Balances" + }, + { + "fieldname": "section_opening_balances", + "fieldtype": "Tab Break", + "label": "Opening Balances" } ], "grid_page_length": 50, "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2025-11-05 11:40:24.996403", + "modified": "2026-06-01 12:16:37.374412", "modified_by": "Administrator", "module": "Accounts", "name": "Process Period Closing Voucher", - "naming_rule": "Expression", + "naming_rule": "Expression (old style)", "owner": "Administrator", "permissions": [ { diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py index 522a181ba75..2d8ad237c64 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py @@ -36,8 +36,8 @@ class ProcessPeriodClosingVoucher(Document): parent_pcv: DF.Link status: DF.Literal["Queued", "Running", "Paused", "Completed", "Cancelled"] z_opening_balances: DF.Table[ProcessPeriodClosingVoucherDetail] - # end: auto-generated types + def on_discard(self): self.db_set("status", "Cancelled") From e955b4a3b90139187c5894c42af7fb4b5f9cf271 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 1 Jun 2026 12:51:04 +0530 Subject: [PATCH 23/36] refactor: color coded status in list view (cherry picked from commit cfeffbb3543ae05dd4fcd8f644c63e7a33144b72) --- .../process_period_closing_voucher_list.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher_list.js diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher_list.js b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher_list.js new file mode 100644 index 00000000000..4b117b8fbcf --- /dev/null +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher_list.js @@ -0,0 +1,17 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// License: GNU General Public License v3. See license.txt + +// render +frappe.listview_settings["Process Period Closing Voucher"] = { + add_fields: ["status"], + get_indicator: function (doc) { + const status_colors = { + Queued: "blue", + Running: "orange", + Paused: "gray", + Completed: "green", + Cancelled: "red", + }; + return [__(doc.status), status_colors[doc.status], "status,=," + doc.status]; + }, +}; From ce97a74c5fbfa0e06ee3e52e99e2c54333088cb2 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 1 Jun 2026 14:26:02 +0530 Subject: [PATCH 24/36] test: prevent double counting of opening balances (cherry picked from commit 7f2af123ee05334f48821dd591b688dba8194969) --- .../test_process_period_closing_voucher.py | 171 +++++++++++++++++- 1 file changed, 170 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/test_process_period_closing_voucher.py b/erpnext/accounts/doctype/process_period_closing_voucher/test_process_period_closing_voucher.py index e695b11bcb5..f34c1dbedfe 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/test_process_period_closing_voucher.py +++ b/erpnext/accounts/doctype/process_period_closing_voucher/test_process_period_closing_voucher.py @@ -1,4 +1,173 @@ # Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and Contributors # See license.txt -# import frappe +import frappe +from frappe.utils import today + +from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry +from erpnext.accounts.doctype.process_period_closing_voucher.process_period_closing_voucher import ( + process_individual_date, +) +from erpnext.accounts.utils import get_fiscal_year +from erpnext.tests.utils import ERPNextTestSuite + + +class TestProcessPeriodClosingVoucher(ERPNextTestSuite): + def setUp(self): + frappe.db.set_single_value("Accounts Settings", "use_legacy_controller_for_pcv", 0) + self.company = "_Test Company" + + def make_period_closing_voucher(self, posting_date, submit=True): + fy = get_fiscal_year(posting_date, company="_Test Company") + pcv = frappe.get_doc( + { + "doctype": "Period Closing Voucher", + "transaction_date": posting_date or today(), + "period_start_date": fy[1], + "period_end_date": fy[2], + "company": self.company, + "fiscal_year": fy[0], + "closing_account_head": "Retained Earnings - _TC", + "remarks": "closing", + } + ) + pcv.insert() + if submit: + pcv.submit() + + return pcv + + def make_process_pcv(self): + self.pcv = self.make_period_closing_voucher(posting_date=today(), submit=False) + ppcv = frappe.get_doc( + { + "doctype": "Process Period Closing Voucher", + "parent_pcv": self.pcv.name, + } + ) + ppcv.save() + return ppcv + + def set_processing_date_status(self, date, ppcv, rpt_type, parentfield, status): + frappe.db.set_value( + "Process Period Closing Voucher Detail", + {"processing_date": date, "parent": ppcv, "report_type": rpt_type, "parentfield": parentfield}, + "status", + status, + ) + + def get_processing_date_closing_balance(self, date, ppcv, rpt_type, parentfield): + return frappe.db.get_value( + "Process Period Closing Voucher Detail", + {"processing_date": date, "parent": ppcv, "report_type": rpt_type, "parentfield": parentfield}, + "closing_balance", + ) + + def test_opening_balance_double_counting(self): + ppcv = self.make_process_pcv() + self.assertEqual(self.pcv.is_first_period_closing_voucher(), True) + opening_jv = make_journal_entry( + posting_date=today(), + amount=10, + account1="Cash - _TC", + account2="Debtors - _TC", + company=self.company, + save=False, + ) + opening_jv.accounts[1].party_type = "Customer" + opening_jv.accounts[1].party = "_Test Customer" + opening_jv.is_opening = "Yes" + opening_jv.save() + opening_jv.submit() + + jv = make_journal_entry( + posting_date=today(), + amount=120, + account1="Debtors - _TC", + account2="Sales - _TC", + company=self.company, + save=False, + ) + jv.accounts[0].party_type = "Customer" + jv.accounts[0].party = "_Test Customer" + jv.save() + jv.submit() + + # P&L balance + parentfield = "normal_balances" + rpt_type = "Profit and Loss" + # status has to be set to 'Running' for logic to run + self.set_processing_date_status(today(), ppcv.name, rpt_type, parentfield, "Running") + process_individual_date(ppcv.name, today(), rpt_type, parentfield) + bal = frappe.parse_json( + self.get_processing_date_closing_balance(today(), ppcv.name, rpt_type, parentfield) + ) + self.assertEqual(len(bal), 1) + expected_pl = { + "account": "Sales - _TC", + "cost_center": "_Test Cost Center - _TC", + "debit": 0.0, + "credit": 120.0, + "debit_in_account_currency": 0.0, + "credit_in_account_currency": 120.0, + } + for k in expected_pl.keys(): + with self.subTest(k): + self.assertEqual(expected_pl[k], bal[0][k]) + + # Balance sheet balance + rpt_type = "Balance Sheet" + self.set_processing_date_status(today(), ppcv.name, rpt_type, parentfield, "Running") + process_individual_date(ppcv.name, today(), rpt_type, parentfield) + bal = frappe.parse_json( + self.get_processing_date_closing_balance(today(), ppcv.name, rpt_type, parentfield) + ) + self.assertEqual(len(bal), 1) + expected_bs = { + "account": "Debtors - _TC", + "cost_center": "_Test Cost Center - _TC", + "debit": 120.0, + "credit": 0.0, + "debit_in_account_currency": 120.0, + "credit_in_account_currency": 0.0, + } + for k in expected_bs.keys(): + with self.subTest(k): + self.assertEqual(expected_bs[k], bal[0][k]) + + # Opening balance + parentfield = "z_opening_balances" + rpt_type = "Balance Sheet" + self.set_processing_date_status(today(), ppcv.name, rpt_type, parentfield, "Running") + process_individual_date(ppcv.name, today(), rpt_type, parentfield) + bal = frappe.parse_json( + self.get_processing_date_closing_balance(today(), ppcv.name, rpt_type, parentfield) + ) + self.assertEqual(len(bal), 2) + opening_cash = next(x for x in bal if x["account"] == "Cash - _TC") + expected_opening_cash = { + "account": "Cash - _TC", + "cost_center": "_Test Cost Center - _TC", + "debit": 10.0, + "credit": 0.0, + "debit_in_account_currency": 10.0, + "credit_in_account_currency": 0.0, + "account_currency": "INR", + } + for k in expected_opening_cash.keys(): + with self.subTest(k): + self.assertEqual(expected_opening_cash[k], opening_cash[k]) + + opening_debtors = next(x for x in bal if x["account"] == "Debtors - _TC") + expected_opening_debtors = { + "account": "Debtors - _TC", + "cost_center": "_Test Cost Center - _TC", + "debit": 0.0, + "credit": 10.0, + "debit_in_account_currency": 0.0, + "credit_in_account_currency": 10.0, + "account_currency": "INR", + } + for k in expected_opening_debtors.keys(): + with self.subTest(k): + self.assertEqual(expected_opening_debtors[k], opening_debtors[k]) From ecb572de92f775c0e10a3ec223f08cba3c352944 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 2 Jun 2026 16:55:08 +0000 Subject: [PATCH 25/36] chore(release): Bumped to Version 16.21.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # [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](https://github.com/frappe/erpnext/commit/e3f03a21c3b60f724c2fbf6f559dae1e90f80f76)) * billing address does not belongs to the company error ([e1f29de](https://github.com/frappe/erpnext/commit/e1f29de078afc0c63e68899f51cc89613e3db90a)) * **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](https://github.com/frappe/erpnext/commit/aa5dfde23b6daab1bf10b3d9b7407eca38b6e8c5)) * changes as per review ([8b1d981](https://github.com/frappe/erpnext/commit/8b1d9817a669dd7472cb0988defeeae43eb21bed)) * check perm for account (backport [#55479](https://github.com/frappe/erpnext/issues/55479)) ([#55483](https://github.com/frappe/erpnext/issues/55483)) ([0c946f2](https://github.com/frappe/erpnext/commit/0c946f2420ee6545e36802f3f4888b39c73f54a8)) * **custom_financial_template:** sum account closing balances across dimensions ([3359e20](https://github.com/frappe/erpnext/commit/3359e20d06333eb41d9e3f2f559411c9e841ac90)) * import DateTimeLikeObject ([d82e03e](https://github.com/frappe/erpnext/commit/d82e03edb65043e4d866bd1a00d949f313fe8f3e)) * **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](https://github.com/frappe/erpnext/commit/7c5d617049bbeb63e21c4d046bf81064769598a0)) * item master list view UI cleanup ([2d554c0](https://github.com/frappe/erpnext/commit/2d554c05d6047806cf7f082a1cf1e9ed1fcd9641)) * **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](https://github.com/frappe/erpnext/commit/fe585dc225d65c191dfab16b7f9e0341983a1384)) * Make Distributed Discount Amount field read only ([29441b7](https://github.com/frappe/erpnext/commit/29441b7249bb710942b90c084296e4e69a6f5f2d)) * **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](https://github.com/frappe/erpnext/commit/ae92a829300bf11cdf471d9e51dda1704f667746)) * material transfer in transit issue ([356bb78](https://github.com/frappe/erpnext/commit/356bb7878fc1142b58c698d1cf5665dcfc4b0080)) * merge conflicts ([b74e365](https://github.com/frappe/erpnext/commit/b74e3654218fca646c73f31063aa4d1efebfdf1f)) * 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](https://github.com/frappe/erpnext/commit/933ac0108c7ff53018605cc582df17cf3036e7c1)) * over order allowance setting fix ([41b2de3](https://github.com/frappe/erpnext/commit/41b2de35a9ef8dd1b8357bac0a83631bd04e7378)) * 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](https://github.com/frappe/erpnext/commit/fc842fb45f0eb8a938e7ac4be58d682b221c3f70)) * **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](https://github.com/frappe/erpnext/commit/224426e06b029bcef7186ff54013ef71dd260737)) * **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](https://github.com/frappe/erpnext/commit/5393c936751ceeebe203b887ee07ebd2f326e7ef)) * **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](https://github.com/frappe/erpnext/commit/ef2700bec66653841534bb2ff7afd60189de2eb4)) * **ppr:** make default_advance_account optional ([7a7cc31](https://github.com/frappe/erpnext/commit/7a7cc315239a9f4c566e8a91a7ba35f2cbfd84ec)) * **quotation:** made customer contact column visible (backport [#55433](https://github.com/frappe/erpnext/issues/55433)) ([#55435](https://github.com/frappe/erpnext/issues/55435)) ([2feb8eb](https://github.com/frappe/erpnext/commit/2feb8eb3705ebb75b5410a71ed8dcab2ae7dfb4a)) * **regional:** Japanese CT Rate (backport [#54998](https://github.com/frappe/erpnext/issues/54998)) ([#55438](https://github.com/frappe/erpnext/issues/55438)) ([7426aaf](https://github.com/frappe/erpnext/commit/7426aaf1e2f995f03607a48ac4ba6db0d4c22ec4)) * resolve conflict ([abe19e1](https://github.com/frappe/erpnext/commit/abe19e1212bdd35c7bcfc339b973db9bfc12c955)) * **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](https://github.com/frappe/erpnext/commit/198970cdee58bb506afc2b2a9030e8354791fe61)) * set a fallback value if no fiscal year set ([1521410](https://github.com/frappe/erpnext/commit/15214101253b252b8999230d505d77da3b12b6c9)) * stock reco for legacy serial nos ([67c922c](https://github.com/frappe/erpnext/commit/67c922cdf3374f0bb28269f3249e09f3bd00d446)) * **stock:** add warning message to notify the user to configure the inspection ([1679680](https://github.com/frappe/erpnext/commit/1679680d8e2b62a65e5475cae99ee5329b1ce4d5)) * **stock:** allow to create quality inspection after purchase/delivery ([51a140a](https://github.com/frappe/erpnext/commit/51a140a2bd34f0b0eb656e5867c8e132a9492ee0)) * **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](https://github.com/frappe/erpnext/commit/277a0723ef39433b5aa22ba210e0ceee9a30a4d6)) * **stock:** get_actual_qty during cancellations (backport [#55388](https://github.com/frappe/erpnext/issues/55388)) ([#55392](https://github.com/frappe/erpnext/issues/55392)) ([faa1573](https://github.com/frappe/erpnext/commit/faa15731cb403455a5c10b7cdd73504bd8e5e847)) * **tds:** treat NULL and empty-string tax_withholding_group as equivalent ([82e12d2](https://github.com/frappe/erpnext/commit/82e12d2d5219f0a40a42555145f7fb4d4cfa0de8)) * unable to submit subcontracted job card (backport [#55537](https://github.com/frappe/erpnext/issues/55537)) ([#55540](https://github.com/frappe/erpnext/issues/55540)) ([ceb1042](https://github.com/frappe/erpnext/commit/ceb10422ae94ce0b794e522053d7d15ae58fab8b)) * update default_advance_account type ([0bbc493](https://github.com/frappe/erpnext/commit/0bbc493213f1c34ff7308d9658ff4fd64795636f)) * use fiscal year instead of calendar year in accounting dashboard number cards ([81d10d3](https://github.com/frappe/erpnext/commit/81d10d32f2d5e345b9ca0b04df36d1c3f9ac057a)) * use get_query instead of get_all for data fetching ([7cbef15](https://github.com/frappe/erpnext/commit/7cbef15596669b4642e69b6edebed49df7876e0b)) * **UX:** Move title field to More Info ([20592fc](https://github.com/frappe/erpnext/commit/20592fc25d351996a39c93363ba358f06376753d)) ### Features * build and upload assets to GitHub Releases ([4c05ebc](https://github.com/frappe/erpnext/commit/4c05ebc21ec0188bffbf50069e8bfeee9c8871eb)) * over order allowance setting ([08eaaa5](https://github.com/frappe/erpnext/commit/08eaaa5b833614e4898738db25b8013a5664d049)) * **payment-entry:** warn user before cancelling reconciled payment entry ([61d6d2f](https://github.com/frappe/erpnext/commit/61d6d2f344de72fda4fcc3027914bead647c1c9c)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 0d0f4eaa25d..8f8bfe5e179 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.20.1" +__version__ = "16.21.0" def get_default_company(user=None): From 656d1bd6e3d428b246e6d698dadd23b57c426b52 Mon Sep 17 00:00:00 2001 From: nishkagosalia Date: Wed, 3 Jun 2026 14:51:27 +0530 Subject: [PATCH 26/36] fix: item report view (cherry picked from commit bca917380d318aa8dc4ea30dbd8e7f01100830b1) (cherry picked from commit 7dfae5104476021957c4be74b512ed4d8a8f0657) --- erpnext/stock/doctype/item/item_list.js | 28 +++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/erpnext/stock/doctype/item/item_list.js b/erpnext/stock/doctype/item/item_list.js index 34e0fae07d0..05d0151a932 100644 --- a/erpnext/stock/doctype/item/item_list.js +++ b/erpnext/stock/doctype/item/item_list.js @@ -33,19 +33,21 @@ frappe.listview_settings["Item"] = { }, onload: function (listview) { - listview.columns = listview.columns.map((col) => { - if (!col.df) return col; - const renames = { - is_fixed_asset: __("Item Type"), - is_sales_item: __("Purpose"), - stock_uom: __("UOM"), - }; - if (col.df.fieldname in renames) { - return { ...col, df: { ...col.df, label: renames[col.df.fieldname] } }; - } - return col; - }); - listview.render_header(true); + if (listview.view === "List") { + listview.columns = listview.columns.map((col) => { + if (!col.df) return col; + const renames = { + is_fixed_asset: __("Item Type"), + is_sales_item: __("Purpose"), + stock_uom: __("UOM"), + }; + if (col.df.fieldname in renames) { + return { ...col, df: { ...col.df, label: renames[col.df.fieldname] } }; + } + return col; + }); + listview.render_header(true); + } }, get_indicator: function (doc) { From 6bcab7cfc8df98660a6b61422bc8765cf58552f1 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 3 Jun 2026 09:43:23 +0000 Subject: [PATCH 27/36] 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](https://github.com/frappe/erpnext/commit/656d1bd6e3d428b246e6d698dadd23b57c426b52)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 8f8bfe5e179..43c9fdb8cc3 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.21.0" +__version__ = "16.21.1" def get_default_company(user=None): From 054b20a2ae1bdea44694cca72d17412945171cab Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 10 Jun 2026 00:25:19 +0000 Subject: [PATCH 28/36] chore(release): Bumped to Version 16.22.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # [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](https://github.com/frappe/erpnext/commit/0984c865834d89cadafd81f9c71eca7a8eaa2be2)) * Add authorization checks on internal functions (backport [#55709](https://github.com/frappe/erpnext/issues/55709)) ([#55726](https://github.com/frappe/erpnext/issues/55726)) ([2ae6451](https://github.com/frappe/erpnext/commit/2ae6451f10926bd12b6ce6c7dc40f08da83f2460)) * add company filter to Budget Against dimension options ([bfc6f44](https://github.com/frappe/erpnext/commit/bfc6f44fb009b1ca0dd504078a82faebc7f18db0)) * 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](https://github.com/frappe/erpnext/commit/5d7e69d8cf44165e3a6145d1be1a1b28cd676f1e)) * Add likely missing escapes (backport [#55574](https://github.com/frappe/erpnext/issues/55574)) ([#55581](https://github.com/frappe/erpnext/issues/55581)) ([6a503f8](https://github.com/frappe/erpnext/commit/6a503f834c9fb6c2112eb725ab881578bc6f7b7e)) * aggregate child cost center data in Budget Variance Report ([4f2611c](https://github.com/frappe/erpnext/commit/4f2611cbe8c1b6954ebc75dd729ebbd5d5c76894)) * allow specific methods to run ([c9a5b00](https://github.com/frappe/erpnext/commit/c9a5b0026e46a44355a961cfd3d7a467bf05fc55)) * 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](https://github.com/frappe/erpnext/commit/4471666c8c82c4ad58a2977c98ff15004fd2ec31)) * **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](https://github.com/frappe/erpnext/commit/38dd2982f3beaac841fdaca4b544b77efc89dbc3)) * 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](https://github.com/frappe/erpnext/commit/ecd3a199129ad2da80200b86697e1b194f3234b3)) * do not allow to make changes in SABB after submit ([a03e3bf](https://github.com/frappe/erpnext/commit/a03e3bfe9f2da4ddef84c8b9479acba015eada54)) * don't allow to submit job card with hold status ([b4c850d](https://github.com/frappe/erpnext/commit/b4c850da1ccff0a9c431877daea0b601cd467f62)) * drop ignore_permissions handling from add_ac ([c0cf9aa](https://github.com/frappe/erpnext/commit/c0cf9aa1a7f95ee22b99ea1ca2a2cb09b314e67f)) * 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](https://github.com/frappe/erpnext/commit/808e51db1956f3289decc6d062266c14cbabbefa)) * handle multi-select stock ageing filters ([#55775](https://github.com/frappe/erpnext/issues/55775)) ([e48ffe6](https://github.com/frappe/erpnext/commit/e48ffe6ef075054018763d3f80a8fcc04e4feac1)) * handle separator rows in financial statement formatter ([d8afc00](https://github.com/frappe/erpnext/commit/d8afc00ab5b30160e517cbde2401dbd4063f428c)) * include CRM Deal in `quotation to` filters ([f7e6542](https://github.com/frappe/erpnext/commit/f7e6542bcd878962c322c89603fd7d43ce305123)) * item report view ([7dfae51](https://github.com/frappe/erpnext/commit/7dfae5104476021957c4be74b512ed4d8a8f0657)) * **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](https://github.com/frappe/erpnext/commit/fffba848687efd117aa031bee952cce789d1a8da)) * linter issue ([dd83705](https://github.com/frappe/erpnext/commit/dd837052ef696657025a7911275d33c483cd6e97)) * minor fixes in report print formats ([#55151](https://github.com/frappe/erpnext/issues/55151)) ([80f7aff](https://github.com/frappe/erpnext/commit/80f7aff3f94b1cbf69f1b85a145c8f4096474122)) * move Company filter at the start ([3fb6437](https://github.com/frappe/erpnext/commit/3fb6437d2613a90275fe5b73092846f2f00c1b2c)) * naming series issue ([6eecf07](https://github.com/frappe/erpnext/commit/6eecf0701e1db119cf3ecaa43d3e6233068743a1)) * 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](https://github.com/frappe/erpnext/commit/37b61f06aedf53f7ed00d0e3d41e9b2a19c33b8c)) * 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](https://github.com/frappe/erpnext/commit/7904385b90f668e0f80dfa0afe56aa7713b282f3)) * 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](https://github.com/frappe/erpnext/commit/9eb0e3c82e73b0191fe83fc1ba6f1aabb4d77b8c)) * 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](https://github.com/frappe/erpnext/commit/84d205f553083221bd5e841e191a308ca15a76a7)) * **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](https://github.com/frappe/erpnext/commit/e15879acd118ccd343e31ad3b5a6279e514c82c2)) * **profit-and-loss-statement-report:** margin calculation the report showing null% for empty cell ([04fe76b](https://github.com/frappe/erpnext/commit/04fe76bf832a4217dc408da762a6aee9a9fcc4d4)) * **profit-and-loss-statement:** margin calculation the report showing null% for empty cell ([b3d3f13](https://github.com/frappe/erpnext/commit/b3d3f13fc5c74804c2c7d53d8b37a800c533d34b)) * **profit-loss-report:** handle zero base values and prevent null% display ([90ac065](https://github.com/frappe/erpnext/commit/90ac065930ea0b4d432be53e6fef4798314ae96c)) * 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](https://github.com/frappe/erpnext/commit/497c3a5e83b523983517972ef227c14a35304c7e)) * restrict already invoiced qty in intercompany purchase invoice ([#55768](https://github.com/frappe/erpnext/issues/55768)) ([e90a6ec](https://github.com/frappe/erpnext/commit/e90a6ecf1cf7b11dd292a88800100584de592f0f)) * **selling:** consider delivered qty (backport [#55597](https://github.com/frappe/erpnext/issues/55597)) ([#55607](https://github.com/frappe/erpnext/issues/55607)) ([142ab3c](https://github.com/frappe/erpnext/commit/142ab3ce2a207e3a0671947b68d007b51be7cc60)) * simplify New Zealand sales accounts ([93de14c](https://github.com/frappe/erpnext/commit/93de14c421b39798f8b56827c397f97d1100bb5e)) * skip empty spacer rows in compute_growth_view_data (P&L growth view) ([18afcf0](https://github.com/frappe/erpnext/commit/18afcf0c01f8a849a0419506b45c42fb5f1bace1)) * spelling of Payment Reconciliation in sidebar (backport [#55599](https://github.com/frappe/erpnext/issues/55599)) ([#55602](https://github.com/frappe/erpnext/issues/55602)) ([40cf77e](https://github.com/frappe/erpnext/commit/40cf77e7f0ef5b0751b7db030b385246a42c2aa0)) * sql injection ([02a29a8](https://github.com/frappe/erpnext/commit/02a29a85a792047373a631f71fb7f1e4d4e28258)) * Stock Reservation blocks Subcontracting operation within the same Work Order ([1c0dace](https://github.com/frappe/erpnext/commit/1c0dace3d670c8cbec825d5c3eb9d7e184a1414a)) * **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](https://github.com/frappe/erpnext/commit/7de77a891645c575ab781d003044ff3c18efb3d0)) * **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](https://github.com/frappe/erpnext/commit/c6560be58dae7f6c7fc977d66164d8c03d1abe1d)) * **stock:** set stock received but not billed account for purchase ([#55149](https://github.com/frappe/erpnext/issues/55149)) ([90667b2](https://github.com/frappe/erpnext/commit/90667b2de229ef15e3c6c4269ac60b07fd3c518a)) * **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](https://github.com/frappe/erpnext/commit/0f069e13da321a53581bca8e23f9a50758ada306)) * **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](https://github.com/frappe/erpnext/commit/dee7bd8d64d35e1def1f90c6b216b8bc2f1c30b9)) * **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](https://github.com/frappe/erpnext/commit/9a6fae9fdd6bb90524e70b859f85a15906c39cf5)) * update add_total_row_account to control blank row addition ([e8a6933](https://github.com/frappe/erpnext/commit/e8a6933ff344cf819300e1a9713f9534132cbbcd)) * update formatter to handle blank rows in financial statements ([f657503](https://github.com/frappe/erpnext/commit/f657503ea3c20d0ed188bc102e7267010ca44214)) * update items respects workflow "Only Allow Edit For" role ([#55667](https://github.com/frappe/erpnext/issues/55667)) ([76b9b6a](https://github.com/frappe/erpnext/commit/76b9b6a34ef960085849a4d22ec8a6274d62590a)) * use new_doc with field allowlist in CRM integration endpoints ([d941ccf](https://github.com/frappe/erpnext/commit/d941ccfe3c8fbdb98c5a069c943de675c7ee133d)) * **UX:** Accounts settings cleanup (backport [#55470](https://github.com/frappe/erpnext/issues/55470)) ([#55603](https://github.com/frappe/erpnext/issues/55603)) ([3917415](https://github.com/frappe/erpnext/commit/391741536849f37f8fb77ae39daad9cb5c3fe26e)) * **UX:** stock settings form cleanup ([f6f542f](https://github.com/frappe/erpnext/commit/f6f542fadcee1cd9abeb717b52029c77812a2aa5)) * validate fg and materials qty in the disassemble entry ([4453c10](https://github.com/frappe/erpnext/commit/4453c1072a8a98c67ed425b5e5ae5d27d90d1c21)) * 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](https://github.com/frappe/erpnext/commit/32011c33645bce8dc4ecf3fcb5db0453faf316e5)) ### Features * add item where used report ([#55714](https://github.com/frappe/erpnext/issues/55714)) ([8f85cce](https://github.com/frappe/erpnext/commit/8f85cce4cf49757a38d30ba8baf7f87800f928d0)) * add New Zealand chart of accounts ([107a446](https://github.com/frappe/erpnext/commit/107a446d98420e47b1a12de1d92dc3ee04883d71)) * added cost of goods sold (backport [#54974](https://github.com/frappe/erpnext/issues/54974)) ([#55552](https://github.com/frappe/erpnext/issues/55552)) ([20af709](https://github.com/frappe/erpnext/commit/20af7093ac3a55f98345f1d1d29737ed1c1c594c)) * create sales invoice from pick list (backport [#55594](https://github.com/frappe/erpnext/issues/55594)) ([#55635](https://github.com/frappe/erpnext/issues/55635)) ([743afc9](https://github.com/frappe/erpnext/commit/743afc972da24d5e784acee2e8f62c595d8f7d6e)) * item prices list view ([#54853](https://github.com/frappe/erpnext/issues/54853)) ([12c1940](https://github.com/frappe/erpnext/commit/12c1940e0bce9a22d6c87e2359775a162eb06e6b)) * 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](https://github.com/frappe/erpnext/commit/3f983c9e4ddc09ae6556ef146342bb70c85e0588)) ### 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](https://github.com/frappe/erpnext/commit/0274afe5609fc531793969121e5dd3fd73da2bde)) * **transaction:** exit early before backend query (backport [#55556](https://github.com/frappe/erpnext/issues/55556)) ([#55558](https://github.com/frappe/erpnext/issues/55558)) ([6a1c384](https://github.com/frappe/erpnext/commit/6a1c384f9bfe8620a3a649e706e2e6596f8a2a4a)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 43c9fdb8cc3..e3e424322a2 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.21.1" +__version__ = "16.22.0" def get_default_company(user=None): From b1ca423e119e14c8edb54138c3be4b493b71834e Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 16 Jun 2026 21:31:15 +0000 Subject: [PATCH 29/36] chore(release): Bumped to Version 16.23.0 # [16.23.0](https://github.com/frappe/erpnext/compare/v16.22.0...v16.23.0) (2026-06-16) ### Bug Fixes * **accounts:** removed whitelist on `get_balance_on` (backport [#55956](https://github.com/frappe/erpnext/issues/55956)) ([#55965](https://github.com/frappe/erpnext/issues/55965)) ([5cdb481](https://github.com/frappe/erpnext/commit/5cdb481bdf635d5a854399ea82c96efe9884d26f)) * adapt Product Bundle queries to v16 schema ([b1895e9](https://github.com/frappe/erpnext/commit/b1895e9a9a0747715813fca59e2a196b6d2bf58f)) * add permission checks in accounts whitelisted methods ([b9eb52b](https://github.com/frappe/erpnext/commit/b9eb52b1713e54a958e9a213e6d42b78c397507e)) * added doctype filter validation for sales person wise transaction summary report (backport [#55812](https://github.com/frappe/erpnext/issues/55812)) ([#55818](https://github.com/frappe/erpnext/issues/55818)) ([c06046d](https://github.com/frappe/erpnext/commit/c06046df8f05a778dee38ca4fa4da2f7e53f4677)) * apply user permissions to receivable/payable reports ([b05abbc](https://github.com/frappe/erpnext/commit/b05abbc53b3655b02db17ba2e8165519f195c1c2)) * **banking:** miscellaneous bug fixes (backport [#55492](https://github.com/frappe/erpnext/issues/55492)) ([#55979](https://github.com/frappe/erpnext/issues/55979)) ([3243e42](https://github.com/frappe/erpnext/commit/3243e4237aaac1627dcf7c11b20ff0ef10bcfb8b)) * **bom:** allow zero qty for secondary items (Co-Product, By-Product, Scrap, Additional Finished Good) ([7d95aca](https://github.com/frappe/erpnext/commit/7d95acabe7ad37bf8d1a8a6034c22f00c6ad69fc)) * **bom:** fetch routing operations when Routing is selected ([#55813](https://github.com/frappe/erpnext/issues/55813)) ([f3caed3](https://github.com/frappe/erpnext/commit/f3caed378b54a12e1ca4e993825d8638bdc9bbfd)) * **budget:** add root_type filter on account field ([#55934](https://github.com/frappe/erpnext/issues/55934)) ([0906737](https://github.com/frappe/erpnext/commit/0906737bd3176cd63cd35c88aa1c4c9274d6c376)) * bump BOM secondary item metadata timestamp ([4f96073](https://github.com/frappe/erpnext/commit/4f96073d59d01442dfbba9177fa59d81d8a32963)) * check for bank account permission when updating balance (backport [#56016](https://github.com/frappe/erpnext/issues/56016)) ([#56017](https://github.com/frappe/erpnext/issues/56017)) ([2bfb5fe](https://github.com/frappe/erpnext/commit/2bfb5fe8b841691f82700cdfbce2f19a3d566940)) * **company:** replaced "this company" with company name on delete transactions dialog (backport [#56021](https://github.com/frappe/erpnext/issues/56021)) ([#56023](https://github.com/frappe/erpnext/issues/56023)) ([f4bf35a](https://github.com/frappe/erpnext/commit/f4bf35aa31a5a4c266e096a75ef18eebafe910f4)) * converted whitelist non class methods to class methods ([b616206](https://github.com/frappe/erpnext/commit/b61620684847bfa8b09edabaa5288ba15b07b0e4)) * create_raw_materials_supplied method not found ([d51ad0d](https://github.com/frappe/erpnext/commit/d51ad0d19f5b12558be1140fa47c24e46bc3ca97)) * exclude non-stock item's tax value from stock valuation ([3d6c7f4](https://github.com/frappe/erpnext/commit/3d6c7f451221f86eb9d5e88c960c1ac1e6b074a3)) * fiscal year check on validation (backport [#55930](https://github.com/frappe/erpnext/issues/55930)) ([#55938](https://github.com/frappe/erpnext/issues/55938)) ([f3e23d4](https://github.com/frappe/erpnext/commit/f3e23d4e6f852e64475163f2d046b558734c0bdf)) * **get_exchange_rate:** using get_single_value to fetch `disabled` value from `currency_exchange_settings` ([2606d66](https://github.com/frappe/erpnext/commit/2606d660af5480b9675eb9c741faf372587824f7)) * **inactive_customers:** add allowlist for doctype filter and migrate to qb ([f43af66](https://github.com/frappe/erpnext/commit/f43af6624610e874e61ad3faf8701e5e6be6271a)) * **Lead:** stop storing Gravatar image URLs for Leads (backport [#55880](https://github.com/frappe/erpnext/issues/55880)) ([#55882](https://github.com/frappe/erpnext/issues/55882)) ([0b03f18](https://github.com/frappe/erpnext/commit/0b03f18a39b146b3591fec2d35c3d0ed61e8661a)) * **manufacture:** preserve user-entered rate for secondary items with zero cost allocation ([5090389](https://github.com/frappe/erpnext/commit/509038971c4d734dc69f937f2817d30194ed82c8)) * multiple issues related to BOM Creator ([c10a331](https://github.com/frappe/erpnext/commit/c10a331a22f0ce8b40c2e61d971290307d707d96)) * opportunity creation from contact us page (backport [#55841](https://github.com/frappe/erpnext/issues/55841)) ([#55867](https://github.com/frappe/erpnext/issues/55867)) ([85e6b8d](https://github.com/frappe/erpnext/commit/85e6b8d27b942bc0d115c9954e0be8ad49890060)) * pass source cost center to target cost center ([558415b](https://github.com/frappe/erpnext/commit/558415b1e7fd2b72f541b3d9137c7972e8459175)) * pemission for whitelist functions ([dd56e80](https://github.com/frappe/erpnext/commit/dd56e805126be2691df457c3fa53721d49995673)) * permission in bom compare tool ([c3b66bc](https://github.com/frappe/erpnext/commit/c3b66bce1eec7dce2b267eac6eb98732553120eb)) * permissions in workstation file ([0fea933](https://github.com/frappe/erpnext/commit/0fea93388d70106071672fa76c89ac98b2f51773)) * prefetch batchwise valuations before streaming SLEs in stock ageing ([018f06d](https://github.com/frappe/erpnext/commit/018f06d8d1f3ae85625a1da80f80d93442ce4f8d)) * prevent exchange rate flow from transaction to payment ([d7de07b](https://github.com/frappe/erpnext/commit/d7de07bfd4b65ee7db3640b18e36e74175fa4b4c)) * provision to recalculate valuation rate during reposting ([5b61304](https://github.com/frappe/erpnext/commit/5b61304046de98b2f7855b3a9fe28a182580549a)) * recalculate incoming rate in SLE for purchase documents during repost ([d3cc684](https://github.com/frappe/erpnext/commit/d3cc6848990dce950eeae614d1b9bcf5b41751bc)) * regression issues related to security fixes ([be1aa0e](https://github.com/frappe/erpnext/commit/be1aa0e5ebcc05e3b3587333651a95aea55756cf)) * remove duplicate field ([#55941](https://github.com/frappe/erpnext/issues/55941)) ([545d052](https://github.com/frappe/erpnext/commit/545d052b4e7f06c9ea514478fbd9a473893ddf61)) * remove ignore_permissions from get_party_details signature ([#55491](https://github.com/frappe/erpnext/issues/55491)) ([b2e7fd7](https://github.com/frappe/erpnext/commit/b2e7fd7957a257c6e201a01c4b6ed4c8dd8aca8e)) * remove wrapper for list items in error messages (backport [#54848](https://github.com/frappe/erpnext/issues/54848)) ([#55973](https://github.com/frappe/erpnext/issues/55973)) ([4ba5557](https://github.com/frappe/erpnext/commit/4ba5557a3f2bdf99dcdd9341673bd80a756fc172)) * resolve pre-commit formatting and missing UOM in stock balance test ([96465a7](https://github.com/frappe/erpnext/commit/96465a79363c25eca26f2c4ba3414b9a49de70f7)) * resolve v16 BOM backport conflicts ([c7cc0fe](https://github.com/frappe/erpnext/commit/c7cc0fec0f9e626456f81ec23309c9c9ac313f52)) * restricting currency_exchange_settings write permission only to system manager ([79fd176](https://github.com/frappe/erpnext/commit/79fd176a8e13674428ce144556ce0cb1a0876ff4)) * semgrep translation issue ([bcd38c1](https://github.com/frappe/erpnext/commit/bcd38c17d69cf7bd756bcac671f50f8e5b9f9cea)) * set options Email for customer_email field in appointment ([6d038c5](https://github.com/frappe/erpnext/commit/6d038c5e71e2897ed3b14f036c55f13701f98286)) * set transaction currency on payment entry gl entries ([#55989](https://github.com/frappe/erpnext/issues/55989)) ([3586df8](https://github.com/frappe/erpnext/commit/3586df8ed63140ae9c5421d4570c4e9a0f9757ca)) * show company name in delete transactions confirmation dialog ([6a3c973](https://github.com/frappe/erpnext/commit/6a3c973b0f3a47aedc75b728815e96827c8b2cd7)) * show inactive product bundles in item where used ([#55769](https://github.com/frappe/erpnext/issues/55769)) ([2bea9ae](https://github.com/frappe/erpnext/commit/2bea9ae2a5d33e88edb9d5e60c514ad2cb7096fc)) * show user disable audit log ([ca61e5a](https://github.com/frappe/erpnext/commit/ca61e5a214c84130d1a2f950dd80d2ec5fa900f5)) * **stock:** make uom mandatory in item uom table ([7f8c7d2](https://github.com/frappe/erpnext/commit/7f8c7d2f4459b3158726b869facc87a43229b3ff)) * **stock:** show only batched items in batch item selector ([11b3841](https://github.com/frappe/erpnext/commit/11b3841418dda205596e91a8c13531799c571b4c)) * **stock:** update stock value calculation in stock balance report ([00794e0](https://github.com/frappe/erpnext/commit/00794e081534cd9557f77344e5e589c575d677dd)) * sync employee user status after save ([a83002a](https://github.com/frappe/erpnext/commit/a83002aae60ad9d947a8e6c13a47de921aaf5943)) * test case ([9fcb730](https://github.com/frappe/erpnext/commit/9fcb730090b444cafe58415a0f409371693f96db)) * UI/UX issues in new banking module (backport [#54824](https://github.com/frappe/erpnext/issues/54824)) ([#55951](https://github.com/frappe/erpnext/issues/55951)) ([961a9ad](https://github.com/frappe/erpnext/commit/961a9ad321792722e25e8d4ca4bca1a76a74bf98)) * update system manager permissions (backport [#55978](https://github.com/frappe/erpnext/issues/55978)) ([#56005](https://github.com/frappe/erpnext/issues/56005)) ([ab856d3](https://github.com/frappe/erpnext/commit/ab856d370a758cd33a73fdddb2adc8e8bb3d9f91)) * updated role based permission for terms and conditions doctype ([#55674](https://github.com/frappe/erpnext/issues/55674)) ([254290a](https://github.com/frappe/erpnext/commit/254290a88eb9c00208856f0d3f34244771da87f6)) * use frankfurter v2 by default for new install ([471ab66](https://github.com/frappe/erpnext/commit/471ab662f6ffac1bfcc2e96d2131ca778a58c763)) ### Features * add alternate UOM balance columns to Stock Balance report ([cd1f872](https://github.com/frappe/erpnext/commit/cd1f872912fbaf34a36570ed2989c6ee70ab3177)), closes [#52953](https://github.com/frappe/erpnext/issues/52953) * Allow to edit stock UOM qty for Stock Entry ([ece43bd](https://github.com/frappe/erpnext/commit/ece43bd79b9705b9a95507117279c102c654c647)) * **banking:** PDF statement importer and overriding column mapping (backport [#55559](https://github.com/frappe/erpnext/issues/55559)) ([#55993](https://github.com/frappe/erpnext/issues/55993)) ([125bda9](https://github.com/frappe/erpnext/commit/125bda95ed65b3c3501dac173b5897bbb0741dcd)) * **currency exchange settings:** frankfurter v2 support ([e804bf3](https://github.com/frappe/erpnext/commit/e804bf33ba388debd6a601220aa6709cbf19daee)) * **invoices:** add tooltip description to Update Stock checkbox ([#55868](https://github.com/frappe/erpnext/issues/55868)) ([12be632](https://github.com/frappe/erpnext/commit/12be63229aad2973c85a43f7c8fda59fb36b9bd2)) * new banking module (backport [#54720](https://github.com/frappe/erpnext/issues/54720)) ([#55917](https://github.com/frappe/erpnext/issues/55917)) ([67cc59c](https://github.com/frappe/erpnext/commit/67cc59c5ca5826c9d47f2094c18cc69527fdd39e)) * **selling:** surface and respect disabled Product Bundles (backport [#55791](https://github.com/frappe/erpnext/issues/55791)) ([0c1a508](https://github.com/frappe/erpnext/commit/0c1a5082bd6aedfbd545a235a12d794988688824)) * sticky columns in reports ([3317158](https://github.com/frappe/erpnext/commit/331715815c0490af84dc407f20584b5dcd8d4cf1)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index e3e424322a2..12fb040b37e 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.22.0" +__version__ = "16.23.0" def get_default_company(user=None): From 6569fa2b9fa10afa169f4d97b6aa2ab586fa40f8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 19 Jun 2026 08:37:40 +0000 Subject: [PATCH 30/36] fix: type def in get_linked_payments (backport #56100) (#56133) fix: type def in get_linked_payments (#56100) (cherry picked from commit 8e21af0a63d0fe6eb9b8e2f76a31dc7bd00d7641) Co-authored-by: Nikhil Kothari --- .../bank_reconciliation_tool/bank_reconciliation_tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py index 2c2898199de..99f046069d0 100644 --- a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py +++ b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py @@ -1078,7 +1078,7 @@ def reconcile_vouchers(bank_transaction_name: str | int, vouchers: str, is_new_v @frappe.whitelist() def get_linked_payments( bank_transaction_name: str | int, - document_types: list[str] | None = None, + document_types: str | list[str] | None = None, from_date: str | date | None = None, to_date: str | date | None = None, filter_by_reference_date: bool | None = None, From d47aa4917a7eec2be2031b7dc94188c196c34cfa Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Fri, 19 Jun 2026 08:39:21 +0000 Subject: [PATCH 31/36] chore(release): Bumped to Version 16.23.1 ## [16.23.1](https://github.com/frappe/erpnext/compare/v16.23.0...v16.23.1) (2026-06-19) ### Bug Fixes * type def in get_linked_payments (backport [#56100](https://github.com/frappe/erpnext/issues/56100)) ([#56133](https://github.com/frappe/erpnext/issues/56133)) ([6569fa2](https://github.com/frappe/erpnext/commit/6569fa2b9fa10afa169f4d97b6aa2ab586fa40f8)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 12fb040b37e..62d3ea7b415 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.23.0" +__version__ = "16.23.1" def get_default_company(user=None): From e9a26b5086739e4ed427c89820f287fc9f21453b Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 23 Jun 2026 21:37:59 +0000 Subject: [PATCH 32/36] chore(release): Bumped to Version 16.24.0 # [16.24.0](https://github.com/frappe/erpnext/compare/v16.23.1...v16.24.0) (2026-06-23) ### Bug Fixes * add customer type in the list view ([c788106](https://github.com/frappe/erpnext/commit/c7881060110c8366721009265834417518bfe47f)) * add partially transferred status and fix button visibility for partial material transfer on job card ([570ef45](https://github.com/frappe/erpnext/commit/570ef45e46cc672b8d18c02139b4e3e70fee8a1a)) * add validation and tests for set_status ([bcd72a7](https://github.com/frappe/erpnext/commit/bcd72a7fec734d5a2156070ba98cf6443ad62dbc)) * address product bundle review comments ([c066880](https://github.com/frappe/erpnext/commit/c0668809786211fdf62b9d12eb7d7137b6394af1)) * apply docstatus filter to exclude cancelled Work Orders in Serial No ([58d5f39](https://github.com/frappe/erpnext/commit/58d5f39e0ab38b72ef9368e04c1e633ae8e21eee)) * **budget:** ambiguous error message for budget assignment validation (backport [#56390](https://github.com/frappe/erpnext/issues/56390)) ([#56392](https://github.com/frappe/erpnext/issues/56392)) ([2b6f2c2](https://github.com/frappe/erpnext/commit/2b6f2c2f9ccc3bfa7869542d87ddf27c88198701)) * clear stale payment rows on non-POS returns so they don't surface in bank reconciliation (backport [#55903](https://github.com/frappe/erpnext/issues/55903)) ([#56171](https://github.com/frappe/erpnext/issues/56171)) ([d363186](https://github.com/frappe/erpnext/commit/d3631860dbce5bfebedebf67c481369328aad6ae)) * **coa_importer:** allow importing COA through `import_coa` only for `Accounts Manager` (backport [#56132](https://github.com/frappe/erpnext/issues/56132)) ([#56140](https://github.com/frappe/erpnext/issues/56140)) ([e6e5591](https://github.com/frappe/erpnext/commit/e6e5591088b646d70f72beb0dda324c7ab9ff8fb)) * company default handling in purchase transactions made from project ([29323cb](https://github.com/frappe/erpnext/commit/29323cb0b17c713c4965c72a7955c92659fdc60c)) * customer master form cleanup ([8b56b7b](https://github.com/frappe/erpnext/commit/8b56b7ba0ea2d9c110714164f796d470d92b5549)) * disable is_debit_note while creating credit note ([c7dbedb](https://github.com/frappe/erpnext/commit/c7dbedbfdcc7482ce1704f536fc409c8e07389bd)) * disarding stock entry fix ([5372254](https://github.com/frappe/erpnext/commit/537225494cb53ff0c21915b8dafbd73a82bd7a0b)) * **err:** add missing permission check on `get_account_details` ([88ce356](https://github.com/frappe/erpnext/commit/88ce356d62d8175ec0b6e65a64e08b2b89ea33f9)) * escape user image url on various templates (backport [#56269](https://github.com/frappe/erpnext/issues/56269)) ([#56271](https://github.com/frappe/erpnext/issues/56271)) ([3b734f4](https://github.com/frappe/erpnext/commit/3b734f4d5dc8b9981f18fc2c416f1547d99d38f0)) * fetch party types based on account type in journal entry and refactor SQL to query builder ([bbb3181](https://github.com/frappe/erpnext/commit/bbb3181c6e327e7af77544d51175eb0db744d577)) * honor account freezing date when cancelling vouchers ([f4b827c](https://github.com/frappe/erpnext/commit/f4b827cb3dbb0e43baf19603195f6a4bc685d935)) * **journal entry:** validate opening entry against pcv on save ([f8aa4c7](https://github.com/frappe/erpnext/commit/f8aa4c730c6b3eb4b02108251b8dab836aaefbef)) * lock budget distribution table and guard against null distribution rows ([2b28b7e](https://github.com/frappe/erpnext/commit/2b28b7e6940546f21d2b909f9c49345814e94438)) * **manufacturing:** make item_code mandatory in Job Card Item ([d40c36a](https://github.com/frappe/erpnext/commit/d40c36a4b1154d531d066724c43b697ddc6cf43b)) * party specific item doesnt work if there are 2 suppliers with same item ([3df7a28](https://github.com/frappe/erpnext/commit/3df7a2847627322a72ce5ef146feb70a76379e3d)) * **payment_entry:** recompute base amount when exchange rate changes (backport [#56136](https://github.com/frappe/erpnext/issues/56136)) ([#56398](https://github.com/frappe/erpnext/issues/56398)) ([1d0edf1](https://github.com/frappe/erpnext/commit/1d0edf1b9af4e6da79c99cea98fd4f47588dbb68)) * placement of fields ([#56257](https://github.com/frappe/erpnext/issues/56257)) ([3f53af8](https://github.com/frappe/erpnext/commit/3f53af8b1fe73b92344db95967385c9933c3c689)) * **pos:** remove redundant opening balance dialog onchange handler (backport [#54591](https://github.com/frappe/erpnext/issues/54591)) ([#56403](https://github.com/frappe/erpnext/issues/56403)) ([4555c32](https://github.com/frappe/erpnext/commit/4555c323af42001cfbe1022206242ae5b7462e05)) * preserve stock ageing on non-serial reconciliation ([846e0a9](https://github.com/frappe/erpnext/commit/846e0a9f06011d9360410ad055f694ea6985447b)) * removing the document naming series dialog and moving to framework ([97279c7](https://github.com/frappe/erpnext/commit/97279c7e26ddc07b65f21c0e851612ffa474b898)) * **report_utils:** remove unnecessary whitelist decorator on `get_invoiced_item_gross_margin` ([bf58393](https://github.com/frappe/erpnext/commit/bf58393fda3337ee8d1cf7683f88845a0f635a40)) * resolve backport merge conflicts in customer.json ([77121f2](https://github.com/frappe/erpnext/commit/77121f2a415c592f69f4ac5dfbe3ee4efbb10533)) * resolve backport merge conflicts in supplier.json ([a80de9b](https://github.com/frappe/erpnext/commit/a80de9bd014a88a8f4ad00d4f8ef1ca0dbd9e8cd)) * **stock:** allow partial raw material picking/transfer from work order ([8e3fbab](https://github.com/frappe/erpnext/commit/8e3fbab94ae6fbc19b378777a149b49e4f40175b)) * **stock:** apply precision to the additional cost amount in stock entry ([6ac699d](https://github.com/frappe/erpnext/commit/6ac699d3bb44cfb9d96536a5271e2e5654d221c3)) * **stock:** define qi exception classes in exceptions file ([42c121a](https://github.com/frappe/erpnext/commit/42c121a750e5fb7fbfc406c8145e340591da950b)) * **stock:** enable quality inspection for all Stock Entry purposes ([a631035](https://github.com/frappe/erpnext/commit/a6310351fd69a27821ed5ff2ac94322bca5d6810)) * **stock:** propagate renamed attribute values to variant items ([dbc831e](https://github.com/frappe/erpnext/commit/dbc831e00816cf4c730926f136bfec5981d5dbd5)) * **stock:** update transfer status for mixed transfer flows ([84a1a51](https://github.com/frappe/erpnext/commit/84a1a51023d8f6053cebdb94d83f3b5ed735f7ef)) * **stock:** update variant attributes on value rename ([3110ab1](https://github.com/frappe/erpnext/commit/3110ab1c57f465ef8efdac4ba28a26dc0a58a22b)) * **stock:** update voucher valuaion rate in sle (backport [#55960](https://github.com/frappe/erpnext/issues/55960)) ([#56263](https://github.com/frappe/erpnext/issues/56263)) ([82e1221](https://github.com/frappe/erpnext/commit/82e1221dc92146549ca7cefb3ce2e1ab622ae91b)) * submittable product bundle issues ([7a1def0](https://github.com/frappe/erpnext/commit/7a1def07e9d83f638a6643fc9547351146d3c9e3)) * supplier master form cleanup ([e5c9e7a](https://github.com/frappe/erpnext/commit/e5c9e7abdcfbded4df9257f9aeb5e91026f43778)) * supplier status in list view ([2035fac](https://github.com/frappe/erpnext/commit/2035fac49403b273ff99602cf675e1833364a313)) * tax.base_tax_amount as none when payment entry created using API ([43b355e](https://github.com/frappe/erpnext/commit/43b355eaf61f16ef7adf56d4dcb4bf90316d427d)) * type def in get_linked_payments ([#56100](https://github.com/frappe/erpnext/issues/56100)) ([8e21af0](https://github.com/frappe/erpnext/commit/8e21af0a63d0fe6eb9b8e2f76a31dc7bd00d7641)) * update reference doctype mapping and field visibility in bank guarantee ([dc9ae20](https://github.com/frappe/erpnext/commit/dc9ae20db8d8a8abf234628a7518051e2fefc9cf)) * update round off account functions to accept document context for regional overrides (backport [#55758](https://github.com/frappe/erpnext/issues/55758)) ([#55771](https://github.com/frappe/erpnext/issues/55771)) ([f5d05b9](https://github.com/frappe/erpnext/commit/f5d05b969bd08a6af1014ee434e3ad8e6c677cd1)) * update weighted average rate calculation to consider returned and consumed quantities ([35e0604](https://github.com/frappe/erpnext/commit/35e06045bd48aa63c6cf83a0eb01d1d57eeba001)) ### Features * add batch-level option to allow negative stock for batch ([1f075d4](https://github.com/frappe/erpnext/commit/1f075d4bbf6804cd1eea962b03c8f785aff72b22)) * allocate full actual charge to stock items only (e.g. Freight) (backport [#56102](https://github.com/frappe/erpnext/issues/56102)) ([#56222](https://github.com/frappe/erpnext/issues/56222)) ([9469889](https://github.com/frappe/erpnext/commit/9469889bd51913bea90697a5d1d8fc12f2ae640e)) * **opening invoice creation tool:** add project to opening invoice child row (backport [#54662](https://github.com/frappe/erpnext/issues/54662)) ([#56401](https://github.com/frappe/erpnext/issues/56401)) ([d54938f](https://github.com/frappe/erpnext/commit/d54938fa643c15c012238f558e92649ad5c0029f)) * party aliases ([768425e](https://github.com/frappe/erpnext/commit/768425ebf1722e7db4313b14f5feb0e60ddfbc92)) ### Performance Improvements * composite index on (serial_no, warehouse, posting_datetime) for Serial and Batch Entry (backport [#56032](https://github.com/frappe/erpnext/issues/56032)) ([#56166](https://github.com/frappe/erpnext/issues/56166)) ([c0dab55](https://github.com/frappe/erpnext/commit/c0dab55fcc42f5afe2b8ca7ad16464ea20c4bd12)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 62d3ea7b415..3bd2b7ca7ea 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.23.1" +__version__ = "16.24.0" def get_default_company(user=None): From e71b066eecd4be3d2a914e7ccbb8d169a1dd94cd Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 24 Jun 2026 12:57:31 +0530 Subject: [PATCH 33/36] feat(accounts): add configurable job timeout for Process Period Closing Voucher Adds a `pcv_job_timeout` Int field (default 3600s) to Accounts Settings so admins can tune the enqueue timeout for PCV background jobs without a code change. All three `frappe.enqueue` calls in `process_period_closing_voucher.py` now read this value at runtime. Co-Authored-By: Claude Sonnet 4.6 (cherry picked from commit 13b6c4a165db29d95d05cdcd01d79cdeaca0accc) # Conflicts: # erpnext/accounts/doctype/accounts_settings/accounts_settings.json (cherry picked from commit c97be8abe1b6ca1115130776b52065d6eddf914c) # Conflicts: # erpnext/accounts/doctype/accounts_settings/accounts_settings.json --- .../accounts_settings/accounts_settings.json | 32 +++++++++++++++++++ .../process_period_closing_voucher.py | 10 ++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 57e3c090488..bda461a6198 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -86,6 +86,7 @@ "period_closing_settings_section", "ignore_account_closing_balance", "use_legacy_controller_for_pcv", + "pcv_job_timeout", "column_break_25", "reports_tab", "remarks_section", @@ -612,11 +613,42 @@ "label": "Use legacy controller for Period Closing Voucher" }, { +<<<<<<< HEAD +======= +<<<<<<< HEAD + "fieldname": "payment_entry_settings", + "fieldtype": "Section Break", + "label": "Payment Entry Settings" + }, + { + "default": "0", + "fieldname": "show_account_balance", + "fieldtype": "Check", + "label": "Show Account Balance" + }, + { + "default": "0", + "fieldname": "show_party_balance", + "fieldtype": "Check", + "label": "Show Party Balance" +======= + "default": "3600", + "description": "Timeout (in seconds) for each background job enqueued by Process Period Closing Voucher", + "fieldname": "pcv_job_timeout", + "fieldtype": "Int", + "label": "PCV Job Timeout (seconds)" + }, + { +>>>>>>> c97be8abe1 (feat(accounts): add configurable job timeout for Process Period Closing Voucher) "description": "Users with this role will be notified if the asset depreciation gets failed", "fieldname": "role_to_notify_on_depreciation_failure", "fieldtype": "Link", "label": "Role to Notify on Depreciation Failure", "options": "Role" +<<<<<<< HEAD +======= +>>>>>>> 13b6c4a165 (feat(accounts): add configurable job timeout for Process Period Closing Voucher) +>>>>>>> c97be8abe1 (feat(accounts): add configurable job timeout for Process Period Closing Voucher) }, { "default": "30, 60, 90, 120", diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py index bd8b2fd1db0..d5e10be7fdd 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py @@ -95,6 +95,8 @@ def start_pcv_processing(docname: str): frappe.has_permission("Process Payment Reconciliation", "write", doc=docname, throw=True) frappe.db.set_value("Process Period Closing Voucher", docname, "status", "Running") + timeout = frappe.db.get_single_value("Accounts Settings", "pcv_job_timeout") or 3600 + ppcvd = qb.DocType("Process Period Closing Voucher Detail") if normal_balances := ( qb.from_(ppcvd) @@ -121,7 +123,7 @@ def start_pcv_processing(docname: str): frappe.enqueue( method="erpnext.accounts.doctype.process_period_closing_voucher.process_period_closing_voucher.process_individual_date", queue="long", - timeout="3600", + timeout=timeout, is_async=True, enqueue_after_commit=True, docname=docname, @@ -247,6 +249,8 @@ def get_gle_for_closing_account(pcv, dimension_balance, dimensions): @frappe.whitelist() def schedule_next_date(docname: str): + timeout = frappe.db.get_single_value("Accounts Settings", "pcv_job_timeout") or 3600 + ppcvd = qb.DocType("Process Period Closing Voucher Detail") if to_process := ( qb.from_(ppcvd) @@ -272,7 +276,7 @@ def schedule_next_date(docname: str): frappe.enqueue( method="erpnext.accounts.doctype.process_period_closing_voucher.process_period_closing_voucher.process_individual_date", queue="long", - timeout="3600", + timeout=timeout, is_async=True, enqueue_after_commit=True, docname=docname, @@ -302,7 +306,7 @@ def schedule_next_date(docname: str): frappe.enqueue( method="erpnext.accounts.doctype.process_period_closing_voucher.process_period_closing_voucher.summarize_and_post_ledger_entries", queue="long", - timeout="3600", + timeout=timeout, is_async=True, job_name=job_name, enqueue_after_commit=True, From 570c67bb340fc84371c06129d3c560cc2fce622f Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 24 Jun 2026 13:01:42 +0530 Subject: [PATCH 34/36] refactor: patch, display depends on and json changes (cherry picked from commit 3da7eefebb37bb1f1e6cc4c7c0c2add735e0e2c5) # Conflicts: # erpnext/accounts/doctype/accounts_settings/accounts_settings.json # erpnext/accounts/doctype/accounts_settings/accounts_settings.py # erpnext/patches.txt (cherry picked from commit c33d7e5d7be12f103ccae69354ab75d309af3d2d) # Conflicts: # erpnext/accounts/doctype/accounts_settings/accounts_settings.json # erpnext/accounts/doctype/accounts_settings/accounts_settings.py # erpnext/patches.txt --- .../accounts_settings/accounts_settings.json | 9 +++++++++ .../accounts_settings/accounts_settings.py | 9 +++++++++ erpnext/patches.txt | 15 +++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index bda461a6198..1848a073deb 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -633,6 +633,7 @@ "label": "Show Party Balance" ======= "default": "3600", + "depends_on": "eval: !doc.use_legacy_controller_for_pcv", "description": "Timeout (in seconds) for each background job enqueued by Process Period Closing Voucher", "fieldname": "pcv_job_timeout", "fieldtype": "Int", @@ -780,7 +781,15 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], +<<<<<<< HEAD "modified": "2026-06-15 18:26:50.778723", +======= +<<<<<<< HEAD + "modified": "2026-05-18 12:16:33.679345", +======= + "modified": "2026-06-24 12:59:41.868865", +>>>>>>> 3da7eefebb (refactor: patch, display depends on and json changes) +>>>>>>> c33d7e5d7b (refactor: patch, display depends on and json changes) "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 716bd8a0719..381a2e81024 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -90,6 +90,15 @@ class AccountsSettings(Document): make_payment_via_journal_entry: DF.Check merge_similar_account_heads: DF.Check over_billing_allowance: DF.Currency +<<<<<<< HEAD +======= +<<<<<<< HEAD + post_change_gl_entries: DF.Check +======= + pcv_job_timeout: DF.Int + preview_mode: DF.Check +>>>>>>> 3da7eefebb (refactor: patch, display depends on and json changes) +>>>>>>> c33d7e5d7b (refactor: patch, display depends on and json changes) receivable_payable_fetch_method: DF.Literal["Buffered Cursor", "UnBuffered Cursor"] receivable_payable_remarks_length: DF.Int reconciliation_queue_size: DF.Int diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 4f129c918f0..ae969afb1eb 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -483,4 +483,19 @@ erpnext.patches.v16_0.fix_titles erpnext.patches.v16_0.set_not_applicable_on_german_item_tax_templates erpnext.patches.v16_0.clear_procedures_from_receivable_report erpnext.patches.v16_0.migrate_address_contact_custom_fields +<<<<<<< HEAD erpnext.patches.v16_0.drop_redundant_serial_no_index_from_sabb +======= +<<<<<<< HEAD +erpnext.patches.v15_0.set_main_item_code_in_material_request_plan_item +erpnext.patches.v16_0.set_posting_datetime_for_sabb_and_drop_indexes +======= +erpnext.patches.v16_0.rename_secondary_item_type_field +erpnext.patches.v16_0.submit_existing_product_bundles #1 +erpnext.patches.v16_0.migrate_subscription_generate_invoice_at +erpnext.patches.v16_0.rename_subscription_billing_period_fields +erpnext.patches.v16_0.drop_redundant_serial_no_index_from_sabb +erpnext.patches.v16_0.set_default_close_opportunity_after_days +execute:frappe.db.set_single_value("Accounts Settings", "pcv_job_timeout", 3600) +>>>>>>> 3da7eefebb (refactor: patch, display depends on and json changes) +>>>>>>> c33d7e5d7b (refactor: patch, display depends on and json changes) From e46be25e9fc48cd14385a6d8800f307acec9d1b2 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 24 Jun 2026 15:05:41 +0530 Subject: [PATCH 35/36] chore: resolve conflicts (cherry picked from commit df3c821f98045f9ac038b1bafbd35113949db783) # Conflicts: # erpnext/accounts/doctype/accounts_settings/accounts_settings.json # erpnext/accounts/doctype/accounts_settings/accounts_settings.py # erpnext/patches.txt --- .../accounts_settings/accounts_settings.json | 32 ------------------- .../accounts_settings/accounts_settings.py | 8 ----- erpnext/patches.txt | 14 -------- 3 files changed, 54 deletions(-) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 1848a073deb..9381ad2ff18 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -613,25 +613,6 @@ "label": "Use legacy controller for Period Closing Voucher" }, { -<<<<<<< HEAD -======= -<<<<<<< HEAD - "fieldname": "payment_entry_settings", - "fieldtype": "Section Break", - "label": "Payment Entry Settings" - }, - { - "default": "0", - "fieldname": "show_account_balance", - "fieldtype": "Check", - "label": "Show Account Balance" - }, - { - "default": "0", - "fieldname": "show_party_balance", - "fieldtype": "Check", - "label": "Show Party Balance" -======= "default": "3600", "depends_on": "eval: !doc.use_legacy_controller_for_pcv", "description": "Timeout (in seconds) for each background job enqueued by Process Period Closing Voucher", @@ -640,16 +621,11 @@ "label": "PCV Job Timeout (seconds)" }, { ->>>>>>> c97be8abe1 (feat(accounts): add configurable job timeout for Process Period Closing Voucher) "description": "Users with this role will be notified if the asset depreciation gets failed", "fieldname": "role_to_notify_on_depreciation_failure", "fieldtype": "Link", "label": "Role to Notify on Depreciation Failure", "options": "Role" -<<<<<<< HEAD -======= ->>>>>>> 13b6c4a165 (feat(accounts): add configurable job timeout for Process Period Closing Voucher) ->>>>>>> c97be8abe1 (feat(accounts): add configurable job timeout for Process Period Closing Voucher) }, { "default": "30, 60, 90, 120", @@ -781,15 +757,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], -<<<<<<< HEAD - "modified": "2026-06-15 18:26:50.778723", -======= -<<<<<<< HEAD - "modified": "2026-05-18 12:16:33.679345", -======= "modified": "2026-06-24 12:59:41.868865", ->>>>>>> 3da7eefebb (refactor: patch, display depends on and json changes) ->>>>>>> c33d7e5d7b (refactor: patch, display depends on and json changes) "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 381a2e81024..e76281687ab 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -90,15 +90,7 @@ class AccountsSettings(Document): make_payment_via_journal_entry: DF.Check merge_similar_account_heads: DF.Check over_billing_allowance: DF.Currency -<<<<<<< HEAD -======= -<<<<<<< HEAD - post_change_gl_entries: DF.Check -======= pcv_job_timeout: DF.Int - preview_mode: DF.Check ->>>>>>> 3da7eefebb (refactor: patch, display depends on and json changes) ->>>>>>> c33d7e5d7b (refactor: patch, display depends on and json changes) receivable_payable_fetch_method: DF.Literal["Buffered Cursor", "UnBuffered Cursor"] receivable_payable_remarks_length: DF.Int reconciliation_queue_size: DF.Int diff --git a/erpnext/patches.txt b/erpnext/patches.txt index ae969afb1eb..5bd41a2fece 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -483,19 +483,5 @@ erpnext.patches.v16_0.fix_titles erpnext.patches.v16_0.set_not_applicable_on_german_item_tax_templates erpnext.patches.v16_0.clear_procedures_from_receivable_report erpnext.patches.v16_0.migrate_address_contact_custom_fields -<<<<<<< HEAD erpnext.patches.v16_0.drop_redundant_serial_no_index_from_sabb -======= -<<<<<<< HEAD -erpnext.patches.v15_0.set_main_item_code_in_material_request_plan_item -erpnext.patches.v16_0.set_posting_datetime_for_sabb_and_drop_indexes -======= -erpnext.patches.v16_0.rename_secondary_item_type_field -erpnext.patches.v16_0.submit_existing_product_bundles #1 -erpnext.patches.v16_0.migrate_subscription_generate_invoice_at -erpnext.patches.v16_0.rename_subscription_billing_period_fields -erpnext.patches.v16_0.drop_redundant_serial_no_index_from_sabb -erpnext.patches.v16_0.set_default_close_opportunity_after_days execute:frappe.db.set_single_value("Accounts Settings", "pcv_job_timeout", 3600) ->>>>>>> 3da7eefebb (refactor: patch, display depends on and json changes) ->>>>>>> c33d7e5d7b (refactor: patch, display depends on and json changes) From e9a9224ec4558622e646d1db9d4647790fd8ecdf Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 24 Jun 2026 10:43:40 +0000 Subject: [PATCH 36/36] chore(release): Bumped to Version 16.25.0 # [16.25.0](https://github.com/frappe/erpnext/compare/v16.24.0...v16.25.0) (2026-06-24) ### Features * **accounts:** add configurable job timeout for Process Period Closing Voucher ([e71b066](https://github.com/frappe/erpnext/commit/e71b066eecd4be3d2a914e7ccbb8d169a1dd94cd)) --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 3bd2b7ca7ea..e9347d1f1dd 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -6,7 +6,7 @@ import frappe from frappe.model.document import Document from frappe.utils.user import is_website_user -__version__ = "16.24.0" +__version__ = "16.25.0" def get_default_company(user=None):