40 lines
1.9 KiB
Markdown
40 lines
1.9 KiB
Markdown
# Task D.2 Billing Customer + Project Parties
|
|
|
|
## Scope delivered
|
|
|
|
- Kept the main CRM field named `Billing Customer` on enquiry and quotation forms/detail pages.
|
|
- Added a separate `Project Parties` model for enquiries and aligned quotation related customers to the same business concept.
|
|
- Added `remark` support on quotation project parties and introduced enquiry project-party persistence.
|
|
- Switched role sourcing to the shared master-option category `crm_project_party_role`.
|
|
- Added compatibility mapping so legacy quotation roles such as `owner` and `billing` still render correctly.
|
|
|
|
## Data model
|
|
|
|
- Added `crm_enquiry_customers` for enquiry project parties.
|
|
- Added `remark` column to `crm_quotation_customers`.
|
|
- Generated migration `drizzle/0010_calm_wendell_rand.sql`.
|
|
|
|
## Server behavior
|
|
|
|
- Enquiry create/update now sync `Project Parties` transactionally.
|
|
- Quotation create/update now sync `Project Parties` transactionally.
|
|
- Billing customer is auto-added as a `billing_customer` project party during sync.
|
|
- Duplicate `customerId + roleCode` combinations are de-duplicated during main form sync and rejected in quotation detail CRUD.
|
|
- Quotation project-party reads normalize legacy role codes to current shared role options.
|
|
|
|
## UI changes
|
|
|
|
- Enquiry form now has `Billing Customer` plus a `Project Parties` editor.
|
|
- Enquiry detail now shows `Billing Customer` and `Project Parties` separately.
|
|
- Quotation form now has `Billing Customer` plus a `Project Parties` editor.
|
|
- Quotation detail overview separates `Billing Customer` and `Project Parties`.
|
|
- Quotation customer tab is relabeled to `Project Parties`, shows role clearly, and supports remark editing.
|
|
|
|
## Verification
|
|
|
|
- `npx tsc --noEmit` passes.
|
|
- `npm run lint` still fails because of pre-existing repo issues outside this task, including:
|
|
- `src/components/ui/input-group.tsx`
|
|
- `src/features/chat/components/message-composer.tsx`
|
|
- `src/components/forms/demo-form.tsx`
|