This commit is contained in:
phaichayon
2026-06-16 10:57:41 +07:00
parent dff22d75b5
commit 357414c247
33 changed files with 9281 additions and 26 deletions

View 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