task-g
This commit is contained in:
125
docs/implementation/task-g-document-preview-foundation.md
Normal file
125
docs/implementation/task-g-document-preview-foundation.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Task G - Quotation Document Preview Foundation
|
||||
|
||||
## Files Added
|
||||
|
||||
- `src/features/foundation/document-template/types.ts`
|
||||
- `src/features/foundation/document-template/service.ts`
|
||||
- `src/features/foundation/document-template/queries.ts`
|
||||
- `src/features/foundation/document-template/mutations.ts`
|
||||
- `src/features/foundation/document-template/server/service.ts`
|
||||
- `src/features/foundation/document-template/components/template-settings.tsx`
|
||||
- `src/features/crm/quotations/document/types.ts`
|
||||
- `src/features/crm/quotations/document/service.ts`
|
||||
- `src/features/crm/quotations/document/queries.ts`
|
||||
- `src/features/crm/quotations/document/server/service.ts`
|
||||
- `src/features/crm/quotations/components/quotation-document-preview.tsx`
|
||||
- `src/app/api/crm/quotations/[id]/document-data/route.ts`
|
||||
- `src/app/api/crm/quotations/[id]/document-preview/route.ts`
|
||||
- `src/app/api/crm/document-templates/route.ts`
|
||||
- `src/app/api/crm/document-templates/[id]/route.ts`
|
||||
- `src/app/api/crm/document-templates/[id]/versions/route.ts`
|
||||
- `drizzle/0006_worried_mordo.sql`
|
||||
|
||||
## Files Modified
|
||||
|
||||
- `src/db/schema.ts`
|
||||
- `src/db/seeds/foundation.seed.ts`
|
||||
- `src/lib/auth/rbac.ts`
|
||||
- `src/config/nav-config.ts`
|
||||
- `src/app/dashboard/crm/settings/templates/page.tsx`
|
||||
- `src/app/dashboard/crm/quotations/[id]/page.tsx`
|
||||
- `src/features/crm/quotations/components/quotation-detail.tsx`
|
||||
- `src/features/crm/quotations/api/mutations.ts`
|
||||
- `src/features/foundation/approval/mutations.ts`
|
||||
- `docs/implementation/technical-debt.md`
|
||||
|
||||
## Schema Added
|
||||
|
||||
- `crm_document_templates`
|
||||
- `crm_document_template_versions`
|
||||
- `crm_document_template_mappings`
|
||||
- `crm_document_template_table_columns`
|
||||
|
||||
## API Routes Added
|
||||
|
||||
- `GET /api/crm/quotations/[id]/document-data`
|
||||
- `GET /api/crm/quotations/[id]/document-preview`
|
||||
- `GET/POST /api/crm/document-templates`
|
||||
- `GET/PATCH/DELETE /api/crm/document-templates/[id]`
|
||||
- `GET/POST /api/crm/document-templates/[id]/versions`
|
||||
|
||||
## Preview UI Added
|
||||
|
||||
- Replaced quotation `Document Preview` placeholder with a production preview tab backed by real quotation data, template resolution, and mapped preview payloads.
|
||||
- Added watermark/status behavior for non-approved quotations through normalized `watermarkStatus`.
|
||||
- Preview now shows:
|
||||
- quotation header
|
||||
- customer block
|
||||
- project info
|
||||
- items table
|
||||
- price summary
|
||||
- scope / exclusion / payment topics
|
||||
- approval block
|
||||
- signature placeholders
|
||||
|
||||
## Template Settings UI Added
|
||||
|
||||
- Replaced `/dashboard/crm/settings/templates` placeholder with a production listing page.
|
||||
- Current UI is intentionally lightweight and read-focused:
|
||||
- template name and description
|
||||
- default badge
|
||||
- active/inactive badge
|
||||
- file type
|
||||
- latest version
|
||||
- version count
|
||||
- mapping count
|
||||
|
||||
## Template Seed Added
|
||||
|
||||
- Foundation seed now upserts a default quotation `pdfme` template per organization.
|
||||
- Seed picks template JSON by organization name:
|
||||
- `ALLA_template_pdfme_fainal3.json`
|
||||
- `ONVALLA_template_pdfme_fainal3.json`
|
||||
- If the organization name does not match either branch, the seed falls back to a minimal schema payload.
|
||||
- Seed also creates baseline placeholder mappings and a table mapping for quotation line items.
|
||||
|
||||
## Mapping Resolver Added
|
||||
|
||||
- `resolveTemplateForDocument()`
|
||||
- `resolveTemplateMappings()`
|
||||
- `mapDocumentDataToTemplateInput()`
|
||||
|
||||
Behavior:
|
||||
|
||||
- resolves by `documentType + productType + fileType`
|
||||
- falls back to `default` product type when no specific product template exists
|
||||
- maps dot-path source fields into scalar, multiline, or table-ready template input
|
||||
|
||||
## Approved Snapshot Prep Added
|
||||
|
||||
- `prepareApprovedQuotationSnapshot(quotationId, organizationId)`
|
||||
|
||||
Output contains:
|
||||
|
||||
- `quotationId`
|
||||
- `approvedAt`
|
||||
- `documentData`
|
||||
- `templateVersionId`
|
||||
- `templateInput`
|
||||
|
||||
## Remaining Risks
|
||||
|
||||
- Mapping CRUD UI is not implemented yet, so template mappings remain seed-driven and read-only.
|
||||
- `pdfme` preview is not canvas-accurate rendering; current preview is an application-native document view using the normalized document snapshot.
|
||||
- Template resolution currently uses `productType: default` for quotation preview. Product-specific template selection can be added later once the business rule is finalized.
|
||||
- No binary PDF generation, storage, or approved PDF URL persistence yet.
|
||||
|
||||
## Task H Readiness
|
||||
|
||||
Task G leaves the repo ready for:
|
||||
|
||||
- actual `pdfme` generation service integration
|
||||
- approved PDF snapshot persistence
|
||||
- template version publishing workflow
|
||||
- mapping editor or admin maintenance UI
|
||||
- product-specific template resolution rules
|
||||
@@ -140,3 +140,53 @@ Future:
|
||||
Priority:
|
||||
|
||||
* High
|
||||
|
||||
## After Task F
|
||||
|
||||
### Approval Permission Sync
|
||||
Existing memberships may not automatically receive new approval permissions.
|
||||
|
||||
Future:
|
||||
- add permission sync script
|
||||
- admin UI for role/permission management
|
||||
|
||||
### Approval Workflow Config UI
|
||||
Approval workflow is seeded but not configurable from UI.
|
||||
|
||||
Future:
|
||||
- workflow setup screen
|
||||
- step editor
|
||||
- approver role mapping
|
||||
|
||||
### Approval Notification
|
||||
Approval workflow has no email/line notification yet.
|
||||
|
||||
Future:
|
||||
- notification queue
|
||||
- approval reminder
|
||||
|
||||
## After Task G
|
||||
|
||||
### Document Mapping Editor
|
||||
Template mappings are seeded and readable, but not yet manageable from UI.
|
||||
|
||||
Future:
|
||||
- mapping CRUD UI
|
||||
- table column editor
|
||||
- publish/draft template workflow
|
||||
|
||||
### pdfme Render Parity
|
||||
Document preview is application-native, not pixel-perfect `pdfme` rendering.
|
||||
|
||||
Future:
|
||||
- server-side pdfme render pipeline
|
||||
- preview image generation
|
||||
- schema validation against live template versions
|
||||
|
||||
### Approved PDF Persistence
|
||||
Approved snapshot preparation exists, but no binary file generation or storage write-back yet.
|
||||
|
||||
Future:
|
||||
- approved PDF generator
|
||||
- storage abstraction
|
||||
- immutable approved artifact URL on quotation
|
||||
|
||||
Reference in New Issue
Block a user