Breaking Changes
- ERPNext adds support for the new app request format in several accounting, buying, and asset actions, so these features handle information sent in a structured way instead of only text. (#56439)
Features
- Adds a New Zealand chart of accounts template for Company setup, so New Zealand companies can start with a local account structure. It includes numbered accounts for assets, liabilities, equity, income, and expenses. (#55571)
- Adds default letterheads for forms and reports so printed documents use the letterhead assigned to them. Only enabled letterheads appear when selecting one. (#54983)
- Adds support for importing bank statements from PDFs that contain text and lets users adjust the tables before import. Also lets users choose which columns are used when importing bank statements from CSV, Excel, and PDF files. (#55559)
- Adds a Sales Invoice action in Pick List so you can create an invoice from the selected items. The action appears only for invoices that use Update Stock. (#55594)
- Adds Secondary Items and Non Stock Items to Work Order, showing items produced alongside the main item and additional costs from the bill of materials. (#55631)
- Adds a Pricing tab to the Item form once it is saved, showing current prices directly on the page. You can click a price to open it or create a new Item Price with the item already filled in, and "View All Prices" appears when more than 10 prices are available. (#54853)
- Adds a side-by-side comparison view in Item Defaults so default values appear next to each other. (#55017)
- Product Bundle now keeps a history of changes, so once a bundle is submitted it cannot be edited and updates are saved as a new version with "Create New Version". Existing Product Bundle records are converted to the new format, so documents that use a bundle keep the bundle details they were created with. (#55702)
- Adds the "Item Where Used" report so users can see where an Item is used in BOMs and Product Bundles, along with related references such as variants and alternatives. It includes Item, Company, and Section filters. (#55660)
- Adds a new Product Bundle field to line items in Sales Order, Delivery Note, Sales Invoice, POS Invoice, and Quotation, so each line can choose a specific version of the bundle. The chosen version is carried into linked purchase forms and used when the bundle is expanded into its items. (#55738)
- Adds a Refunded status to Subscription records when outstanding invoices are fully credited, and returns them to Active after those invoices are settled. The Subscription form also shows the current and next billing period and a 12-month billing calendar. (#55617)
- Disabled Product Bundle records no longer appear when you add items from a bundle, and the Product Bundle list now shows whether each bundle is Active or Disabled. The "Product Bundle Balance" report now leaves out disabled bundles, and when you copy a Product Bundle, the new copy starts enabled. (#55791)
- Adds a short note to the Update Stock checkbox in Sales Invoice and Purchase Invoice. The note explains that checking it updates stock and creates accounting entries together. (#55868)
- Adds a Stock Settings option that lets users edit the quantity in the stock unit directly in Stock Entry. When the option is on, ERPNext updates the unit conversion so the entered quantity stays the same. (#55877)
- New installations use Frankfurter v2 as the default source for exchange rates in Currency Exchange Settings. Only System Manager users can change Currency Exchange Settings, and exchange rates stop updating when Disabled is turned on. (#55755)
- Adds a Show Alternate UOM Balance option to the "Stock Balance" report so each item can show one alternate unit and its converted balance quantity. (#55851)
- Adds a "Set Opening Stock" action to Item records so users can enter opening stock after the item is saved. For items with serial or batch numbers, it opens Stock Reconciliation so serial and batch details can be entered there. (#54570)
- Adds an Allow Negative Stock for Batch checkbox on Batch. The system checks this box before the global setting in Stock Settings, so you can allow negative stock for specific batches. (#56079)
- Adds Cost Center to Request for Quotation line items and keeps it on the resulting Supplier Quotation. (#55931)
- Adds Allocate Full Amount to Stock Items to Purchase Taxes and Charges on Purchase Receipt and Purchase Invoice, and it is on by default, so actual charges are applied only to stock and asset items instead of being shared with non-stock items. When multiple actual charges are entered, each charge is distributed separately so the item values match the charge amounts. (#56102)
- Adds an Alias field to Customer and Supplier and makes it searchable, so records can be found by an alternate name. (#56284)
- Updates Purchase Invoice so actual charges are added in full to the cost of stock and asset items when Allocate Full Amount to Stock Items is selected. If the option is off, only the part of the charge that applies to stock and asset items is added. (#56223)
- Adds a Frappe CRM sync toggle in CRM Settings and a Frappe CRM Allowed User list for controlling who can send data from Frappe CRM to ERPNext. Turning the setting on adds the related
crm_dealfields on Quotation and Customer, and turning it off removes them. (#56268) - Adds the Project field to Invoices in Opening Invoice Creation Tool. The selected project appears on the invoice line created from that row. (#54662)
- The "General Ledger", "Trial Balance", "Balance Sheet", and "Profit and Loss" reports now use a faster data source on supported sites, so they load faster. (#56304)
- Adds a Standard Cost option to Valuation Method in Item and Stock Settings, so stock is valued at a fixed rate from Item Standard Cost records. Standard Cost items require a Purchase Price Variance Account, and rate changes revalue current on-hand stock and post the difference to that account. (#56570)
- Adds checkboxes to the "Accounts Payable" report and a "Create Payment Entries" button for selected Purchase Invoice rows. The new entries are left in Draft for review, with several invoices from the same supplier and Payable Account combined into one entry. (#56199)
Bug Fixes
- Updates the Item form’s "Create Variant" dialog to show numbers without decimal places when all range values are whole numbers. It also uses a whole-number entry in that case. (#55561)
- "Budget Variance Report" now shows matching Budget Against options when a Company is selected. The Company filter now appears at the top of the report filters. (#54840)
- The "Budget Variance Report" now shows budget and actual amounts when you select a parent Cost Center, including the cost centers beneath it. (#55562)
- The app now checks permissions before showing details for Customer and Supplier. (#55491)
- Updates Sales Invoice tax calculations for prices that already include tax to use the amount before rounding when calculating tax. This reduces small mismatches in the total, especially for currencies without decimal places. (#52512)
- Keeps the "Create > Purchase Receipt" action available on Purchase Order when Over Delivery/Receipt Allowance still leaves quantity to receive. A draft Purchase Receipt now pre-fills the remaining quantity within that allowance instead of leaving the line out once the ordered quantity is received. (#55247)
- Related documents now use the billing, tax, payment terms, and contact details of the new customer or supplier instead of copying them from the original document. (#55336)
- Adds missing support for special characters in some displayed text, so affected names and labels appear correctly. (#55574)
- Adds custom dimension filters to the "Gross and Net Profit Report" so you can narrow the results by the dimensions in your accounts. (#55110)
- Uses the stock received but not billed account for the Expense Account on Purchase Receipt and Purchase Invoice forms that add stock, while other purchase forms continue to use the default expense account. (#55149)
- Updates Purchase Invoice validation to include asset items when Purchase Receipt Required is enabled in Buying Settings. This asks for a purchase receipt for asset items in the same cases as stock items. (#55150)
- Fixes formatting issues in report printouts so the content appears in the right place on the page. (#55151)
- Custom column labels in Item apply only in the list view. The report view keeps its own column names. (#55591)
- Updates the labels of percentage fields in Stock Settings to include the % sign. (#55309)
- Reorganizes Accounts Settings into separate tabs for billing, payments, credit limits, assets, account closing, reports, and other settings. This makes the page less crowded. (#55470)
- Updates the stock availability indicator in Sales Order to consider quantities already delivered. This prevents partially delivered items from showing as low on stock when enough stock remains. (#55597)
- Duplicating Customer and Supplier records now leaves the new copy without the original primary contact and address details. (#55421)
- Subscription billing now creates the next invoice when the automatic billing process runs slightly late, instead of waiting for the exact date. It also uses the matching deferred revenue or expense setting on items in the plan and avoids errors when a subscription is missing a plan or the current invoice is missing a Due Date. (#55554)
- In Quotation, the Quotation To field now includes CRM Deal, so quotations linked to a CRM Deal keep that selection when saved. (#55536)
- Blocks sales documents from using the Sample Retention Warehouse setting in Stock Settings. Retained sample stock cannot be sold through those documents. (#55613)
- Submitted Work Orders now switch to In Process when Skip Material Transfer to WIP Warehouse is turned on, even if no material transfer has been recorded yet. (#55641)
- Fixes Work Order so it accepts the details from the form when items and operations are loaded from a bill of materials. This keeps the action from failing in those cases. (#55646)
- The batch prefix in Stock Settings is now treated as plain text when generating Batch names, so text that looks like a template does not change the generated name. (#55661)
- Accounts Managers can now edit Terms and Conditions, while Accounts Users can still view, print, export, and share them. (#55674)
- Adds email-format validation to the Email field in Appointment, so invalid addresses are rejected before saving. (#55679)
- The "Profit and Loss" report now shows 0% when both compared amounts are zero and no longer shows null% for rows with missing amounts or a zero amount in the previous period. The growth view now skips empty spacer rows. (#54684)
- Skips blank rows in financial statements so they do not appear with the usual formatting. Removes an extra blank row from the "Cash Flow" report. (#55101)
- Saving a new Subscription creates the first invoice, including any billing periods that have already passed. Subscription status updates when linked invoices or payments change. (#55615)
- The system now requires permission to add a new Account, and the
ignore_permissionsflag no longer skips this check. (#55665) - The "Update Items" action on submitted documents now checks the current workflow state's Only Allow Edit For role before allowing item changes. Users who move a document into that state no longer keep edit access unless they have that role. (#55662)
- Hides the "Inter Company Purchase Invoice" option on Sales Invoice when no quantity is left to invoice. It also blocks creating a new Purchase Invoice in that case instead of opening a blank Purchase Invoice. (#55639)
- Allows Stock Entry to update the linked Project's consumed material cost without edit access to the Project. This prevents a permission error when submitting the Stock Entry. (#55645)
- Only System Manager users can create or update the Print Format for Cheque Print Template. The "Create Print Format" and "Update Print Format" buttons no longer appear for other users. (#55708)
- The BOM form now prevents the finished good from being listed in Secondary Items. This avoids the same item appearing twice with different costs. (#55710)
- The "Inactive Customers" report now limits the document types you can choose to supported options, so unsupported selections are less likely to cause errors. (#55627)
- The "Update Items" dialog now shows only the item code in the Item Code column, instead of the code and item name together. (#55718)
- Adds permission checks to POS Profile, Purchase Invoice, Issue, and the "Supplier Quotation Comparison" report, so only users with access can use them. (#55709)
- Adds access checks before account lookups show balances or related document details. Payment Entry also checks access before loading outstanding documents. (#55487)
- Submitted Stock Reconciliation records can no longer be edited. (#55716)
- Adds validation to Stock Entry disassembly entries so the finished item consumed and raw material quantities match the source record. It blocks changes to the unit, conversion factor, or quantity when they would alter those amounts. (#55724)
- Allows the required Job Card actions to run. Removes duplicate quantity and completion time entries so each value is recorded only once. (#55737)
- The "Inactive Sales Items" report now uses safer database queries when generating its results. This reduces the chance of harmful input changing what the report shows. (#55748)
- Prevents submitting a Job Card while it is On Hold. Users resume and complete the job before submitting it. (#55760)
- A "Send to Subcontractor" Stock Entry can now use stock reserved for the same Work Order. This avoids the entry being blocked when the materials are already set aside for that order. (#55765)
- Passes the current document to regional round-off rules so they can use its details when choosing the round-off account. (#55758)
- The "Item Where Used" report now shows disabled Product Bundle entries, so bundles that are no longer active are visible. (#55769)
- Adding taxes from an Item Tax Template now fills in the Category and Add/Deduct Tax fields automatically. (#55753)
- The "Stock Ageing" report now lets you select more than one item at once. It no longer stops with an error when multiple items are selected. (#55774)
- Stock Reservation no longer blocks subcontracting operations in the same Work Order. (#55778)
- Adds validation for the PDF Name field in Process Statement Of Accounts and checks permission before automatic emails are sent. (#55781)
- In Sales Invoice, when Is Debit Note is checked, Update Stock is hidden and turned off. If Update Stock is still on, saving the invoice shows an error and does not change inventory. (#55274)
- "Stock Ageing" now loads batch valuation data before it processes stock entries, which helps avoid crashes when items with batch numbers are included. (#55789)
- The "Get Items from Product Bundle" dialog now adds items from versioned Product Bundle entries again instead of showing no items. It only lets you choose bundles that have been submitted. (#55793)
- The BOM form now fills the operations table from a selected Routing when With Operations is enabled and the table is empty, even if that option is turned on after the Routing is already chosen. This avoids having to choose the Routing again to show the operations. (#55813)
- The "Sales Person Wise Transaction Summary" report now accepts only Sales Order, Sales Invoice, or Delivery Note in the Document Type filter. (#55812)
- Adds permission checks to the receivable and payable reports so users with Customer or Supplier permissions see only the balances they can access. (#55695)
- Fixes several actions in BOM Creator that could fail while creating a bill of materials. (#55827)
- When an Employee changes between Active and Inactive, the linked User record is enabled or disabled, and the action appears in its activity log. (#55820)
- Makes UOM required in the Item UOMs table, so rows without a UOM cannot be saved. (#55838)
- Fixes a BOM Creator issue that prevents some actions on the page from working. (#55832)
- The warning popup no longer appears on Purchase Invoice when Update Stock is enabled and the expense account changes to the inventory account. The expense account still changes automatically in this flow. (#55845)
- Adds access checks to Workstation actions, so users need the right access before they can start, finish, or edit a Job Card. It also limits access to related Workstation and Job Card information. (#55844)
- Copies the item Cost Center from a Delivery Note to the matching item in the new Sales Return. (#55853)
- Adds a CRM Settings option that lets the contact form create Opportunity records when turned on. It also turns that setting off automatically if Contact Us Settings are disabled and limits how often the contact form can send messages. (#55841)
- Saving an Employee now enables or disables the linked User account after the record is saved, matching the employee's Status. Employees without a linked User account can now be saved without an error. (#55835)
- Adds access checks before actions that create, update, submit, cancel, delete, or rename records, so only users with the right permissions can use them. (#55849)
- The Bill of Materials comparison tool now shows item codes and the values being compared as plain text in the comparison table. Special characters in those values no longer change how the comparison is displayed. (#55874)
- The Lead form no longer fills the Image field with a Gravatar photo link. (#55880)
- Updates the "Delete Transactions" confirmation on Company to show the company name in bold. Users see the exact name they need to type before confirming the deletion. (#55906)
- Fixes a regression that sometimes leaves bank account details for customers and suppliers blank in payment forms after recent security changes. (#55901)
- Recalculates the incoming rate for Purchase Receipt and Purchase Invoice documents when stock is reposted. This uses the rate recorded on the purchase document instead of a previously saved rate. (#55926)
- Transactions now check their Posting Date or Transaction Date against a fiscal year before they are saved, even when the form does not include a Fiscal Year field. If no matching fiscal year exists, they cannot be saved. (#55930)
- Updates the "Stock Balance" report to use the corrected value from Stock Reconciliation entries, so the balance reflects that correction instead of adding each change on top of it. (#55928)
- Removes payment entries from non-POS return Sales Invoices when they are saved, so old payment details do not appear in bank reconciliation. (#55903)
- Adds a filter to the Account field in Budget so only income and expense accounts appear. (#55934)
- When a Payment Entry is created from an invoice, the Source Exchange Rate is based on the payment’s Posting Date instead of carrying over the invoice’s exchange rate. (#53152)
- Restricts account balance checks to internal use. (#55956)
- Secondary items in BOM can now be saved with zero quantity, so the actual quantity can be entered later during manufacturing. (#55852)
- Allows users to create Quality Inspection records from Stock Entry forms with purposes other than Manufacture. The system marks the inspection as incoming or outgoing based on the entry's purpose. (#55830)
- Updates the "Financial Ratios" report so "Fixed Asset Turnover Ratio" uses the value of fixed assets after depreciation instead of total assets. This means the ratio is based on fixed assets rather than all assets. (#55896)
- Adds the payment currency and exchange rate to Payment Entry ledger entries, so the "General Ledger" report shows debit and credit amounts in that currency for payment entries. (#55785)
- Amending a reconciled Payment Entry, Journal Entry, Purchase Invoice, or Sales Invoice clears the Clearance Date on the amended copy, so the previous date does not carry over. (#55947)
- Updates the BOM Secondary Item last updated time so recent field changes are picked up when the system updates. (#55982)
- Adds filters to the Item field in Batch so only stock items that use batches appear in the selection list. (#55985)
- When a purchase includes both stock and non-stock items, the tax amount assigned to non-stock items is excluded from the stock value. (#55971)
- Updates Material Request Transfer Status to include both direct transfers and in-transit transfers, so it shows "Completed" once all requested items are transferred. (#55974)
- System Managers can now create, edit, and delete Driver records. (#55978)
- Adds a Recalculate Valuation Rate checkbox in Repost Item Valuation to update the item valuation rate during reposting instead of leaving the previous rate in place. (#55983)
- The Company delete dialog now shows the company name in the warning and confirmation title instead of the generic "this company" text. This makes it clear which company's transactions you are about to delete before you confirm. (#56021)
- PostgreSQL now handles stock reservation and pick list actions the same way as MariaDB, so stock updates stay consistent between databases. The "Stock Ageing" report now completes in PostgreSQL even when it needs to look up other stock details, and Opening Invoice Creation Tool keeps the rest of an import batch when one invoice fails. (#56025)
- For PostgreSQL sites, item selection now ignores the old
0000-00-00value in End of Life, so active items remain available when creating a Work Order, in reorder suggestions, and in the "Stock Projected Qty" report. (#56033) - Updates 12 reports to meet PostgreSQL’s stricter grouping rules. They now run on PostgreSQL without changing their results on MariaDB. (#56036)
- Allows partial raw material transfers from a Work Order through a Pick List when only part of the needed stock is available. The transfer amount now matches what is still left to transfer instead of dropping to zero after a partial transfer. (#55807)
- Updates how several accounting, manufacturing, and stock features retrieve their data to match PostgreSQL's stricter rules, so the affected features can work with PostgreSQL databases. (#56037)
- Updates several reports and Work Order processing to use database functions that also work on PostgreSQL, so those parts run on PostgreSQL as well as MariaDB. (#56040)
- Prevents a duplicate exchange gain and loss journal entry when one already exists. Leaves the Balance Serial No field blank in the "Available Serial No" report when no serial numbers are available. (#56041)
- "Stock Ageing" now keeps the existing age ranges for items without serial numbers in Stock Reconciliation. It only resets age ranges for items with serial numbers. (#56042)
- Asset depreciation records now include the linked Asset details, so they work on PostgreSQL. Invoice status updates now check the rounding setting Disable Rounded Total and the POS setting Is POS directly, so they work on PostgreSQL too. (#56045)
- The Budget form now prevents adding or deleting Budget Distribution rows, and each row must include Start Date, End Date, Amount, and Percent. The "Budget Variance Report" now skips Budget Distribution rows with missing Start Date or End Date instead of stopping with an error. (#56030)
- Updates "Items To Be Requested", "Material Requests for which Supplier Quotations are not created", and "Requested Items To Be Transferred" so these reports work on PostgreSQL too. (#56081)
- Adds a Show Opening Entries option in Process Statement Of Accounts for the "General Ledger" report. This allows statements to include opening balance entries when they are the only entries available. (#55504)
- The system now checks Journal Entry records marked as Opening Entry when you save them. If a submitted Period Closing Voucher already exists for the company, the entry is blocked and a message explains why. (#56087)
- When an item appears more than once in a BOM, the "BOM Stock Analysis" report and manufacturing planning now keep those lines separate, so each one uses the matching sub-assembly. Material transfer quantities now stay with the correct item when one item is used both directly and as a replacement for another item. (#56090)
- When a Sales Invoice is linked to more than one Sales Order, its amount is split between those orders when updating Payment Terms Status, so each order reflects only its share of the invoice. (#56101)
- Fixes Pick List lookups on Postgres and keeps search suggestions in the same order. The POS Invoice return lookup matches serial numbers even if the letter case is different, and the "Lead Conversion Time" report leaves out entries without a first contact date. (#56105)
- Unchecks Is Debit Note when creating a sales return from a Sales Invoice, so the return isn't marked as a debit note. (#56055)
- In Serial No, the Work Order field now excludes cancelled Work Orders from search results. (#56098)
- Requested amounts in budget checks are now calculated using each line item's quantity and rate, so requests with different prices are totaled line by line. Budget checks also support PostgreSQL databases. (#56112)
- The "Sales Payment Summary" report now works on Postgres databases too. POS invoices can now be filtered by Customer. (#56113)
- Renaming an Item Attribute value updates existing Item variants that use it. This avoids errors when saving those Item variants. (#56118)
- Fixes Payment Entry tax calculations when entries are created through the API and the payment amount already includes tax. Missing tax amounts are treated as zero, so the tax total and remaining amount are filled in. (#56104)
- Updates the Accounts Receivable report to show future payments from Journal Entry separately for each invoice they reference. The report no longer rolls the full amount into a single invoice line. (#56089)
- Removes an unused warehouse lookup from Sales Invoice POS invoices. Warehouse values still come from the existing POS Profile settings. (#56085)
- Changing the date or exchange rate on a multicurrency Sales Invoice or Quotation keeps the item rates and tax amounts you entered. The amounts shown in your company currency still update with the new rate. (#55899)
- Corrects the Workstation test record to use a warehouse that already exists. This avoids a warehouse not found error on systems where letter case matters. (#56129)
- A Stock Closing Entry created after a previous one now reads the earlier Stock Closing Balance correctly. This prevents later closings from stopping with an error. (#55898)
- Updates Subcontracting Inward Order so the Rate reflects the remaining balance after items are returned or used; it no longer uses the full received quantity. (#55920)
- Limits Chart of Accounts Importer to users with the Accounts Manager role and checks that the user can edit the selected Company before it imports a new chart of accounts. The importer deletes related records for that company only when the user has permission. (#56132)
- Creating another Project for the same Sales Order keeps the existing Project link on the Sales Order instead of replacing it. A warning appears when another Project is already linked to the Sales Order. (#55897)
- Bank Guarantee now lets you choose Reference Document Type from Sales Order or Purchase Order. It shows the Customer field for Sales Order and the Supplier field for Purchase Order. (#55265)
- Updates Stock Entry to round additional cost amounts the same way before they are posted. This reduces small leftover balances in the Stock Adjustment account. (#56077)
- Adds a permission check in Exchange Rate Revaluation before it shows Account details. Removes public access from a gross margin report function. (#56191)
- Fixes PostgreSQL errors when loading secondary items on Job Card and disassembly lines in Stock Entry. (#56197)
- Fixes BOM component lists on Postgres by collecting item details in a way Postgres accepts. Manufacturing forms and reports can show their component lines again. (#56196)
- Shows only matching Party Type options in Journal Entry based on the selected account's Account Type, so unrelated party types do not appear. (#56155)
- Adds a "Partially Transferred" status to Job Card when only some raw materials are transferred, and keeps the "Material Request" and "Material Transfer" buttons visible while any raw material still needs to be transferred. (#56187)
- Updates the "Procurement Tracker" and "Purchase Order Analysis" reports so they work on sites that use Postgres. "Procurement Tracker" now shows each Purchase Order line on its own row instead of combining some lines into one row. (#56207)
- Updates Item so barcode checks, linked price records, and related stock records use PostgreSQL-compatible lookups and updates. When items are merged, duplicate stock reconciliation entries are checked with a PostgreSQL-friendly rule. (#56220)
- The "Work Order Stock" report now runs on sites using Postgres because it includes all values used in its stock calculation. (#56208)
- Prevents the "Available Batch" report from failing on Postgres when batch details are included. Updates Item Attribute validation so variant items are detected correctly on Postgres. (#56209)
- Fixes duplicate name handling for Customer records on Postgres so a record with an existing name now saves with the next available suffix instead of failing. (#56213)
- Fixes the Requested Amount calculation in Budget for Material Request records on PostgreSQL. It also fixes Subcontracting Inward Order checks on PostgreSQL when more items are delivered than planned. (#56215)
- Restricts the Project Update daily reminder to project managers and sends reminders to the project's team members. The email summary now shows only the update date and time, and the reminder works on PostgreSQL again. (#56211)
- Updates Repost Item Valuation so its duplicate check uses a date-and-time comparison that works on PostgreSQL. This lets duplicate reposts be marked as skipped instead of stopping the process. (#56219)
- The "Stock Ledger" on Postgres now matches serial numbers even when they use different capitalization. When several stock entries share the same Posting Date, it now chooses the same one instead of relying on the date alone. (#56218)
- Updates Stock Entry so it tracks which original item is replaced by an alternative item in manufacturing and subcontracting entries. This also works on both MariaDB and Postgres. (#56221)
- Fixes the "Production Planning" report on Postgres and shows the total quantity on order for each item and warehouse instead of taking a single purchase order line. (#56224)
- The Project timeline now uses the day of each timesheet entry instead of the exact time, so it works with Postgres. (#56225)
- Renaming an Item Attribute Value now updates the related Item variants on Postgres. This removes the error that could stop the rename. (#56226)
- Discarding a document now changes Status to Cancelled only when the document has a Status field. (#56228)
- The Purchase Invoice list in Landed Cost Voucher on PostgreSQL databases now checks the invoice amount directly. The list loads instead of showing an error. (#56229)
- Updates the "General Ledger" report to use
remarkswhen General Ledger Remarks Length is set in Accounts Settings. This lets the report run on Postgres when that setting is used. (#56227) - The Lost Quotations % column in the "Lost Quotations" report now shows fractional percentages for smaller groups on Postgres sites instead of rounding them down to 0%. (#56230)
- The supplier portal list for Request for Quotation now shows submitted requests for the chosen supplier. It keeps the newest ones at the top. (#56231)
- The Timesheet portal list now shows the linked invoice for billed timesheets. It uses the invoice from the Timesheet or its line item when available. (#56233)
- Updates how stock entries look up serial-number values so the check uses only the data it needs. The recorded values stay the same. (#56250)
- Keeps duplicate Bank Account entries from stopping bank account linking in Plaid Settings and company setup. When one account already exists, the rest of the process continues. (#56252)
- Uses the original item name when checking a variant BOM on PostgreSQL, so variant Work Orders are not rejected. Records the payment reconciliation status as a number in Process Payment Reconciliation, so payments can be marked as reconciled. (#56251)
- When Stock Reconciliation is reposted, the system now uses the original Valuation Rate from the linked Stock Reconciliation Item instead of the rounded value already saved. (#55960)
- The "Work Order Stock" report now keeps the same item on one line when a BOM lists it more than once. It shows the combined quantity from those lines instead of splitting the item into separate lines. (#56260)
- Corrects the Import MT940 Format label in Bank Statement Import so it is spelled correctly. (#56128)
- Updates the "Sales Order Trends" and "Purchase Order Trends" reports to keep the same item, customer, or supplier on one row even when saved details differ between documents. This avoids duplicate rows and keeps totals together in these reports. (#56265)
- Profile pictures in project summary emails and project pages now display correctly when the image link contains special characters. (#56269)
- Adds a read permission check when viewing Lead details, so only users with access can see them. (#56272)
- The "Procurement Tracker" report again shows one row for Purchase Order lines with a blank Material Request Item, instead of splitting them into separate rows. (#56275)
- Adjusts how new Customer names are numbered on Postgres so names with extra text after the number are counted the same way as in MariaDB. This keeps the next Customer name in order. (#56276)
- Sorts the account columns in the "Sales Register" report case-insensitively, so account names appear in the same order on MariaDB and Postgres. (#56277)
- The "Purchase Register" report now lists account columns in the same order on MariaDB and PostgreSQL. It sorts account names while ignoring letter case, so the column order stays consistent across both databases. (#56278)
- Fixes the error message shown when the selected Finished Good Warehouse on a manufacture entry does not match the related Work Order, so users see the intended error instead of an unexpected error. Prevents manufacture entries from failing when no raw materials are listed. (#56279)
- Adds tests that check only users who can edit an Issue can change its Status. (#55488)
- Opportunities marked as Replied now close automatically after they stay inactive for the number of days set in Close Replied Opportunity After Days in CRM Settings. Existing sites with that setting left blank are set to 15 days. (#56296)
- The item search in Purchase Order now shows items linked to the selected supplier, even when the same item is also linked to another supplier. (#56300)
- On the Address list page, each row now opens the Address form, and the address text is shown directly instead of being built while the page loads. (#56306)
- The Commission Rate field in Sales Person and Sales Team now uses a percentage format instead of plain text. Existing commission rates are converted during upgrade, including rates entered with a percent sign, and blank or non-numeric values are set to 0. (#56247)
- Uses the standard Naming Series dialog when naming documents instead of a separate custom dialog. (#56309)
- The Product Bundle form no longer shows the banner. It now uses the same button color as Bill of Materials. (#56308)
- Importing a Lead without a name, company, or email no longer crashes when mandatory checks are skipped; the lead name is left blank in that case. (#56293)
- Hides the extra company-currency fields on transactions when the transaction already uses the company currency, and shows them again when another currency is used. It also removes the repeated currency label from those fields in transactions that use the company currency. (#54691)
- The POS Profile Item Group filter now uses the selected item groups, so matching items appear in the POS screen. (#56328)
- The "Sales Analytics" report now shows order type rows in the same, case-insensitive order on MariaDB and PostgreSQL. (#56329)
- Adds a final alphabetical sort when choosing the payer address in "IRS-1099", so the report shows the same address when a company has multiple addresses. (#56334)
- Fixes the supplier-based Material Request picker on PostgreSQL sites, so it shows matching requests instead of showing an error. It also keeps those results in a consistent order. (#56340)
- Fixes the Batch picker on PostgreSQL sites so it shows matching batches instead of stopping with an error. It also leaves Manufacturing Date and Expiry Date blank when a batch does not have those dates, instead of showing bare “MFG-” or “EXP-” text. (#56339)
- Fixes four lookups and reports that can fail on PostgreSQL sites. It updates an EDI code lookup, the item picker in Sales Order and Subcontracting Order, the opening balance section of the "Stock Ledger" report, and the tax account lookup in UAE VAT Account. (#56341)
- Picked quantities in Serial and Batch Bundle are now kept separate by batch and warehouse, so multiple batches do not get merged into one total. The "Lead Details" report now leaves out empty address lines, which removes stray commas from addresses. (#56342)
- The "Material Requirements Planning" report now calculates lead times using decimal values instead of whole numbers. This prevents some planned release dates from shifting by a day. (#56343)
- Hides the Commission Rate, Total Commission, and Amount Eligible for Commission fields in Sales Order, Delivery Note, Sales Invoice, and POS Invoice until a Sales Partner is selected. Stops those commission values from being copied when a document is duplicated or amended, and shows the Commission Rate immediately when a Delivery Note or Sales Invoice is created from another document. (#56246)
- When you create purchase documents or a Timesheet from a Project, the new document now uses the Project's Company when it is set, instead of your default company. (#56350)
- Payment Reconciliation now respects the accounting dimensions a user can access when listing unreconciled entries. Users with limited access see only entries they can open. (#55803)
- Uses decimal lead times in Master Production Schedule, so planned release dates account for partial-day lead times instead of rounding them down. (#56344)
- Handles zero-quantity batches in batchwise stock valuation on PostgreSQL by returning no rate instead of raising a division error. This lets the system move on to the next valuation method when a batch has no net quantity. (#56361)
- Removes an extra
distinctsetting from the portal Project list, keeping the project order intact on PostgreSQL sites. (#56362) - Allows tax rate details from an Account to be fetched when needed, instead of returning a permission error. (#56345)
- Forms can load payment terms again from a selected template, avoiding the access error that blocked them before. (#55850)
- Updates the "Asset Depreciations and Balances" report to check whether Disposal Date is set instead of comparing it with 0. This avoids a PostgreSQL error when the report runs. (#56367)
- Makes Item Code mandatory in Job Card Item, so each row is linked to an item before the job card is saved. (#56364)
- Fixes "Customer-wise Item Price" report on PostgreSQL so it loads without error when showing items marked as selling. Fixes Employee deactivation on PostgreSQL so the linked Sales Person record is disabled when an employee leaves. (#56370)
- Stock quantity limits no longer apply to items that are not kept in stock, because those limits are meant for physical goods. (#56335)
- Adds checks for zero values in calculations across several reports and forms, so they keep working when a total or quantity is zero instead of showing an error. (#56368)
- The "Trial Balance (Simple)" report now shows one Finance Book value for each summary row, so it loads on PostgreSQL. The "Sales Partners Commission" report removes a broken sort and no longer errors when Amount Eligible for Commission is zero. (#56369)
- Keeps the Quality Inspection item search sorted by Item Code on PostgreSQL. Search results stay in the same order even when there are more matches than fit on one page. (#56372)
- The Point of Sale screen now uses the most recent item price instead of the undated price when both are available. The stock traceability report now runs when a quantity value is zero, and some reports based on Financial Report Template now allow text searches on number fields without failing. (#56378)
- Updates Customer and Supplier dashboards to show advance balances as "Total Advance Paid" or "Total Advance Received" instead of "Total Unpaid". The amount is shown without a minus sign. (#56337)
- The Budget error message now explains that a budget cannot be assigned to an account whose Root Type is not Income or Expense. (#56390)
- In Payment Entry, changing the exchange rate keeps the foreign-currency amount you entered unchanged while recalculating the amount in your company currency. (#56136)
- Removes a custom change handler from POS Opening Entry, so edited Opening Amount values stay in the current row instead of resetting to 0. (#54591)
- Updates Job Card timing so it starts once an employee is selected if no employee is assigned yet. The time spent on that selection is not counted in the recorded time. (#56405)
- Fixes BOM checks for variant items on PostgreSQL by using the exact item code when checking the related item. This lets Work Order validation pass when a variant uses its template BOM. (#56407)
- Transaction Deletion Record now skips child tables that are not stored in the database, so deleting transactions does not stop with an error about a missing table. (#56421)
- Keeps the cost rate used for internal transfers unrounded when item values are recalculated, reducing small rounding differences in the recorded costs. (#56420)
- Printed documents without a Company field now leave the header blank instead of showing
None. The letterhead also no longer stops with an error in this case. (#56432) - Aligns how Item Price, Serial and Batch Bundle, and Pricing Rule entries with missing dates or blank priorities are sorted on PostgreSQL. This keeps the chosen price, serial number, or rule from changing when one of those values is empty. (#56453)
- Updates item-level discount handling in Sales Invoice and Sales Order so manual item prices and discount percentages are calculated separately. This keeps the amount posted to the discount account aligned with the actual discount given. (#56315)
- The Prospect form now shows only linked Opportunity records you can access. (#56463)
- Rewords several messages shown in Accounts, correcting grammar and phrasing. It also adjusts the text so translated versions can place the parts in a different order when needed. (#56464)
- Refines the wording of user-facing error messages in the Assets module and fixes several messages so they translate correctly in other languages. (#56470)
- Updates several error messages in the buying module with clearer wording and numbered placeholders, so translated versions can place the message parts in a different order. (#56474)
- Adds the "Rename" action to the Quality Inspection Parameter form, so users can change a parameter name from the menu instead of deleting the record and creating it again. (#56127)
- In Purchase Receipt, the "Purchase Receipt Serial and Batch Bundle Print" format no longer looks up serial or batch details for each line item in the main part of the printout, which prevents a crash when some items do not have that information. (#56559)
- Keeps a Posting Time of 00:00:00 in Repost Item Valuation instead of replacing it with the current time. (#56571)
- Prevents saving an Accounting Period with an End Date in the future or a Start Date after the End Date. (#56551)
- Updates Stock Reconciliation after stock entries are reposted so Difference Amount and the quantities and rates in each row match the recalculated stock figures. (#56574)
- When you copy a Supplier or Customer, the Alias field stays empty instead of carrying over the previous value. (#56586)
- Converts Outstanding Amount to the company currency in "Sales Register" and "Purchase Register". (#54597)
- The "Stock and Account Value Comparison" report now reposts purchase entries from the original purchase record instead of by item and warehouse. This lets the report update the affected purchase record directly when its stock and accounting values differ. (#56601)
- When you start processing a Process Period Closing Voucher, the system checks access on that form instead of on Process Payment Reconciliation. This keeps the check tied to the voucher being processed. (#56606)
- Fixes Transaction Deletion Record so Address records linked to a Lead are deleted when the related transaction is removed. (#56614)
- Adds the item row's Project to Purchase Receipt accounting entries when it is set. This lets each item keep its own project instead of using the receipt's Project. (#56568)
Performance Improvements
- Line items now only check the valuation-rate setting when the customer or supplier is internal. Payment Request now only checks payment schedules when they exist. (#55556)
- ERPNext checks linked purchase, sales, and subcontracting documents and shows all line items blocked by closed or on hold documents in one message. It also skips line items that are already fulfilled by another linked document. (#54798)
- Adds a combined index to Serial and Batch Entry for searches by Serial No and Warehouse, which helps those searches run faster. It also removes older separate indexes from Serial and Batch Entry. (#56032)
- Delays loading some ERPNext code until it is needed, so command-line commands start faster. (#56437)
Other Changes
- Adds missing 6% and 0% VAT options for Belgium in the setup tax list and formats the 12% rate as
12.00for consistency. (#54719)
Other Changes
- When no discount is set, the Discount Date stays blank in the payment schedule. (#55462)
- A paid purchase return no longer marks the original Purchase Invoice as overdue. The Write Off Account field on Purchase Invoice now only allows profit and loss accounts from the same company, and Write Off Cost Center now only allows cost centers from the same company. (#54382)
- The Stock Entry list view shows "In Transit" for submitted material transfers set to Add to Transit until they are fully received. This lets you tell transfers still on the way apart from those that have already arrived. (#55644)
- CRM integrations now create Prospect and Customer records using only the details they accept, so extra information is ignored. (#55486)
- Rolls back the PostgreSQL compatibility changes in selling and buying, restoring their earlier behavior. (#56019)
- Reverts the recent PostgreSQL compatibility changes in Manufacturing and Projects, returning those areas to their previous behavior. (#56020)
- Recent changes in BOM, Point of Sale, and "Serial No and Batch Traceability" are rolled back. These areas return to their earlier behavior while the revisions are reviewed. (#56394)
New Contributors
- @arshadqureshi93 made their first contribution in #55247
- @shahzeelahmed made their first contribution in #55536
- @DipenFrappe made their first contribution in #55845
- @SandraFrappe made their first contribution in #55853
- @raghavisruia made their first contribution in #55906
- @Henil666 made their first contribution in #56128
- @harisansari008 made their first contribution in #56127
Authors: @IMS94, @SandraFrappe, @ravibharathi656, @nishkagosalia, @rohitwaghchaure, @nabinhait, @mendozal, @nikkothari22, @nareshkannasln, @harisansari008, @arshadqureshi93, @ankush, @diptanilsaha, @Abdeali099, @AhmedAbokhatwa, @iamejaaz, @bibinqcs, @ruthra-kumar, @Shllokkk, @kaulith, @mihir-kandoi, @ljain112, @Henil666, @ssakthivelmurugan, @ervishnucs, @Sudharsanan11, @shubhdoshi21, @maasanto, @DipenFrappe, @vorasmit, @yash14023, @Navin-S-R, @barredterra, @raghavisruia, @Pandiyan5273, @khushi8112, @PKSowmiya05, @umairsy, @shahzeelahmed, @Hemil-Sangani, @Jatin3128 For these release notes, we used an LLM (OpenAI gpt-5.4-mini) to review and summarise the code changes, along with the associated issue and PR descriptions. It may contain typical errors and inaccuracies. You can read the prompt here.
Changes with the following labels were excluded:
Changes with the following types were excluded:
Reviewers: @sagarvora, @nabinhait, @rohitwaghchaure, @nikkothari22, @vinaymishraofficial, @kavin-114, @ps173, @diptanilsaha, @ankush, @khushi8112, @ruthra-kumar, @Shllokkk, @mihir-kandoi, @ljain112, @Jatin3128
AI content