mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-29 14:48:26 +00:00
* 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 commit90937ce6d9) * 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 commit4bf65ffc1d) # 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 commit8c0a945417) * 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 commit6b35c51ff1) * 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>