Add PDF export to Activity Log with date range filtering
- Backend: add date_from/date_to query params to timeline, strikes, and logs endpoints - Frontend: Export PDF button opens a dialog to select child and date range, generates a printable HTML report in a new tab Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,8 @@ router = APIRouter(prefix="/api/logs", tags=["logs"])
|
||||
async def get_timeline(
|
||||
child_id: int | None = None,
|
||||
log_date: date | None = None,
|
||||
date_from: date | None = None,
|
||||
date_to: date | None = None,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
@@ -44,6 +46,10 @@ async def get_timeline(
|
||||
query = query.where(DailySession.child_id == child_id)
|
||||
if log_date:
|
||||
query = query.where(DailySession.session_date == log_date)
|
||||
if date_from:
|
||||
query = query.where(DailySession.session_date >= date_from)
|
||||
if date_to:
|
||||
query = query.where(DailySession.session_date <= date_to)
|
||||
|
||||
result = await db.execute(query)
|
||||
events = result.scalars().all()
|
||||
@@ -125,6 +131,8 @@ async def delete_timeline_event(
|
||||
async def get_strike_events(
|
||||
child_id: int | None = None,
|
||||
log_date: date | None = None,
|
||||
date_from: date | None = None,
|
||||
date_to: date | None = None,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
@@ -139,6 +147,10 @@ async def get_strike_events(
|
||||
query = query.where(StrikeEvent.child_id == child_id)
|
||||
if log_date:
|
||||
query = query.where(func.date(StrikeEvent.occurred_at) == log_date)
|
||||
if date_from:
|
||||
query = query.where(func.date(StrikeEvent.occurred_at) >= date_from)
|
||||
if date_to:
|
||||
query = query.where(func.date(StrikeEvent.occurred_at) <= date_to)
|
||||
|
||||
result = await db.execute(query)
|
||||
events = result.scalars().all()
|
||||
@@ -178,6 +190,8 @@ async def delete_strike_event(
|
||||
async def list_logs(
|
||||
child_id: int | None = None,
|
||||
log_date: date | None = None,
|
||||
date_from: date | None = None,
|
||||
date_to: date | None = None,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
@@ -191,6 +205,10 @@ async def list_logs(
|
||||
query = query.where(ActivityLog.child_id == child_id)
|
||||
if log_date:
|
||||
query = query.where(ActivityLog.log_date == log_date)
|
||||
if date_from:
|
||||
query = query.where(ActivityLog.log_date >= date_from)
|
||||
if date_to:
|
||||
query = query.where(ActivityLog.log_date <= date_to)
|
||||
|
||||
result = await db.execute(query)
|
||||
return result.scalars().all()
|
||||
|
||||
Reference in New Issue
Block a user