Frappe PR Bot
9d5c7605b8
chore(release): Bumped to Version 16.27.0
...
# [16.27.0](https://github.com/frappe/erpnext/compare/v16.26.2...v16.27.0 ) (2026-07-13)
### Bug Fixes
* **`frappe_crm_api`:** handle failure for `after_app_install` and `after_app_uninstall` ([eac3afc ](eac3afcd88 ))
* **accounts:** clear clearance date when amending reconciled voucher ([6f28135 ](6f281356a6 )), closes [#54909 ](https://github.com/frappe/erpnext/issues/54909 )
* **accounts:** retain invoice table on opening invoice creation error (backport [#56353 ](https://github.com/frappe/erpnext/issues/56353 )) ([#57058 ](https://github.com/frappe/erpnext/issues/57058 )) ([4136ca5 ](4136ca55a7 ))
* add page numbers to print format footer ([0371e8e ](0371e8eaf0 ))
* added permission checks on various whitelisted functions (backport [#56745 ](https://github.com/frappe/erpnext/issues/56745 )) ([#56946 ](https://github.com/frappe/erpnext/issues/56946 )) ([7ce1289 ](7ce1289c10 ))
* address review comments ([056195c ](056195ce07 ))
* auto fetch serial no from previous operation output (backport to v16) ([#56861 ](https://github.com/frappe/erpnext/issues/56861 )) ([17f2de4 ](17f2de42f3 ))
* **banking:** allow negative balance in bank statement import (backport [#56959 ](https://github.com/frappe/erpnext/issues/56959 )) ([#57054 ](https://github.com/frappe/erpnext/issues/57054 )) ([835e32c ](835e32cec7 ))
* **banking:** handle blank password protected PDFs and negative amounts in CR/DR columns (backport [#56690 ](https://github.com/frappe/erpnext/issues/56690 )) ([#56694 ](https://github.com/frappe/erpnext/issues/56694 )) ([19c318d ](19c318df68 ))
* **banking:** use custom renderer for translated strings and parser for rules (backport [#56643 ](https://github.com/frappe/erpnext/issues/56643 )) ([#56647 ](https://github.com/frappe/erpnext/issues/56647 )) ([2cb577b ](2cb577b912 ))
* block serialized to non-serialized item change when SABB exists (backport [#56773 ](https://github.com/frappe/erpnext/issues/56773 )) ([#56775 ](https://github.com/frappe/erpnext/issues/56775 )) ([19d03fe ](19d03fee46 ))
* clear stray permission message when item dashboard has no warehouse access ([a39753e ](a39753ee08 ))
* **company:** ignore user permissions for link fields having link to `Account` and `Cost Center` (backport [#56748 ](https://github.com/frappe/erpnext/issues/56748 )) ([#56795 ](https://github.com/frappe/erpnext/issues/56795 )) ([003b655 ](003b6554c4 ))
* correct filter handling in Sales Person-wise Transaction Summary + tests (backport [#56783 ](https://github.com/frappe/erpnext/issues/56783 )) ([#56908 ](https://github.com/frappe/erpnext/issues/56908 )) ([24f0989 ](24f0989ac1 ))
* **crm_settings:** skip allowed users check when frappe crm is installed locally ([dfe4d5a ](dfe4d5ab73 ))
* display outstanding amount using company default currency (backport [#56785 ](https://github.com/frappe/erpnext/issues/56785 )) ([#57009 ](https://github.com/frappe/erpnext/issues/57009 )) ([bdba4c8 ](bdba4c8091 ))
* don't attempt to create SABB for non-serialized / non-batch items (backport [#56627 ](https://github.com/frappe/erpnext/issues/56627 )) ([#56803 ](https://github.com/frappe/erpnext/issues/56803 )) ([8c56a5a ](8c56a5ac0c ))
* don't treat batch slot at FIFO queue head as qty slot ([20f6dd0 ](20f6dd0224 ))
* enforce read permission on ledger preview endpoints ([#57039 ](https://github.com/frappe/erpnext/issues/57039 )) ([5642359 ](5642359c10 ))
* fetch payment entry reference amounts from invoice (backport [#56928 ](https://github.com/frappe/erpnext/issues/56928 )) ([#57042 ](https://github.com/frappe/erpnext/issues/57042 )) ([67c85ef ](67c85ef0af ))
* FIFO queue checks and incorrect entries filter in stock ledger reports ([3571512 ](3571512101 )), closes [#43619 ](https://github.com/frappe/erpnext/issues/43619 )
* **financial_statement:** render columnar financial statements instea… (backport [#56921 ](https://github.com/frappe/erpnext/issues/56921 )) ([#57053 ](https://github.com/frappe/erpnext/issues/57053 )) ([e6a6c13 ](e6a6c13355 ))
* for purchases do voucher based reposting (backport [#56601 ](https://github.com/frappe/erpnext/issues/56601 )) ([#56608 ](https://github.com/frappe/erpnext/issues/56608 )) ([e1e6176 ](e1e6176ddc ))
* guard against missing DocType in onboarding steps patch ([#56804 ](https://github.com/frappe/erpnext/issues/56804 )) ([f72289e ](f72289e27c ))
* **item-attribute:** clear attribute values when marking numeric ([374b340 ](374b340e73 ))
* **item:** error on uncommitted input and escape values in variant dialog ([04c834d ](04c834d6a9 ))
* **item:** rework multiple variant dialog for large numeric ranges ([025d0cd ](025d0cd7f3 ))
* make represents company field in purchase invoice ignore user permissions ([4aed77d ](4aed77df0c ))
* make trend report based-on and group-by column labels translatable ([b8199d8 ](b8199d88b6 ))
* map stock_qty in apply_price_list_on_item (backport [#56869 ](https://github.com/frappe/erpnext/issues/56869 )) ([#57052 ](https://github.com/frappe/erpnext/issues/57052 )) ([240fb2c ](240fb2c4b8 ))
* partial delivery note against pick list (backport [#56985 ](https://github.com/frappe/erpnext/issues/56985 )) ([#57006 ](https://github.com/frappe/erpnext/issues/57006 )) ([20255a8 ](20255a8a7f ))
* **patch:** moved create_company_custom_fields from `pre_model_sync` to `post_model_sync` (backport [#56962 ](https://github.com/frappe/erpnext/issues/56962 )) ([#56965 ](https://github.com/frappe/erpnext/issues/56965 )) ([14efd14 ](14efd14384 ))
* **payment reconciliation:** honour user permissions on accounting di… ([#56560 ](https://github.com/frappe/erpnext/issues/56560 )) ([8eb92b8 ](8eb92b8b18 ))
* precision issue causing reconciliation error ([#54043 ](https://github.com/frappe/erpnext/issues/54043 )) ([20df15b ](20df15b3ac ))
* prevent repeatable read related concurrency errors ([019b02a ](019b02adcd ))
* race condition and repeatable read in process pcv ([6d9f5fa ](6d9f5fac76 ))
* recompute transferred qty before deciding work order status ([bc952f4 ](bc952f40d9 ))
* remove company default on cost center in stock entry detail ([a1fe6ce ](a1fe6cee5d ))
* remove incorrect Payable account_type from Customer Deposits in Philippines CoA (backport [#57018 ](https://github.com/frappe/erpnext/issues/57018 )) ([#57061 ](https://github.com/frappe/erpnext/issues/57061 )) ([edfbc71 ](edfbc71135 ))
* rename variant item_code/item_name when attribute abbreviation changes ([97cd1e7 ](97cd1e7144 ))
* render letter head footer in print formats ([fa4d32d ](fa4d32dcdb ))
* replay immutable SLE qty for serial/batch bundle valuation (backport [#56814 ](https://github.com/frappe/erpnext/issues/56814 )) ([#56835 ](https://github.com/frappe/erpnext/issues/56835 )) ([2264e25 ](2264e25cc6 ))
* resolve conflicts ([3aad7fe ](3aad7fee24 ))
* restore Save button on reverse journal entry (backport [#56770 ](https://github.com/frappe/erpnext/issues/56770 )) ([#56772 ](https://github.com/frappe/erpnext/issues/56772 )) ([4573cd1 ](4573cd15a9 ))
* **selling:** update sales order per billed on credit note submission ([224cf19 ](224cf19f33 ))
* set conversion_rate on quotation created from customer ([26905bc ](26905bc142 ))
* show only template items in Variant Of filter ([bebe011 ](bebe011636 ))
* skip item prices tab render for users without item price read access ([c964811 ](c964811293 ))
* skip stock reservation for opted-out production plans ([17598e2 ](17598e2626 )), closes [#56798 ](https://github.com/frappe/erpnext/issues/56798 )
* **stock:** backfill transferred qty for existing pick lists ([903d78c ](903d78cc43 ))
* **stock:** link job card in stock entry created from pick list (backport [#57031 ](https://github.com/frappe/erpnext/issues/57031 )) ([755b9cc ](755b9ccbc3 ))
* **stock:** pick list serial batch posting date ([#57015 ](https://github.com/frappe/erpnext/issues/57015 )) ([7e46be2 ](7e46be2a33 )), closes [#56951 ](https://github.com/frappe/erpnext/issues/56951 )
* **stock:** propagate project from job card to stock entry ([51d2077 ](51d2077eed ))
* **stock:** support quality inspection for stock entry by purpose (backport [#56446 ](https://github.com/frappe/erpnext/issues/56446 )) ([40ca3b5 ](40ca3b5e5d ))
* update BOM operations when routing is changed ([b2e6a39 ](b2e6a39743 ))
* update events order by date asc (backport [#56963 ](https://github.com/frappe/erpnext/issues/56963 )) ([#57056 ](https://github.com/frappe/erpnext/issues/57056 )) ([e2fd061 ](e2fd061b3d ))
* update modified timestamp in item.json ([f602ee0 ](f602ee0e73 ))
* use live source warehouse valuation for internal transfer purchase receipts (backport [#56431 ](https://github.com/frappe/erpnext/issues/56431 )) ([#56677 ](https://github.com/frappe/erpnext/issues/56677 )) ([1da28f2 ](1da28f2278 ))
* validate planned end date is not before planned start date in work order ([745baad ](745baad0d1 ))
* validate reverse GL entries on current date under immutable ledger (backport [#56709 ](https://github.com/frappe/erpnext/issues/56709 )) ([#56752 ](https://github.com/frappe/erpnext/issues/56752 )) ([eea4756 ](eea4756ce9 ))
* validate template and its variant in the same Pricing Rule ([159a253 ](159a2538da ))
### Features
* capture user persona during setup (backport [#56705 ](https://github.com/frappe/erpnext/issues/56705 )) ([#56707 ](https://github.com/frappe/erpnext/issues/56707 )) ([d9aa449 ](d9aa4491f1 ))
* **crm_settings:** auto-update crm sync settings on frappe crm install and uninstall ([cb2a930 ](cb2a930a32 ))
* explain FIFO allocation of fixed Discount Amount on Sales Order ([#56436 ](https://github.com/frappe/erpnext/issues/56436 )) ([62fed1d ](62fed1d562 ))
* **manufacturing:** create material request for raw materials from work order ([#56980 ](https://github.com/frappe/erpnext/issues/56980 )) ([144f92d ](144f92d58e ))
* **sla:** filter service level agreement link by document type (backport [#56954 ](https://github.com/frappe/erpnext/issues/56954 )) ([#56956 ](https://github.com/frappe/erpnext/issues/56956 )) ([393b5d1 ](393b5d1f74 ))
* **stock:** support partial transfer from pick list ([af495ed ](af495ed253 ))
### Performance Improvements
* avoid per-row Warehouse doc fetches in auto reorder job ([39b5e12 ](39b5e12305 ))
* batch bin lookups in delivery note stock update ([697e2c0 ](697e2c0b66 ))
v16.27.0
2026-07-13 07:41:31 +00:00
Diptanil Saha
f94eee3197
Merge pull request #56931 from frappe/version-16-hotfix
...
chore: release v16
2026-07-13 12:09:52 +05:30
Mihir Kandoi
90768c42d8
Merge pull request #57075 from frappe/mergify/bp/version-16-hotfix/pr-57073
2026-07-13 10:46:36 +05:30
ruthra kumar
fd3bebee02
Merge pull request #57023 from frappe/mergify/bp/version-16-hotfix/pr-56801
...
refactor: reversing exchange rate revaluation journals (backport #56801 )
2026-07-13 10:13:57 +05:30
ruthra kumar
431ae6bc93
chore: resolve conflict
2026-07-13 10:02:18 +05:30
Mihir Kandoi
4aed77df0c
fix: make represents company field in purchase invoice ignore user permissions
...
(cherry picked from commit 6729a53fee )
2026-07-12 18:39:28 +00:00
MochaMind
9e95bfe472
chore: update POT file ( #57066 )
2026-07-12 20:25:28 +02:00
Mihir Kandoi
b6821c0ee5
Merge pull request #57044 from mihir-kandoi/fix-job-card-pick-list-transfer-v16
...
fix(stock): link job card in stock entry created from pick list (backport #57031 )
2026-07-12 17:51:50 +05:30
Mihir Kandoi
51d2077eed
fix(stock): propagate project from job card to stock entry
2026-07-12 17:31:22 +05:30
rohitwaghchaure
5642359c10
fix: enforce read permission on ledger preview endpoints ( #57039 )
...
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
Co-authored-by: diptanilsaha <diptanil@frappe.io >
2026-07-12 09:53:17 +00:00
mergify[bot]
4136ca55a7
fix(accounts): retain invoice table on opening invoice creation error (backport #56353 ) ( #57058 )
...
* fix(accounts): retain invoice table on opening invoice creation error (#56353 )
Co-authored-by: diptanilsaha <diptanil@frappe.io >
(cherry picked from commit ad17efe243 )
# Conflicts:
# erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py
* chore: resolve conflicts
---------
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com >
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-07-12 07:45:18 +00:00
MochaMind
2e892be1c1
chore: sync translations to version-16-hotfix ( #56911 )
2026-07-12 13:12:57 +05:30
mergify[bot]
edfbc71135
fix: remove incorrect Payable account_type from Customer Deposits in Philippines CoA (backport #57018 ) ( #57061 )
...
Co-authored-by: Raghav Ruia <168326921+raghavisruia@users.noreply.github.com >
2026-07-11 17:52:48 +00:00
Mohammad Umair Sayed
62fed1d562
feat: explain FIFO allocation of fixed Discount Amount on Sales Order ( #56436 )
...
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
Co-authored-by: Diptanil Saha <diptanil@frappe.io >
2026-07-11 17:41:20 +00:00
mergify[bot]
e2fd061b3d
fix: update events order by date asc (backport #56963 ) ( #57056 )
...
Co-authored-by: Pandiyan P <pandiyanpalani37@gmail.com >
Co-authored-by: nareshkannasln <nareshkannashanmugam@gmail.com >
2026-07-11 18:45:35 +05:30
mergify[bot]
835e32cec7
fix(banking): allow negative balance in bank statement import (backport #56959 ) ( #57054 )
...
fix(banking): allow negative balance in bank statement import (#56959 )
(cherry picked from commit d449ad3b3f )
Co-authored-by: Nikhil Kothari <nik.kothari22@live.com >
2026-07-11 18:18:17 +05:30
Diptanil Saha
04d982fa0d
Merge branch 'version-16' into version-16-hotfix
2026-07-11 18:17:59 +05:30
mergify[bot]
e6a6c13355
fix(financial_statement): render columnar financial statements instea… (backport #56921 ) ( #57053 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
2026-07-11 10:41:49 +00:00
mergify[bot]
24f0989ac1
fix: correct filter handling in Sales Person-wise Transaction Summary + tests (backport #56783 ) ( #56908 )
...
Co-authored-by: Nabin Hait <nabinhait@gmail.com >
2026-07-11 15:28:23 +05:30
mergify[bot]
240fb2c4b8
fix: map stock_qty in apply_price_list_on_item (backport #56869 ) ( #57052 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
2026-07-11 15:26:36 +05:30
Vishnu Priya Baskaran
8eb92b8b18
fix(payment reconciliation): honour user permissions on accounting di… ( #56560 )
2026-07-11 15:04:44 +05:30
Mihir Kandoi
755b9ccbc3
fix(stock): link job card in stock entry created from pick list (backport #57031 )
...
A Stock Entry created from a Pick List against a job card's Material
Request never set job_card, job_card_item, fg_completed_qty or the
'Material Transfer for Manufacture' purpose, so the Job Card did not
recognize the transfer and blocked submission. The WIP warehouse was
also not populated.
Route such pick lists through a job-card-aware branch mirroring the
direct Material Request -> Stock Entry mapper, and set the purpose to
'Material Transfer for Manufacture' in the work order branch so the
WO -> MR -> Pick List flow updates the work order too.
2026-07-10 17:46:57 +05:30
mergify[bot]
67c85ef0af
fix: fetch payment entry reference amounts from invoice (backport #56928 ) ( #57042 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
2026-07-10 11:43:01 +00:00
mergify[bot]
bdba4c8091
fix: display outstanding amount using company default currency (backport #56785 ) ( #57009 )
...
Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com >
Co-authored-by: S Sakthivel Murugan <s.sakthivelmurugan2003@gmail.com >
2026-07-10 15:36:34 +05:30
Mihir Kandoi
c56eb2635a
Merge pull request #57024 from aerele/backport-56923-version-16-hotfix
...
perf: avoid per-row Warehouse doc fetches in auto reorder job
2026-07-10 12:43:56 +05:30
Mihir Kandoi
f96166af5b
Merge pull request #57028 from aerele/backport-56913-version-16-hotfix
...
fix: make trend report based-on and group-by column labels translatable
2026-07-10 12:43:47 +05:30
pandiyan
b8199d88b6
fix: make trend report based-on and group-by column labels translatable
...
based_wise_columns_query() and group_wise_column() built column labels as
raw strings, so headers like Item, Item Name, Customer, Supplier, and
Territory never went through the _() translation function and stayed in
English regardless of the user's language, while period and total columns
translated fine. Build these as column dicts with an explicit _()-wrapped
label instead, so they're translated the same way as the rest of the report.
(cherry picked from commit 015fa68fc0 )
2026-07-10 12:16:45 +05:30
mergify[bot]
20255a8a7f
fix: partial delivery note against pick list (backport #56985 ) ( #57006 )
...
* fix: partial delivery note against pick list (#56985 )
(cherry picked from commit 53af4d53ef )
# Conflicts:
# erpnext/stock/doctype/pick_list/test_pick_list.py
* chore: fix conflicts
Refactor tests for pick list to improve clarity and organization.
---------
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-07-10 06:38:02 +00:00
ruthra kumar
4711a28dd0
refactor(test): for reverse journals as well
...
(cherry picked from commit 65775e59a1 )
# Conflicts:
# erpnext/accounts/doctype/exchange_rate_revaluation/test_exchange_rate_revaluation.py
2026-07-10 06:20:54 +00:00
ruthra kumar
63e5117182
refactor: handle reverse ERR journals in AR / AP report
...
(cherry picked from commit 6838242063 )
2026-07-10 06:20:53 +00:00
ruthra kumar
051757760f
refactor: reversal capability on exchange rate revaluation
...
(cherry picked from commit a0b14c0607 )
# Conflicts:
# erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py
2026-07-10 06:20:53 +00:00
ruthra kumar
277c651a9f
refactor: add payment ledger to ignore link
...
(cherry picked from commit 6a4c5b6062 )
2026-07-10 06:20:53 +00:00
pandiyan
39b5e12305
perf: avoid per-row Warehouse doc fetches in auto reorder job
...
get_item_warehouse_projected_qty() called frappe.get_doc("Warehouse", ...)
inside the per-bin loop to walk up the warehouse hierarchy, re-fetching the
same parent warehouses over and over on sites with nested warehouses. Preload
the warehouse-to-parent mapping with a single query and walk it in-memory
instead, cutting the DB round-trips from O(bins * hierarchy depth) to one
query.
(cherry picked from commit 6beb3d2509 )
2026-07-10 11:48:04 +05:30
mergify[bot]
e1e6176ddc
fix: for purchases do voucher based reposting (backport #56601 ) ( #56608 )
...
* fix: for purchases do voucher based reposting (#56601 )
(cherry picked from commit 5523c15ab8 )
* chore: fix type hints
---------
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-07-10 06:13:01 +00:00
Pandiyan P
7e46be2a33
fix(stock): pick list serial batch posting date ( #57015 )
...
* fix(stock): fall back to current date/time for serial and batch bundle posting datetime
Pick List has no posting_date/posting_time fields, so creating or updating a
Serial and Batch Bundle from a Pick List row crashed with
"TypeError: combine() argument 1 must be datetime.date, not None". Fall back
to today/now when the parent voucher doesn't carry its own posting date.
Fixes #56951
* fix(stock): accept a plain dict for add_serial_batch_ledgers' doc and child_row
The whitelisted add_serial_batch_ledgers only converted child_row into an
attribute-accessible frappe._dict when it arrived as a JSON string, and doc's
type hint only allowed Document | str. Frappe's JSON API delivers both as
plain dicts (see frappe.app.make_form_dict, which parses the request body
with orjson and only wraps the top-level dict, not nested values), so every
real request was rejected before the handler body ever ran: first with a
FrappeTypeError on doc, and once that's fixed, with an AttributeError on
child_row.serial_and_batch_bundle. parse_json already wraps a plain dict in
frappe._dict (and leaves a real Document instance untouched), so routing
child_row through it unconditionally fixes both.
2026-07-10 11:37:50 +05:30
mergify[bot]
2264e25cc6
fix: replay immutable SLE qty for serial/batch bundle valuation (backport #56814 ) ( #56835 )
...
fix: replay immutable SLE qty for serial/batch bundle valuation (#56814 )
(cherry picked from commit ecc8ec672b )
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com >
2026-07-10 04:24:03 +00:00
Mihir Kandoi
7f64dfbccc
Merge pull request #56988 from frappe/mergify/bp/version-16-hotfix/pr-56909
...
fix(stock): rename variant item_code/item_name when attribute abbreviation changes (backport #56909 )
2026-07-09 21:23:33 +05:30
Mihir Kandoi
d4e16b0228
Merge pull request #56994 from frappe/mergify/bp/version-16-hotfix/pr-56925
...
perf: batch bin lookups in delivery note stock update (backport #56925 )
2026-07-09 21:23:20 +05:30
Mihir Kandoi
3bf8dd7297
Merge pull request #56996 from frappe/mergify/bp/version-16-hotfix/pr-56932
...
fix: validate planned end date is not before planned start date in wo… (backport #56932 )
2026-07-09 21:23:11 +05:30
Mihir Kandoi
50a40a7819
Merge pull request #56836 from aerele/fix/wo-status-partial-pick-v16
...
fix(manufacturing): update work order status on partial pick-list transfer
2026-07-09 21:22:49 +05:30
Sudharsanan11
dd264506db
test(manufacturing): add test to validate the work order status on partial pick-list transfer
...
Cover the pick-list flow where a stock entry moves only one of the work
order's required items: material_transferred_for_manufacturing stays 0 (min
fraction) while the status must move to "in process".
2026-07-09 21:07:12 +05:30
Mihir Kandoi
2e535042b4
Merge pull request #57000 from frappe/mergify/bp/version-16-hotfix/pr-56255
...
Fix Variant Of filter to show only template items (backport #56255 )
2026-07-09 20:57:40 +05:30
Mihir Kandoi
7dd7d7939f
Merge pull request #56998 from frappe/mergify/bp/version-16-hotfix/pr-56979
...
fix: update BOM operations when routing is changed (backport #56979 )
2026-07-09 20:52:54 +05:30
Mohsin Akhtar
f602ee0e73
fix: update modified timestamp in item.json
...
(cherry picked from commit 54da9fc27a )
2026-07-09 15:13:13 +00:00
Mohsin Akhtar
bebe011636
fix: show only template items in Variant Of filter
...
(cherry picked from commit 2433129850 )
2026-07-09 15:13:13 +00:00
Mohd Haris
b2e6a39743
fix: update BOM operations when routing is changed
...
The routing field handler only fetched operations from the routing when
the operations table was empty. When a new BOM version is created (via
"New Version"), operations are copied from the source BOM, so selecting a
different routing left the old operations in place - both in the form and
after saving.
Drop the `!frm.doc.operations.length` guard from the routing handler so
that (re)selecting a routing always refetches the operations from that
routing via the existing get_routing method, which clears and repopulates
the operations table.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
(cherry picked from commit 758a837de4 )
2026-07-09 15:12:09 +00:00
pandiyan
745baad0d1
fix: validate planned end date is not before planned start date in work order
...
(cherry picked from commit 2ec780cb35 )
2026-07-09 15:08:02 +00:00
pandiyan
697e2c0b66
perf: batch bin lookups in delivery note stock update
...
update_current_stock() in delivery_note.py used to call
frappe.db.get_value("Bin", ...) separately for every row in items and
every row in packed_items - so a delivery note with 200 items and 200
packed items made 400 separate database calls on every save.
now it groups item codes by warehouse and fetches bin data with one
query per distinct warehouse, then assigns actual_qty/projected_qty to
each row from that result - same values as before, far fewer database
calls, and no cross-product over-fetch across warehouses.
(cherry picked from commit 5da878d25f )
2026-07-09 15:07:00 +00:00
pandiyan
719439f694
test: cover variant item_code/item_name rename on abbreviation change
...
Add regression coverage for the new abbreviation-rename propagation:
a simple item_code rename, item_name derived from a template whose
item_name differs from its item_code, and a manually customized
item_name getting rebuilt rather than left stale.
(cherry picked from commit e718a70b26 )
2026-07-09 15:04:04 +00:00
pandiyan
97cd1e7144
fix: rename variant item_code/item_name when attribute abbreviation changes
...
Item Attribute abbreviations only got baked into a variant's item_code
and item_name at creation time (make_variant_item_code returns early
once item_code is set). Renaming an abbreviation afterwards left every
existing variant stuck with the stale code, silently out of sync with
its own attribute.
Detect abbreviation renames on Item Attribute save, find every variant
using the affected value, and rebuild+rename its item_code via
frappe.rename_doc so linked records follow along. item_name is rebuilt
in lockstep from the template's item_name, even if it had since been
customized, since both fields are meant to be derived from the same
abbreviation.
(cherry picked from commit c0cfe5f363 )
2026-07-09 15:04:03 +00:00