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 %} +

+ {{ doc.title }} +

+{% else %}
@@ -66,4 +71,5 @@ .past-event { color: var(--gray-700); } - \ No newline at end of file + +{% endif %} -- GitLab From 7a825c757ce2d9de0fbd1c714a0209aa19c75987 Mon Sep 17 00:00:00 2001 From: Corentin Forler <8860073-cforler_dokos@users.noreply.gitlab.com> Date: Tue, 20 Feb 2024 16:52:08 +0100 Subject: [PATCH 3/3] feat(event): Clean-up web list design --- .../doctype/event/templates/event_row.html | 83 +++++++++---------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/frappe/desk/doctype/event/templates/event_row.html b/frappe/desk/doctype/event/templates/event_row.html index f63e4c7c57..afae2cc05d 100644 --- a/frappe/desk/doctype/event/templates/event_row.html +++ b/frappe/desk/doctype/event/templates/event_row.html @@ -6,48 +6,46 @@
-
-
-
-
-
{{ doc.title or doc.name }} - {% if doc.event_status == 'past' %} - - {{ _("Past Event") }} - - {% else %} - - {{ _(doc.status) }} - - {% endif %} -
-
- {% if doc.ends_on and frappe.utils.getdate(doc.starts_on) != frappe.utils.getdate(doc.ends_on) %} - {{ frappe.utils.global_date_format(doc.starts_on) }} - – - {{ frappe.utils.global_date_format(doc.ends_on) }} - {% else %} - {{ frappe.utils.global_date_format(doc.starts_on) }} - {% endif %} -
-
- {% if doc.all_day %} - {{ _("All Day") }} - {% elif doc.ends_on %} - {{ frappe.utils.get_time(doc.starts_on).strftime("%H:%M") }} - – - {{ frappe.utils.get_time(doc.ends_on).strftime("%H:%M") }} - {% else %} - {{ frappe.utils.get_time(doc.starts_on).strftime("%H:%M") }} - {% endif %} - {% if doc.repeat %} - {{ doc.repeat }} - {% endif %} -
+ {% if doc.image %} + + {% endif %} +
+
+ {{ doc.title or doc.name }} + + {% if doc.event_status == 'past' %} + {# + {{ _("Past Event") }} + #} + {% else %} + + {{ _(doc.status) }} + + {% endif %} +
+
+ {% if doc.ends_on and frappe.utils.getdate(doc.starts_on) != frappe.utils.getdate(doc.ends_on) %} + {{ frappe.utils.global_date_format(doc.starts_on) }} + – + {{ frappe.utils.global_date_format(doc.ends_on) }} + {% else %} + {{ frappe.utils.global_date_format(doc.starts_on) }} + {% endif %} +
+
+ {% if doc.all_day %} + {{ _("All Day") }} + {% elif doc.ends_on %} + {{ frappe.utils.get_time(doc.starts_on).strftime("%H:%M") }} + – + {{ frappe.utils.get_time(doc.ends_on).strftime("%H:%M") }} + {% else %} + {{ frappe.utils.get_time(doc.starts_on).strftime("%H:%M") }} + {% endif %} + {% if doc.repeat %} + {{ doc.repeat }} + {% endif %}
@@ -66,7 +64,6 @@ {% endif %}
-