Commit Graph

3073 Commits

Author SHA1 Message Date
mergify[bot]
53e53390f4 fix(stock): ignore disabled price lists on transactions (backport #58926) (#58931)
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
2026-09-09 10:10:27 +00:00
Sudharsanan Ashok
38f26d248e Merge pull request #58913 from frappe/mergify/bp/version-16-hotfix/pr-58893
fix: reset price list fallback when changing parties (backport #58893)
2026-09-09 13:24:23 +05:30
khushi8112
a404d9b4e8 fix: refresh posting date confirmation setting
(cherry picked from commit bcade8f0ba)
2026-09-09 07:21:05 +00:00
khushi8112
1349e0b3ab fix: read posting date confirmation setting from boot data
(cherry picked from commit db9e93306a)
2026-09-09 07:21:04 +00:00
Pandiyan P
6751264ba5 fix: reset price list fallback when changing parties (#58893)
(cherry picked from commit 4c32acf300)
2026-09-09 06:56:32 +00:00
Afsal Syed
2932793af0 fix(stock): show actual outgoing rate in ledger preview (#58700) 2026-09-08 18:56:21 +05:30
Vishnu Priya Baskaran
0a60d6805f fix: add reconciliation after submit logic for bank transactions (#57330)
Co-authored-by: Poovetha <poovethapalanivelu@gmail.com>
(cherry picked from commit c3319d74cf)
2026-09-04 11:36:02 +00:00
Diptanil Saha
c745558168 fix(accounts): add permission checks on payment entry whitelisted methods (#58644) 2026-09-01 09:24:40 +00:00
Mihir Kandoi
1b44df480f feat: valuation type for BOM secondary items (backport #58431) (#58632) 2026-09-01 11:45:52 +05:30
Mihir Kandoi
ff656b9ad2 feat(manufacturing): add multi-currency support to Blanket Orders (backport #58472) (#58630) 2026-09-01 11:39:26 +05:30
mergify[bot]
8a8bafd6cb fix: explain missing fields when loading party details or taxes (backport #58627) (#58628)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-09-01 01:53:59 +02:00
mergify[bot]
9bb8d4ff93 fix: translate label in party validation (backport #58624) (#58626)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-09-01 00:54:12 +02:00
mergify[bot]
eb4c327a2b fix(stock): auto-select batch no before saving transaction records (backport #58536) (#58539)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-08-28 12:06:38 +00:00
mergify[bot]
f0d2d40d35 fix: translate doctype in map msg (backport #58515) (#58517)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2026-08-27 19:25:51 +02:00
Mihir Kandoi
a1520d06ee chore: rename type field to secondary_item_type (backport #55469) (#58342) 2026-08-23 14:07:59 +05:30
mergify[bot]
9f99ba6ddc fix: block disabled/frozen party on Opportunity and Request for Quotation (backport #57983) (#58035)
* fix: block disabled/frozen customers on Opportunity

Opportunity inherits TransactionBase instead of AccountsController, so
it never ran validate_party_frozen_disabled like Quotation, Sales Order
and Sales Invoice do. A disabled Customer could be saved as an
Opportunity's party and only get caught later at Quotation stage.

Also fixes the party_name Link query on the client: it referenced
erpnext.queries.customer, which was never defined, so disabled
customers showed up in the picker.

(cherry picked from commit 90937ce6d9)

* fix: block disabled/frozen suppliers on Request for Quotation

Request for Quotation overrides validate() entirely and never calls
super().validate(), so it never goes through AccountsController's
party validation. Suppliers also sit in a child table, so the shared
PartyValidator wouldn't have caught it anyway (it only checks a single
top-level party field). A disabled or frozen Supplier could be added
to an RFQ and the RFQ submitted without any warning.

Also filters the suppliers grid's supplier Link field to disabled=0,
matching the same client-side fix applied to Opportunity's party_name.

(cherry picked from commit 4bf65ffc1d)

# Conflicts:
#	erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
#	erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py

* fix: scope Opportunity party validation to Customer only

validate_party_frozen_disabled only enforces Customer/Supplier/Employee,
so passing opportunity_from straight through silently no-op'd for Lead
and Prospect. Made the Customer-only scope explicit instead of relying
on that implicit fallthrough.

Lead.disabled is not enforced anywhere else in the codebase (lead_query,
the picker used for this same field, only filters status/docstatus), so
deliberately not extending validation to Lead-sourced Opportunities.

(cherry picked from commit 8c0a945417)

* refactor: move RFQ supplier disabled filter to link_filters

Static filters with no doc-dependent values belong on the field
definition, not in JS. Matches the existing pattern used for
Warehouse/Item link_filters elsewhere (e.g. job_card_item.json,
product_bundle_item.json).

(cherry picked from commit 6b35c51ff1)

* fix: resolve backport conflicts for disabled/frozen party validation

The automated backport left unresolved merge conflict markers committed
in request_for_quotation.py and test_request_for_quotation.py.

Dropped test_duplicate_supplier_rejected, test_rfq_blocked_for_supplier_with_prevent_rfqs
and test_rfq_status_lifecycle from the conflict resolution, they don't exist on
this branch and aren't part of this backport.

---------

Co-authored-by: Jatin3128 <jatinsarna8@gmail.com>
2026-08-19 16:57:42 +05:30
mergify[bot]
d3573105c4 fix: escape interpolated values in text positions across portal and desk templates (backport #58286) (#58288) 2026-08-19 02:43:18 +05:30
mergify[bot]
6b7b4796b4 fix: escape interpolated values in portal, print and desk templates (backport #58273) (#58278)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-08-19 00:16:52 +05:30
mergify[bot]
d3a4d476eb fix(stock): honour pick serial / batch based on in the batch selector (backport #58176) (#58182)
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
2026-08-14 13:58:07 +00:00
Smit Vora
ea238a90ac feat: taxable-base resolver hook for custom charge types (#56175)
(cherry picked from commit 986cea2331)
2026-08-14 08:19:48 +00:00
mergify[bot]
4f3ffd3820 fix(stock): confirm before changing item qty from the batch selector (backport #58123) (#58125) 2026-08-13 19:37:31 +05:30
Mihir Kandoi
218397e78d fix(selling): preserve explicit UOM during item selection
(cherry picked from commit e8c890a844)

# Conflicts:
#	erpnext/utilities/transaction_base.py
2026-08-11 15:36:19 +00:00
Mihir Kandoi
e0d39074be chore: resolve conflict 2026-08-09 12:39:39 +05:30
Pandiyan P
c9977be5d4 fix: allow selecting a warehouse for new items in the update items dialog (#57876)
(cherry picked from commit 55fe269046)

# Conflicts:
#	erpnext/accounts/services/child_item_update.py
#	erpnext/public/js/utils.js
2026-08-09 06:02:00 +00:00
Mihir Kandoi
206ed28924 fix: round computed conversion factors to field precision
The inverse (1 / value) and intermediate-UOM branches of
get_uom_conv_factor returned raw float quotients like
0.4535922921968971, bypassing the precision the docfields now declare.
Same for the client-side back-calculation from an edited stock qty.
Round both to the UOM Conversion Factor value precision.

(cherry picked from commit ca5a673409)
2026-08-07 16:51:40 +00:00
Mihir Kandoi
281e92fb6e fix(manufacturing): reach the whole configurator from tree toolbar actions
The toolbar handlers were copied onto view.events as unbound functions, so
`this` inside them was that object literal rather than the BOMConfigurator.
They worked only because the literal also carried `frm`, and broke as soon as
a handler called a method the literal did not list: get_item_code, added when
the tree started keying nodes on the row name, threw
"this.get_item_code is not a function" and killed Add Raw Material, Add Sub
Assembly and Convert to Sub Assembly.

Assign the instance instead of a hand-maintained whitelist. Every method is
reachable, `this.frm` keeps working, and no future method can be forgotten.

Fixes #57773

(cherry picked from commit 097ce0f348)
2026-08-04 10:09:12 +00:00
mergify[bot]
824ae57e44 fix: escape data in multiple templates (backport #57742) (#57770)
Co-authored-by: diptanilsaha <diptanil@frappe.io>
2026-08-04 06:52:25 +00:00
Mihir Kandoi
4ed03748fe fix(stock): correct secondary item valuation across stock entry purposes
Backport of five fixes merged to develop, adapted to this branch, where
the field is still named `type` and the stock entry rate logic has not
been split out of set_basic_rate.

- A secondary row with no BOM link is costed out of the finished good,
  as legacy scrap was. Finished goods are rated last so a single
  validate pass sees the secondary rows' amounts. (#57732)
- Repack no longer flags secondary rows as finished goods, so each side
  takes the share the BOM declares instead of the scrap absorbing the
  finished good's percentage. (#57735)
- A BOM allocation of 0% means the row carries no cost, rather than
  falling through to the item's own valuation rate. (#57736)
- Secondary Item Type no longer waives a quality inspection on purposes
  that do not produce secondary items. (#57737)
- The BOM allocation applies to the consumption entry's cost when the
  raw material cost comes from one. (#57738)

Replaces the individual backports, which could not be cherry-picked
cleanly: every hunk needed rewriting against the pre-rename field and
the un-refactored rate logic.
2026-08-03 16:53:20 +05:30
Mihir Kandoi
e5999b22c7 fix: preserve UOM conversion factor precision in transactions
calculate_item_values rounds every Float field on an item row to the
site's Float Precision (3 by default), and conversion_factor was one of
them. The factor is a ratio, not a rate: UOM Conversion Factor.value is
stored at precision 9, and Material Request keeps the full value because
it has no currency field and so never runs the calculation.

Mapping a Material Request to a Purchase Order therefore truncated the
factor - 0.453592292 for Pound -> Kg became 0.454 - and stock_qty, which
is recomputed as qty * conversion_factor, drifted from the quantity that
was requested, leaving the Material Request unable to close.

Exclude conversion_factor from the rounded fields on the server and on
the client. Factors below the site precision would otherwise round to
zero outright.

(cherry picked from commit 269cc6ee3b)
2026-08-02 06:25:58 +00:00
Mihir Kandoi
339bb0b4ea fix(manufacturing): scope BOM Creator tree children to the parent row
The BOM Creator tree identified a node by the parent's item code
(fg_item) instead of the specific BOM Creator Item row, so every
occurrence of a repeated sub-assembly shared one child set: expanding
any one of them listed the raw materials of all of them, and deleting
one wiped the raw materials of its siblings.

Key the tree on fg_reference_id and make the node value the row name,
matching the framework convention that a tree node's value is its
docname. Item code now travels as its own field for the label and for
the fg_item argument sent back on add/convert.

Fixes #57311

(cherry picked from commit b37152752f)
2026-07-28 06:49:59 +00:00
Lakshit Jain
c3eac77ee1 Merge pull request #56952 from frappe/mergify/bp/version-16-hotfix/pr-54855
refactor(financial-report): fix row transformation for growth calculations (backport #54855)
2026-07-27 13:31:55 +05:30
Mihir Kandoi
c587f4934a refactor: move new-doc route options to StockController
set_route_options_for_new_doc lived in TransactionController, so doctypes
extending StockController directly (Stock Reconciliation, Stock Entry) missed
the Batch/SABB prefill or duplicated it locally. Move it to StockController
and call it from onload_post_render so all descendants inherit it.

- Batch quick entry from Stock Reconciliation items now prefills Item
- SABB route options unified: warehouse || s_warehouse || t_warehouse,
  so transaction doctypes now also prefill warehouse
- Stock Entry's duplicate handler removed; its onload_post_render now
  calls super

(cherry picked from commit 551559e804)
2026-07-22 12:33:46 +00:00
mergify[bot]
429b58b833 fix: show transaction currency symbol in Payment Request schedule dialog and reference table (backport #57050) (#57312)
fix: show transaction currency symbol in Payment Request schedule dialog and reference table (#57050)

* fix: show transaction currency symbol in Payment Request schedule dialog and reference table

When company currency (INR) differs from customer currency (USD), the Amount
column in the Select Payment Schedule dialog and the Payment Reference table on
the Payment Request form incorrectly displayed the company currency symbol (₹)
instead of the transaction currency symbol ($).

- Pass `currency` from the parent document on each schedule row returned by
  `get_available_payment_schedules` so the dialog can resolve the symbol.
- Add a hidden `currency` field to the dialog table and set `options: "currency"`
  on `payment_amount` so Frappe renders the correct symbol.
- Propagate `currency` into Payment Reference rows in `set_payment_references`.
- Add a hidden `currency` Link field to the Payment Reference child DocType and
  set `options: "currency"` on its `amount` field so the table renders correctly.



* fix: preserve currency when serializing payment schedule rows

get_available_payment_schedules set `schedule.currency` directly on
the Payment Schedule Document row, but `currency` isn't a field on
that DocType, so the API response serializer stripped it before it
reached the client. The Select Payment Schedule dialog and the
Payment Reference table therefore always fell back to the company
currency symbol, even with the earlier options="currency" changes in
place.

Convert each row to a plain dict via as_dict() first, then set the
currency key on the dict so it survives serialization.

* refactor: source schedule currency in dialog instead of API serializer

get_available_payment_schedules had to convert each child row with
as_dict() and re-attach currency, because currency is not a field on
Payment Schedule and the response serializer drops attributes set on the
Document itself.

The schedule dialog already has the transaction currency on frm.doc, so
set it there and let the API keep returning the schedule rows unchanged.
Payment Reference still stores currency per row.

---------




(cherry picked from commit 83e04dd773)

Co-authored-by: Henil Maru <henil@frappe.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Jatin3128 <jatinsarna8@gmail.com>
Co-authored-by: Jatin3128 <140256508+Jatin3128@users.noreply.github.com>
2026-07-21 12:59:50 +05:30
Mihir Kandoi
4f59e57151 Merge pull request #57105 from frappe/mergify/bp/version-16-hotfix/pr-57091
fix(stock): show qty (company) and qty (warehouse) in sales transactions  (backport #57091)
2026-07-13 21:27:54 +05:30
Sudharsanan11
0d9ace7ab8 fix(stock): show qty (company) and qty (warehouse) in sales transactions
company was passed to get_bin_details only for purchase order, so
company_total_stock was never returned for sales order, quotation,
sales invoice and delivery note and the qty (company) column always
read zero. pass ctx.company for every doctype, which also drops the
dependency on doc being supplied.

on the client, set_actual_qty copied only actual_qty out of the
response, so qty (company) never refreshed on a warehouse change. use
frm.call with child so every bin field is applied, pass
include_child_warehouses to match the server, and include quotation.

(cherry picked from commit ab30bab6cb)
2026-07-13 15:34:09 +00:00
pandiyan
00a646ac25 fix: allow barcode scan to add and increment items in pick list
- allow new rows on scan when pick manually is enabled, since only
  then are scanned rows not subject to being overridden by
  set_item_locations on save
- stop capping picked qty at the default demand qty (1) for rows
  added by the scanner itself, so repeat scans of the same barcode
  keep incrementing the row instead of failing with "maximum
  quantity scanned"
- ignore barcode uom when matching an existing row if new rows
  aren't allowed, since there's no alternate-uom row to fall back to

(cherry picked from commit 3ece4a615d)
2026-07-13 15:33:11 +00:00
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
Abdeali Chharchhoda
3f87836536 fix: enhance growth view filtering by validating period keys
(cherry picked from commit aad287d09e)
2026-07-08 10:44:41 +00:00
Abdeali Chharchhoda
da3844c4df fix: update formatting of growth view for FS report
(cherry picked from commit 4c7499600c)
2026-07-08 10:44:40 +00:00
mergify[bot]
d9aa4491f1 feat: capture user persona during setup (backport #56705) (#56707) 2026-07-01 18:15:55 +05:30
Sudharsanan11
40ca3b5e5d fix(stock): support quality inspection for stock entry by purpose (backport #56446) 2026-07-01 00:16:21 +05:30
Shllokkk
36a9c7a0d3 Merge pull request #56386 from frappe/mergify/bp/version-16-hotfix/pr-56337
fix: show contextual balance label on party dashboard for net balances (backport #56337)
2026-06-27 16:36:07 +05:30
mergify[bot]
112b773193 chore: removing controllers from pre-commit eslint hooks exclude list (backport #56575) (#56579)
Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-06-27 01:37:18 +05:30
Shllokkk
a886d0b445 fix: show contextual balance label on party dashboard for net balances
(cherry picked from commit 3251b40365)
2026-06-26 15:03:06 +05:30
mergify[bot]
ef3d444a60 fix: rewrite item rate calculation (backport #56315)
Co-authored-by: Harsh Patadia <harsh@Harshs-MacBook-Air.local>
Co-authored-by: Sagar Vora <16315650+sagarvora@users.noreply.github.com>
Co-authored-by: Smit Vora <mailsmitvora@gmail.com>
2026-06-25 09:50:50 +00:00
mergify[bot]
f5d05b969b fix: update round off account functions to accept document context for regional overrides (backport #55758) (#55771)
Co-authored-by: Lakshit Jain <ljain112@gmail.com>
fix: update round off account functions to accept document context for regional overrides (#55758)
2026-06-22 12:30:09 +00:00
nishkagosalia
97279c7e26 fix: removing the document naming series dialog and moving to framework
(cherry picked from commit aa7402b1e3)
2026-06-22 10:37:41 +00:00
Sudharsanan11
a6310351fd fix(stock): enable quality inspection for all Stock Entry purposes
- Remove `depends_on` restriction from `inspection_required` field so it
  is visible for all Stock Entry purposes, not just Manufacture
- Fix `check_item_quality_inspection` to return items for Stock Entry
  (was returning [] for unknown doctypes, blocking QI creation flow)
- Fix `inspection_type` in transaction.js to be purpose-aware: Manufacture
  and Material Receipt → "Incoming"; all other purposes → "Outgoing"

(cherry picked from commit dceb9a3c6c)

# Conflicts:
#	erpnext/stock/doctype/stock_entry/stock_entry.json
2026-06-16 09:38:17 +00:00
Rohit Waghchaure
b616206848 fix: converted whitelist non class methods to class methods 2026-06-12 08:19:09 +05:30
rohitwaghchaure
cf5e6da0a6 chore: fix conflicts 2026-06-11 20:32:16 +05:30