Files
alla-allaos-fullstack/plans/task-p.4.md
phaichayon 0c0450b152 taks-p.4.3
2026-06-29 11:18:08 +07:00

5.1 KiB

Task P.4 - PDFMe Product Item Table Template Refactoring

Objective

Redesign the PDFMe quotation template to support dynamic Product Item tables by introducing a dedicated Product Item page between the existing Customer Detail page and Condition & Signature page.

The implementation must not modify or replace the existing template. A completely new template version shall be created while maintaining full backward compatibility.


Mandatory Discovery Phase (Required)

Before implementing anything, inspect the actual project structure and produce a discovery report.

Do NOT make architectural assumptions.

The implementation may only begin after the discovery phase is completed.


Discovery Scope

Inspect the current implementation under the CRM Template module.

At minimum review:

1. CRM Template Module

Inspect everything related to

/dashboard/crm/settings/templates

including

  • pages
  • components
  • dialogs
  • APIs
  • services
  • repositories
  • database schema
  • template versioning
  • template preview
  • template import/export
  • template activation flow

Document how the template lifecycle currently works.


2. PDF Generation Runtime

Inspect the entire rendering pipeline.

Including

  • quotation-preview.tsx
  • PDF preview flow
  • PDF download flow
  • pdfme template loader
  • template selector
  • font loader
  • plugin registration
  • input builder
  • layout engine
  • topic engine
  • schema builder
  • adapter layer

Produce a dependency graph showing how a quotation becomes a PDF.


3. Existing PDF Templates

Locate every existing PDFMe template.

Document

  • current page count
  • page purpose
  • schema layout
  • static schema
  • dynamic schema
  • reusable components

Do not assume the current template structure.


4. Product Item Flow

Locate where quotation product items originate.

Trace

Quotation

Export Payload

Preview Model

Input Builder

PDF Template

PDF Generator

Document every transformation layer.

Do NOT duplicate DTOs or adapters if an existing one already provides the required data.


5. Layout Engine

Inspect the existing layout implementation.

Determine whether it already supports

  • page insertion
  • page cloning
  • page replacement
  • page splitting
  • dynamic page generation
  • table pagination
  • automatic page break

If not supported,

design the extension before implementation.


Discovery Output

Before coding, provide

  1. Existing architecture

  2. Dependency graph

  3. Current template lifecycle

  4. Runtime rendering flow

  5. Files that will be modified

  6. New files that will be created

  7. Backward compatibility analysis

  8. Risk assessment

  9. Migration strategy

Implementation may only begin after this report.


Functional Requirements

Current document

Page 1
Customer Detail

Page 2
Condition + Signature

shall become

Page 1
Customer Detail

Page 2
Product Item Detail Table

Page 3
Condition & Signature

Product Item Page

The Product Item page shall contain

  • quotation items
  • item number
  • product code
  • description
  • specification
  • quantity
  • unit
  • unit price
  • discount
  • amount
  • remark (if available)

The table shall support

  • unlimited rows
  • automatic page break
  • repeated table header
  • automatic page numbering if multiple product pages are required

No fixed maximum row count.


PDFMe Table

Use the official PDFMe Table implementation.

Do not create a custom HTML rendering solution.

Support

  • automatic pagination
  • repeated headers
  • dynamic row height
  • variable content length

Template Versioning

Do NOT modify

  • existing template JSON
  • existing production template
  • existing preview template

Create a new version.

Example

ALLA_template_pdfme_product_v1.json

ONVALLA_template_pdfme_product_v1.json

The existing templates must continue working without any behavior changes.


Runtime Compatibility

The preview system must support both

Legacy Template

and

Product Item Template

through template selection.

No breaking changes.


CRM Template Module Compatibility

The implementation must integrate with the existing

/dashboard/crm/settings/templates

workflow.

Do not bypass

  • template storage
  • template CRUD
  • version management
  • preview
  • activation

The new template shall behave exactly like existing templates.


Non-Functional Requirements

  • No breaking changes
  • No duplicated rendering pipeline
  • No duplicated adapters
  • No duplicated DTOs
  • No duplicated services
  • Reuse existing layout engine whenever possible
  • Extend existing architecture instead of replacing it

Acceptance Criteria

  • Discovery report completed before implementation.
  • Existing templates remain unchanged.
  • New Product Item template added as a separate version.
  • Product Item page inserted between Customer Detail and Condition page.
  • Unlimited Product Item rows supported.
  • Automatic page break works correctly.
  • Table headers repeat across pages.
  • Preview works correctly.
  • PDF download works correctly.
  • Existing templates continue functioning without modification.
  • /dashboard/crm/settings/templates fully supports the new template without regression.