Commit graph

16 commits

Author SHA1 Message Date
Ysterbaard
1fecf02214 Add pre-send validation gate + idempotent sign-back to appointment flow
PB: 3 new fields on ysterbaard_director_appointments
  - proceed_anyway (bool) — true if user proceeded with missing emails
  - missing_emails (text) — comma-separated keys
  - missing_emails_detail (text) — JSON per-recipient validation

App:
  - POST /api/appointments: builds recipient report (initial +
    distro); returns 422 + report if proceed_anyway is missing
    and any recipient is missing/invalid. preview=1 returns the
    report without sending.
  - PATCH /api/appointments/[id]: tightened idempotency guard to
    also short-circuit on signature_received (not just
    mail_sent_to_all). Prevents double-send on double-click.
  - DirectorAppointmentTab: two-step modal — "Validate recipients"
    surfaces the report (status dots + per-recipient email),
    then Send / Proceed anyway / Fix records first. New
    "company_email" gap surfaced before any email leaves.
  - lib/format.ts: isValidEmail() shared helper.

End-to-end tested: 422 enforces server-side, preview returns
the report, double-PATCH signs only once.
2026-08-18 21:29:08 +02:00
Dave
4066c1c43c Use master template style (Arial 11pt, justified, 1.5 spacing) for appointment letter PDF 2026-08-17 22:58:51 +02:00
Dave
efa4331b99 PDF daemon + attachments for appointment emails
- New /Volumes/KIOXIA/.hermes/profiles/ysterbaard/scripts/pdfd.js
  standalone HTML->PDF daemon on localhost:3070, calls soffice via
  execSync (proven working pattern from resignation form watcher.js)
- app/api/appointments/route.ts generates acceptance-letter.pdf via
  daemon, attaches via MIME multipart/mixed
- app/api/appointments/[id]/route.ts renders signed-letter.pdf with
  embedded signature, attaches to distro mail
- Idempotency guard: skip distro if status is already mail_sent_to_all
2026-08-17 22:34:58 +02:00
Dave
8ae44e42e4 Fix signed distro: send HTML email with inline signature image (no PDF required) 2026-08-17 22:16:41 +02:00
Dave
937fa922cc Remove blocking PDF generation from appointment POST (LibreOffice hangs from Next.js) 2026-08-17 21:45:36 +02:00
Dave
e8ef4589c9 Simplify appointment email: HTML body, no PDF attachment (LibreOffice spawn unreliable from Node.js) 2026-08-17 20:57:51 +02:00
Dave
cef29c7f1f Fix LibreOffice PDF output: check /private/tmp and rename to /tmp/ 2026-08-17 20:51:55 +02:00
Dave
1b120d2677 Fix LibreOffice: spawnSync array form + HOME/PATH env for Next.js server 2026-08-17 20:47:58 +02:00
Dave
ff5697507d Use spawn (not shell) for himalaya — avoids /bin/sh ETIMEDOUT 2026-08-17 20:44:45 +02:00
Dave
00634d2e1d Use himalaya message send --save Sent (saves to Sent folder) 2026-08-17 20:39:22 +02:00
Dave
6e0e6d1da7 Increase himalaya SMTP timeout to 60s 2026-08-17 20:37:22 +02:00
Dave
61c5830028 Fix himalaya command: use 'smtp send' with --mail-from/--rcpt-to flags 2026-08-17 20:31:53 +02:00
Dave
660db975e4 Increase LibreOffice timeout to 120s, add graceful fallback to text-only email 2026-08-17 20:23:02 +02:00
Dave
b0b625414a Add company_email to company table and detail page 2026-08-17 19:19:12 +02:00
Dave
2fb979b98a Director appointment acceptance — full feature
- DirectorAppointmentTab: table + 'Acceptance Letter' modal with company/director dropdowns
- GET/POST /api/appointments: create record, generate HTML letter, convert to PDF via LibreOffice, email to director via himalaya SMTP
- PATCH /api/appointments/[id]: save signature PNG, embed in signed letter PDF, mail to all company directors
- GET /api/appointments/sign/[token]: public token lookup
- /sign/[token]/page.tsx: public signature canvas (mouse + touch)
- ysterbaard_director_appointments PB collection (requires manual schema setup)
- Section 3 'Director Appointment' now active in ResolutionExplorer
- NEXT_PUBLIC_APP_URL added to .env.local
2026-08-17 18:39:14 +02:00
Dave
da504c45a0 wip: registration wizard, address splits, document panel, appointments
Uncommitted work in progress at the point of starting the Kanban
project. Captures:
- Registration wizard refactor + multi-step routing
- structured physical/postal address fields on companies and directors
- appointments flow (sign + verify)
- document type manager + upload/panel for companies and directors
- status actions, approve button, action/dropdown buttons
- step2 review page

tsconfig.tsbuildinfo is now ignored (build artefact).
2026-08-17 18:33:56 +02:00