diff --git a/erpnext/crm/utils.py b/erpnext/crm/utils.py index eb784c28ca7..8a6ce8311b1 100644 --- a/erpnext/crm/utils.py +++ b/erpnext/crm/utils.py @@ -147,14 +147,37 @@ def link_open_events(ref_doctype, ref_docname, doc): def get_open_activities(ref_doctype, ref_docname): tasks = get_open_todos(ref_doctype, ref_docname) events = get_open_events(ref_doctype, ref_docname) + tasks_history = get_closed_todos(ref_doctype, ref_docname) + events_history = get_closed_events(ref_doctype, ref_docname) - return {"tasks": tasks, "events": events} + return { + "tasks": tasks, + "events": events, + "tasks_history": tasks_history, + "events_history": events_history, + } + + +def get_closed_todos(ref_doctype, ref_docname): + return get_filtered_todos(ref_doctype, ref_docname, status=("!=", "Open")) def get_open_todos(ref_doctype, ref_docname): + return get_filtered_todos(ref_doctype, ref_docname, status="Open") + + +def get_open_events(ref_doctype, ref_docname): + return get_filtered_events(ref_doctype, ref_docname, open=True) + + +def get_closed_events(ref_doctype, ref_docname): + return get_filtered_events(ref_doctype, ref_docname, open=False) + + +def get_filtered_todos(ref_doctype, ref_docname, status: str | tuple[str, str]): return frappe.get_all( "ToDo", - filters={"reference_type": ref_doctype, "reference_name": ref_docname, "status": "Open"}, + filters={"reference_type": ref_doctype, "reference_name": ref_docname, "status": status}, fields=[ "name", "description", @@ -164,10 +187,15 @@ def get_open_todos(ref_doctype, ref_docname): ) -def get_open_events(ref_doctype, ref_docname): +def get_filtered_events(ref_doctype, ref_docname, open: bool): event = frappe.qb.DocType("Event") event_link = frappe.qb.DocType("Event Participants") + if open: + event_status_filter = event.status == "Open" + else: + event_status_filter = event.status != "Open" + query = ( frappe.qb.from_(event) .join(event_link) @@ -183,7 +211,7 @@ def get_open_events(ref_doctype, ref_docname): .where( (event_link.reference_doctype == ref_doctype) & (event_link.reference_docname == ref_docname) - & (event.status == "Open") + & (event_status_filter) ) ) data = query.run(as_dict=True) diff --git a/erpnext/public/js/templates/crm_activities.html b/erpnext/public/js/templates/crm_activities.html index 42603196087..5d0bc16ce32 100644 --- a/erpnext/public/js/templates/crm_activities.html +++ b/erpnext/public/js/templates/crm_activities.html @@ -57,6 +57,47 @@ {{ __("No open task") }} {% } %} + + {% if (typeof tasks_history == "object" && tasks_history?.length) { %} +