Commit Graph

58651 Commits

Author SHA1 Message Date
Mihir Kandoi
f19aa957cb test: quantity handling in the supplier selection dialog
Asserts the requested quantity reaches the Purchase Order item and that rows
without a supplier, or with a quantity that is zero, negative or beyond the
pending quantity, are rejected.

(cherry picked from commit 09cfd1fe91)
2026-08-02 06:26:21 +00:00
Mihir Kandoi
2c8c375ca6 feat: adjust the ordered quantity in the supplier selection dialog
The dialog prefilled the pending quantity of each Material Request item but
kept it read only, so ordering less than what was requested meant editing the
Purchase Order afterwards.

The quantity is now editable and is validated against the pending quantity of
its Material Request item, both in the dialog and on the server. The requested
quantity is handed to the mapper as the pending quantity of the source row, so
the existing mapping - including the subcontracting conversions - derives the
Purchase Order quantities from it unchanged.

(cherry picked from commit da83370c5c)
2026-08-02 06:26:20 +00:00
Mihir Kandoi
f4d3b2771b test: supplier selection when creating Purchase Orders from Material Request
Covers the default supplier lookup for pending items, the supplier passed
through to a single mapped order, the grouping of items into one order per
supplier, and the failure when an item is sent without a supplier.

(cherry picked from commit 65be201ed6)

# Conflicts:
#	erpnext/stock/doctype/material_request/test_material_request.py
2026-08-02 06:26:20 +00:00
Mihir Kandoi
95f7810948 feat: select a supplier per item when creating Purchase Orders from Material Request
Creating a Purchase Order from a Material Request mapped every pending item
into a single order, leaving the buyer to split it by hand whenever the items
came from different vendors.

The Create action now reads the default supplier of each pending item (item,
item group, then brand defaults). When the items resolve to more than one
distinct supplier - including the case where only some of them have a default -
a dialog lists the items with their default supplier prefilled and editable.
Submitting it groups the items by the chosen supplier and creates one draft
Purchase Order per group.

When every item resolves to the same supplier the order is mapped straight
away with that supplier set, and when none of them has a default supplier the
previous behaviour is unchanged.

(cherry picked from commit e8df7b4a90)

# Conflicts:
#	erpnext/stock/doctype/material_request/mapper.py
#	erpnext/stock/doctype/material_request/material_request.js
2026-08-02 06:26:20 +00:00
Shllokkk
1fbccd9823 Merge pull request #57694 from frappe/mergify/bp/version-16-hotfix/pr-57681
fix: set reservation voucher_qty to voucher demand not reserved qty (backport #57681)
2026-08-01 16:09:20 +05:30
Shllokkk
9457cae327 test: partial work order reservation records full voucher_qty
(cherry picked from commit 7a97dc3361)
2026-08-01 10:12:50 +00:00
Shllokkk
ecccedf0ed fix: set reservation voucher_qty to voucher demand not reserved qty
(cherry picked from commit 7995bb9960)
2026-08-01 10:12:50 +00:00
Diptanil Saha
5633c29223 Merge pull request #57692 from frappe/mergify/bp/version-16-hotfix/pr-57201
fix: permission checks on various whitelisted methods (backport #57201)
2026-08-01 15:12:53 +05:30
diptanilsaha
fcbbb251cf fix(payment_request): added permission checks on resend_payment_email
(cherry picked from commit 0659bd7049)
2026-08-01 15:01:34 +05:30
diptanilsaha
c7cf9d868b fix(item_variant): added permission checks on enqueue_multiple_variant_creation
(cherry picked from commit 3b0cbc972e)
2026-08-01 15:01:27 +05:30
diptanilsaha
99f249b1a0 fix(assets): add permission checks on whitelisted methods on asset_capitalization
(cherry picked from commit 09d721d1be)
2026-08-01 14:55:42 +05:30
Mihir Kandoi
38f7c824f1 Merge pull request #57683 from frappe/mergify/bp/version-16-hotfix/pr-57679
fix: exclude transferred and consumed qty from dashboard reserved stock (backport #57679)
2026-08-01 14:50:56 +05:30
Shllokkk
46317b063a fix: exclude transferred and consumed qty from dashboard reserved stock
(cherry picked from commit 6c36624d91)
2026-08-01 09:03:51 +00:00
Shllokkk
2ce88af3c9 Merge pull request #57672 from frappe/mergify/bp/version-16-hotfix/pr-57668
fix: drop row prefix in reserve stock message when row is unknown (backport #57668)
2026-07-31 23:31:20 +05:30
Shllokkk
684ae4d762 fix: drop row prefix in reserve stock message when row is unknown
(cherry picked from commit 517053bc25)
2026-07-31 22:51:30 +05:30
Sudharsanan Ashok
d09c04a623 fix: update stock variance account logic which defaults to default expense (#57656)
* fix(stock): update stock variance account logic which defaults to default expense account set in company

* test: add regression test for purchase invoice stock adjustment account fallback

---------

Co-authored-by: Afsal Syed <afsalsyed12@gmail.com>
2026-07-31 22:10:15 +05:30
mergify[bot]
624a236f88 fix(quotation): carry forward communications from opportunity at after_insert (backport #57639) (#57643)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-07-31 20:56:21 +05:30
mergify[bot]
7bc04752fc fix(plant_floor): add missing perm check on get_stock_summary (backport #57667) (#57670)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-07-31 15:19:50 +00:00
Mihir Kandoi
810da8f542 Merge pull request #57655 from aerele/backport-57567-version-16-hotfix
fix: guard against None row in get_stock_balance_for (backport #57567)
2026-07-31 18:56:42 +05:30
pandiyan
283ee6e07b fix: guard against None row in get_stock_balance_for (backport #57567)
get_stock_balance_for() takes row=None by default, but the batch-tracked
branch dereferenced it unconditionally while the two neighbouring row
accesses already guard. Calling it with a batch_no and no row raised
AttributeError: 'NoneType' object has no attribute 'use_serial_batch_fields'.

semgrep's missing-argument-type-hint rule matches the whole function body,
so touching any line inside it re-fingerprints the pre-existing untyped
arguments and reports them as introduced by this PR. Silenced with
nosemgrep instead of annotating: on a whitelisted method the hints are
enforced at runtime by pydantic, which is not a risk worth taking on a
hotfix branch.
2026-07-31 18:11:02 +05:30
Mihir Kandoi
e3d8336213 Merge pull request #57658 from aerele/fix/material-transfer-qty-precision-v16
fix: respect quantity precision in material transfer validation
2026-07-31 17:59:46 +05:30
mergify[bot]
5595d1ed2f fix: use payment entry posting date for received amount exchange rate (backport #57660) (#57663)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-07-31 12:29:38 +00:00
mergify[bot]
ebba4e9958 feat: auto-fill subscription accounting dimensions from plan with item fallback (backport #57615) (#57622)
* feat: auto-fill subscription accounting dimensions from plan with item fallback (#57615)

When a plan is selected in the Subscription's Plans table, the Subscription's
accounting dimensions (cost center and any custom dimensions) auto-fill from the
plan, falling back to the plan item's company default (selling cost center for a
Customer, buying for a Supplier). Only empty fields are filled. Stale async
responses are ignored so a quick re-pick of the plan can't be overwritten.

(cherry picked from commit 7febc28ed6)

# Conflicts:
#	erpnext/accounts/doctype/subscription/subscription.js
#	erpnext/accounts/doctype/subscription/test_subscription.py

* fix: resolve backport merge conflicts for #57615

---------

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
Co-authored-by: Jatin3128 <jatinsarna8@gmail.com>
2026-07-31 16:03:23 +05:30
Sudharsanan11
59bb56aa8d test: cover material transfer quantity precision 2026-07-31 14:41:53 +05:30
Sudharsanan11
eb969a5866 fix: respect quantity precision in material transfer validation 2026-07-31 14:41:53 +05:30
mergify[bot]
9b452f12b7 fix(accounts receivable): made territory field multi select (backport #57322) (#57346)
fix(accounts receivable): made territory field multi select (#57322)

(cherry picked from commit 1029cd988a)

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-07-31 14:41:15 +05:30
mergify[bot]
c0ac8aaf86 fix(stock): value batched packed-item returns from the original bundle (backport #57327) (#57511)
fix(stock): value batched packed-item returns from the original bundle  (#57327)

* fix(stock): value batched packed-item returns from the original bundle

when a return delivery note or sales invoice bundle is built via the
use_serial_batch_fields / sle-driven path, its voucher_detail_no keeps the
packed item instead of being remapped to the parent dn/si item. the return
valuation lookup then misses and the bundle values at zero, so the sle
stock_value_difference stays wrong even after a repost.

resolve the original dn/si item via the packed item's parent_detail_docname
when the direct lookup fails, so the return values from the original outward
bundle on both submit and repost.

* test(stock): cover batched packed-item return valuation on repost

(cherry picked from commit d37e905322)

Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
2026-07-31 12:17:54 +05:30
mergify[bot]
0e46937f60 fix: filter Accounts Receivable by invoice sales partner (backport #57628) (#57648)
fix: filter Accounts Receivable by invoice sales partner (#57628)

Filter Accounts Receivable and AR Summary on the Sales Invoice's own
sales_partner instead of the customer's default_sales_partner, and read
the Sales Partner column from the invoice. Returns are attributed to the
invoice they settle, matching how the Sales Person filter works.

(cherry picked from commit fd7765ac02)

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-07-31 12:06:36 +05:30
Shllokkk
0c0350110e Merge pull request #57557 from frappe/mergify/bp/version-16-hotfix/pr-57552
fix: respect child warehouse account override in Stock and Account Value Comparison (backport #57552)
2026-07-31 11:57:21 +05:30
Mihir Kandoi
a620648471 Merge pull request #57243 from frappe/mergify/bp/version-16-hotfix/pr-57223
fix(projects): include on hold status in project filters and reports (backport #57223)
2026-07-31 11:50:06 +05:30
Mihir Kandoi
5a75be871a Merge pull request #57638 from frappe/mergify/bp/version-16-hotfix/pr-57606
fix: guard scio row lookup in stock entry items_add (backport #57606)
2026-07-31 11:48:49 +05:30
Poovetha
3ba83134af fix(projects): add project filter
(cherry picked from commit 7248961568)
2026-07-31 11:07:35 +05:30
Poovetha
76fce556c8 test(projects): add test to ensure on hold project retains status
(cherry picked from commit 79e5ccd370)
2026-07-31 11:07:35 +05:30
Poovetha
d104d8e723 fix(projects): include on hold status in project filters and reports
(cherry picked from commit 51a9fc0316)
2026-07-31 11:07:35 +05:30
ruthra kumar
249acdd7e2 Merge pull request #57641 from frappe/mergify/bp/version-16-hotfix/pr-57434
fix: update doc status in period closing voucher (backport #57434)
2026-07-31 10:48:14 +05:30
nareshkannasln
17aeb0b55b fix: validate account frozen date
(cherry picked from commit b3c2ba5381)
2026-07-31 05:05:52 +00:00
mergify[bot]
2d03d80269 feat: status based bar colors in Work Order gantt view (backport #57634) (#57636)
feat: status based bar colors in Work Order gantt view (#57634)

(cherry picked from commit d59c5e36bc)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2026-07-31 09:58:54 +05:30
pandiyan
fb6c87dd0c fix: guard scio row lookup in stock entry items_add
check the result of find() before reading t_warehouse off it. on a
'receive from customer' entry with no row carrying scio_detail, find()
returns undefined and items_add throws a typeerror.

the throw rejects the serially-run handler chain, so the stock entry
controller's own items_add never runs and the new row silently loses
its target warehouse, expense account, cost center and serial/batch
field defaults.

leave t_warehouse unset when no reference row exists, so the rest of
the chain still runs.

(cherry picked from commit 6e444a1832)
2026-07-31 03:26:57 +00:00
mergify[bot]
34cbd3c8d5 fix: do not fetch a random inventory account when multiple inventory accounts exist (backport #57626) (#57632)
* fix: do not fetch a random inventory account when multiple inventory accounts exist (#57626)

(cherry picked from commit 386a4ac1f0)

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

* chore: fix conflicts

Remove redundant inter-company transaction tests and related setup.

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2026-07-30 23:25:18 +05:30
Mihir Kandoi
9c86f98e5f Merge pull request #57630 from frappe/mergify/bp/version-16-hotfix/pr-57616
fix: seed standard Item Groups under the existing tree root (backport #57616)
2026-07-30 19:39:13 +05:30
Mihir Kandoi
d1d214ddee chore: fix import order in item group tests 2026-07-30 19:18:07 +05:30
Mihir Kandoi
4ffa950aa3 fix: seed standard Item Groups under the existing tree root
install_fixtures always inserted "All Item Groups" as a parentless group.
On a site where another app had already created the root, ItemGroup.validate
re-parented it, leaving a second group-root that held the standard groups
while the real root held everything else.

This is reproducible with the healthcare app on a non-English site: its
after_install seeds the root as _("All Item Groups"), so a pt-BR site gets
"Todos os Grupos de Itens" as the root before the setup wizard runs. The
split predates #57390 -- the old translated-name lookup resolved to the same
root and produced an identical tree.

Resolve the root once with get_root_of (falling back to the canonical English
name on fresh installs) and use it for the root record's exists-guard and the
standard groups' parent, matching Company.create_default_departments.

Patch merges an already-seeded "All Item Groups" into the root it sits under,
lifting its children and repointing every link.

Closes #57581

(cherry picked from commit e7088d8981)
2026-07-30 13:42:04 +00:00
Shllokkk
43fd439866 Merge pull request #57620 from frappe/mergify/bp/version-16-hotfix/pr-57618
fix: source manually created asset value from valuation rate (backport #57618)
2026-07-30 15:21:11 +05:30
Shllokkk
aa60192ab7 refactor: add type-hints for get_values_from_purchase_doc in asset 2026-07-30 15:03:04 +05:30
Shllokkk
b556b012f0 fix: source manually created asset value from valuation rate
(cherry picked from commit 46e01c2d92)
2026-07-30 09:23:30 +00:00
mergify[bot]
49924ddd1d fix(stock): keep manufactured item rate at zero when inputs are free (backport #57334) (#57513)
fix(stock): keep manufactured item rate at zero when inputs are free  (#57334)

* fix(stock): keep manufactured item rate at zero when inputs are free

when a finished item is produced from raw materials consumed at zero
valuation, the incoming rate fell back to the item's own valuation
rate (or BOM cost), valuing free inputs as output and inflating the fg
value on every production run.

add has_consumption_basis() to detect when the consumed cost is known
even if it is zero (consumed rows present, or a consumption entry
exists for the work order). when it is, skip the get_valuation_rate and
BOM-cost fallbacks so a real cost of zero is preserved.

* test(stock): cover manufacture rate for zero-valued raw materials

- manufacture from a free input keeps fg basic_rate and sle
  incoming_rate/stock_value_difference at zero even when the fg already
  carries a valuation in the target warehouse
- material consumption on with no consumption entry does not fall back
  to bom/price-list rate for free inputs
- zero-valued consumption entry keeps the manufacture entry's fg rate
  at zero

(cherry picked from commit 73224d3650)

Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
2026-07-30 09:25:35 +05:30
mergify[bot]
1ea1ce15d0 fix(accounts): update AU standard chart of accounts (backport #57145) (#57608)
fix(accounts): update AU standard chart of accounts (#57145)


(cherry picked from commit fee3a6e0fd)

Co-authored-by: Diptanil Saha <diptanil@frappe.io>
Co-authored-by: Jebajebas <jeba.j@arus.co.in>
2026-07-30 02:32:38 +00:00
Mihir Kandoi
04e1ca8226 fix(selling): don't require cancel and delete perms to remove items via Update Items (backport #57419) (#57601)
Row removal called cancel() and delete() on the child row, and both check
permissions against the parent doctype. Dropping a row therefore needed Cancel
and Delete on the order, while the rest of the dialog only needs Write: the
button is gated on has_perm("write"), update_child_qty_rate checks parent
Write, and edits save with ignore_permissions=True.

Set ignore_permissions on the row before cancel/delete so removal sits behind
the same parent Write check as add and edit. validate_child_on_delete is
unchanged, so rows with ordered, received, delivered or billed qty are still
refused.

On version-16-hotfix validate_and_delete_children still lives in
erpnext/controllers/accounts_controller.py, not the extracted
erpnext/accounts/services/child_item_update.py module it was moved to on
develop.

Co-authored-by: Kaushal Shriwas <64089478+kaulith@users.noreply.github.com>
2026-07-29 11:30:36 +00:00
mergify[bot]
16be0f0944 fix: let Purchase Receipt cancel defer to Frappe's linked-document check (backport #57592) (#57597)
fix: let Purchase Receipt cancel defer to Frappe's linked-document check (#57592)

on_cancel pre-blocked cancellation with its own "Purchase Invoice is
already submitted" guard, duplicating the check Frappe already runs for any
submitted linked document. Drop the guard and the unused check_next_docstatus()
method it mirrored so the receipt defers to the framework: the Cancel All
Documents flow cancels the invoice first and then the receipt, and a direct
cancel is still rejected by Frappe's linked-document check.

Add a regression test that a direct cancel of a receipt with a submitted
invoice is rejected and rolls back, leaving no stray stock or GL entries.

(cherry picked from commit cfe18e8427)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py

Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-07-29 15:24:08 +05:30
Krishna Pramod Shirsath
7daa1dacc3 Merge pull request #57590 from frappe/mergify/bp/version-16-hotfix/pr-57314
fix(italy): skip e-invoicing for opening invoices (backport #57314)
2026-07-29 13:43:52 +05:30