From bd5c239a29d979727ac190aa75a46d4f6a4bde2f Mon Sep 17 00:00:00 2001 From: Corentin Forler <8860073-cforler_dokos@users.noreply.gitlab.com> Date: Tue, 20 Feb 2024 16:50:34 +0100 Subject: [PATCH 1/3] fix(event): Keep latest events when using limit_page_length Note that events are sorted afterwards. --- frappe/desk/doctype/event/event.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 79442c4bdb..b9367de798 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -468,13 +468,14 @@ def get_events( ) ) {additional_condition} - ORDER BY `tabEvent`.starts_on + ORDER BY {order_by} {limit_condition}""".format( additional_fields=additional_fields, tables=", ".join(tables), filter_condition=filter_condition, reminder_condition="AND coalesce(`tabEvent`.send_reminder, 0)=1" if for_reminder else "", limit_condition=f"LIMIT {limit_page_length} OFFSET {limit_start}" if limit_page_length else "", + order_by="`tabEvent`.starts_on desc" if limit_page_length else "`tabEvent`.starts_on", additional_condition=additional_condition or "", ), { -- GitLab From de9d7d085976c1de597a814d97f9ed7d950baad4 Mon Sep 17 00:00:00 2001 From: Corentin Forler <8860073-cforler_dokos@users.noreply.gitlab.com> Date: Tue, 20 Feb 2024 16:51:13 +0100 Subject: [PATCH 2/3] feat(event): Split web list into future and past events --- frappe/desk/doctype/event/event.py | 27 ++++++++++++++++--- .../doctype/event/templates/event_row.html | 8 +++++- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index b9367de798..8d11bf727c 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -308,13 +308,34 @@ def get_list_context(context=None): def get_events_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by="starts_on"): - return get_prepared_events( - "1900-01-01", - add_days(nowdate(), 365), + events = get_prepared_events( + "0001-01-01", + "9999-01-0", limit_start, limit_page_length, merge_recurrences=True, ) + # First, split the events into past and future + past_events = [] + future_events = [] + for event in events: + if event.get("event_status") == "past": + past_events.append(event) + else: + future_events.append(event) + + # Then, sort the past events in descending order + past_events = sorted(past_events, key=lambda x: x["starts_on"], reverse=True) + + # And the future events in ascending order + future_events = sorted(future_events, key=lambda x: x["starts_on"]) + + # Finally, return the past events first, then the future events + if not past_events: + return future_events + + title_past = frappe._dict(list_split=True, title=_("Past Event")) + return future_events + [title_past] + past_events @frappe.whitelist() diff --git a/frappe/desk/doctype/event/templates/event_row.html b/frappe/desk/doctype/event/templates/event_row.html index a69fb053de..f63e4c7c57 100644 --- a/frappe/desk/doctype/event/templates/event_row.html +++ b/frappe/desk/doctype/event/templates/event_row.html @@ -1,3 +1,8 @@ +{% if doc.list_split %} +