43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from datetime import datetime, timedelta
|
|
import re
|
|
from typing import List, Dict
|
|
|
|
|
|
def group_envelopes_by_date(envelopes: List[Dict]) -> List[Dict]:
|
|
"""Group envelopes by date and add headers for each group."""
|
|
grouped_envelopes = []
|
|
today = datetime.now()
|
|
yesterday = today - timedelta(days=1)
|
|
start_of_week = today - timedelta(days=today.weekday())
|
|
start_of_last_week = start_of_week - timedelta(weeks=1)
|
|
start_of_month = today.replace(day=1)
|
|
start_of_last_month = (start_of_month - timedelta(days=1)).replace(day=1)
|
|
|
|
def get_group_label(date: datetime) -> str:
|
|
if date.date() == today.date():
|
|
return "Today"
|
|
elif date.date() == yesterday.date():
|
|
return "Yesterday"
|
|
elif date >= start_of_week:
|
|
return "This Week"
|
|
elif date >= start_of_last_week:
|
|
return "Last Week"
|
|
elif date >= start_of_month:
|
|
return "This Month"
|
|
elif date >= start_of_last_month:
|
|
return "Last Month"
|
|
else:
|
|
return "Older"
|
|
|
|
current_group = None
|
|
for envelope in envelopes:
|
|
envelope_date = re.sub(r"[\+\-]\d\d:\d\d", "", envelope["date"])
|
|
envelope_date = datetime.strptime(envelope_date, "%Y-%m-%d %H:%M")
|
|
group_label = get_group_label(envelope_date)
|
|
if group_label != current_group:
|
|
grouped_envelopes.append({"type": "header", "label": group_label})
|
|
current_group = group_label
|
|
grouped_envelopes.append(envelope)
|
|
|
|
return grouped_envelopes
|