126 lines
4.4 KiB
Markdown
126 lines
4.4 KiB
Markdown
# 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
|