from datetime import datetime, timedelta 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 = datetime.strptime(envelope['date'].split('+')[0], "%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