mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-25 13:03:02 +00:00
Merge remote-tracking branch 'upstream/develop' into erpnext-refactoring
# Conflicts: # erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py # erpnext/accounts/doctype/sales_invoice/sales_invoice.py # erpnext/buying/doctype/purchase_order/purchase_order.py # erpnext/buying/doctype/request_for_quotation/request_for_quotation.py # erpnext/controllers/accounts_controller.py # erpnext/selling/doctype/sales_order/sales_order.py # erpnext/selling/doctype/sales_order/test_sales_order.py # erpnext/stock/doctype/delivery_note/delivery_note.py # erpnext/stock/doctype/purchase_receipt/purchase_receipt.py # erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py
This commit is contained in:
@@ -1803,6 +1803,43 @@ class StockController(AccountsController):
|
||||
|
||||
qty -= working_qty
|
||||
|
||||
def check_for_on_hold_or_closed_status(
|
||||
self, ref_doctype: str, ref_fieldname: str, exclude_if_field: str | None = None
|
||||
) -> None:
|
||||
def _include(d):
|
||||
return d.get(ref_fieldname) and not (exclude_if_field and d.get(exclude_if_field))
|
||||
|
||||
included = [(d, d.get(ref_fieldname)) for d in self.get("items") if _include(d)]
|
||||
if not included:
|
||||
return
|
||||
|
||||
status_map = {
|
||||
r.name: r.status
|
||||
for r in frappe.get_all(
|
||||
ref_doctype,
|
||||
filters={"name": ["in", {name for _, name in included}]},
|
||||
fields=["name", "status"],
|
||||
)
|
||||
}
|
||||
|
||||
errors = []
|
||||
seen = set()
|
||||
for _d, ref_name in included:
|
||||
if ref_name in seen:
|
||||
continue
|
||||
seen.add(ref_name)
|
||||
if (status := status_map.get(ref_name)) in ("Closed", "On Hold"):
|
||||
errors.append(
|
||||
_("{ref_doctype} {ref_name} status is {status}.").format(
|
||||
ref_doctype=frappe.bold(_(ref_doctype)),
|
||||
ref_name=frappe.bold(ref_name),
|
||||
status=frappe.bold(_(status)),
|
||||
)
|
||||
)
|
||||
|
||||
if errors:
|
||||
frappe.throw("<br>".join(errors), frappe.InvalidStatusError)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def show_accounting_ledger_preview(company: str, doctype: str, docname: str):
|
||||
|
||||
Reference in New Issue
Block a user