diff --git a/src/quartermaster/routes.py b/src/quartermaster/routes.py index 926eb60..b9283c4 100644 --- a/src/quartermaster/routes.py +++ b/src/quartermaster/routes.py @@ -107,13 +107,14 @@ def create_entry( request: Request, name: str = Form(...), amount: str = Form(...), + notes: str | None = Form(None), db: Session = Depends(get_session), ) -> HTMLResponse: clean_name = name.strip() if not clean_name: raise HTTPException(status_code=400, detail="name is required") parsed = _parse_amount(amount) - service.add_entry(db, section, clean_name, parsed) + service.add_entry(db, section, clean_name, parsed, notes=notes) response = _render_section(request, db, section) extras: list[HTMLResponse] = [ _render_zero(request, db), @@ -143,6 +144,19 @@ def remove_entry( return _append_oob(response, *extras) +@router.post("/entries/{entry_id}/notes", response_class=HTMLResponse) +def update_entry_notes( + entry_id: int, + request: Request, + notes: str | None = Form(None), + db: Session = Depends(get_session), +) -> HTMLResponse: + updated = service.set_entry_notes(db, entry_id, notes) + if updated is None: + raise HTTPException(status_code=404, detail="entry not found") + return _render_section(request, db, updated.section) + + @router.post("/debt-target", response_class=HTMLResponse) def update_debt_target( request: Request, diff --git a/src/quartermaster/routes_month.py b/src/quartermaster/routes_month.py index 8faa748..b6ee5e2 100644 --- a/src/quartermaster/routes_month.py +++ b/src/quartermaster/routes_month.py @@ -164,6 +164,7 @@ def add_month_entry( request: Request, name: str = Form(...), planned: str = Form(...), + notes: str | None = Form(None), db: Session = Depends(get_session), ) -> HTMLResponse: month = _require_month(db, year_month) @@ -171,7 +172,7 @@ def add_month_entry( if not clean_name: raise HTTPException(status_code=400, detail="name is required") month_service.add_month_entry( - db, month, section, clean_name, _parse_amount(planned) + db, month, section, clean_name, _parse_amount(planned), notes=notes ) db.refresh(month) return _append_oob( @@ -210,6 +211,7 @@ def update_month_entry( name: str | None = Form(None), planned: str | None = Form(None), applied: str | None = Form(None), + notes: str | None = Form(None), db: Session = Depends(get_session), ) -> HTMLResponse: month = _require_month(db, year_month) @@ -220,14 +222,14 @@ def update_month_entry( raise HTTPException(status_code=400, detail="name must not be empty") parsed_planned = _parse_amount(planned) if planned is not None else None parsed_applied = _parse_amount(applied) if applied is not None else None - updated = month_service.update_month_entry( - db, - month, - entry_id, + kwargs: dict = dict( name=clean_name, planned=parsed_planned, applied=parsed_applied, ) + if notes is not None: + kwargs["notes"] = notes + updated = month_service.update_month_entry(db, month, entry_id, **kwargs) if updated is None: raise HTTPException(status_code=404, detail="entry not found") db.refresh(month) diff --git a/src/quartermaster/static/app.css b/src/quartermaster/static/app.css index 8a9fb97..5106d1e 100644 --- a/src/quartermaster/static/app.css +++ b/src/quartermaster/static/app.css @@ -111,6 +111,37 @@ tr.add-row td { .muted { color: var(--muted); font-style: italic; } +tr.entry-notes-row td { + padding: 0 0.5rem 0.35rem; + border-bottom: 1px solid var(--rule); +} + +.notes-input { + width: 100%; + padding: 0.2rem 0.4rem; + font-size: 0.85rem; + color: var(--muted); + background: transparent; + border: none; + border-bottom: 1px dashed transparent; +} + +.notes-input:hover, +.notes-input:focus { + border-bottom-color: var(--rule); + outline: none; +} + +.notes-input:not(:placeholder-shown) { + color: var(--ink); + font-style: italic; +} + +.add-form .add-notes { + grid-column: 1 / -1; + font-size: 0.85rem; +} + button.delete { background: transparent; border: none; diff --git a/src/quartermaster/templates/partials/month_section.html b/src/quartermaster/templates/partials/month_section.html index 922316d..88b6d6f 100644 --- a/src/quartermaster/templates/partials/month_section.html +++ b/src/quartermaster/templates/partials/month_section.html @@ -68,6 +68,22 @@ >× + + + + + {% else %} No entries. {% endfor %} @@ -83,6 +99,7 @@ + diff --git a/src/quartermaster/templates/partials/section.html b/src/quartermaster/templates/partials/section.html index 59210c8..8abe715 100644 --- a/src/quartermaster/templates/partials/section.html +++ b/src/quartermaster/templates/partials/section.html @@ -22,6 +22,22 @@ >× + + + + + {% else %} No entries yet. {% endfor %} @@ -37,6 +53,7 @@ +