You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Backend half of the Client Detail redesign follow-ups (#7, #6, #4). #7 — quotation step links its document - project_milestone gains a nullable `document_id`, landed on BOTH engines: a PRAGMA-guarded ALTER in db.ts migrate() and pg migration 016. - setMilestone(..., doneOn?, paymentId?, documentId?) validates the document belongs to the same client as the project (mirroring the paymentId check), stores it on tick and clears it on untick; Milestone gains `documentId`. - POST /client-modules/:id/milestones accepts `documentId`. - migrateOnboardingTemplates carries document_id across the template swap so a linked quotation is not lost. #6 — ticket classification - ticket gains `type TEXT NOT NULL DEFAULT 'service'` (db.ts SCHEMA + guarded ALTER, pg migration 017); imported APEX rows fall to the default. - Config over code: the list is the `ticket.types` setting (seeded on first boot) resolved by ticketTypes(), with TICKET_TYPE_FALLBACK in code. - GET /tickets/types; create/update accept + validate `type`; list rows carry it and GET /tickets?type= filters (blank/omitted = every type). #4 — cleanup - Refreshed the stale file comment atop repos-milestones.ts and the project_milestone comment in db.ts: both now describe the composed front + per-module tail model (they still described the old flat template). - Migration tests for the interim keys advance_payment / balance_payment -> payment_received, plus the document-link carry. npm run typecheck clean; npm test 473 passed / 5 skipped (was 453/5). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
1 day ago | |
|---|---|---|
| .. | ||
| scripts | 1 day ago | |
| src | 1 day ago | |
| test | 1 day ago | |
| .env.example | 3 days ago | |
| build-server.mjs | 2 weeks ago | |
| package.json | 4 days ago | |
| schema.sql | 2 weeks ago | |
| tsconfig.json | 2 weeks ago | |