1.9 KiB
1.9 KiB
Task D.2 Billing Customer + Project Parties
Scope delivered
- Kept the main CRM field named
Billing Customeron enquiry and quotation forms/detail pages. - Added a separate
Project Partiesmodel for enquiries and aligned quotation related customers to the same business concept. - Added
remarksupport 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
ownerandbillingstill render correctly.
Data model
- Added
crm_enquiry_customersfor enquiry project parties. - Added
remarkcolumn tocrm_quotation_customers. - Generated migration
drizzle/0010_calm_wendell_rand.sql.
Server behavior
- Enquiry create/update now sync
Project Partiestransactionally. - Quotation create/update now sync
Project Partiestransactionally. - Billing customer is auto-added as a
billing_customerproject party during sync. - Duplicate
customerId + roleCodecombinations 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 Customerplus aProject Partieseditor. - Enquiry detail now shows
Billing CustomerandProject Partiesseparately. - Quotation form now has
Billing Customerplus aProject Partieseditor. - Quotation detail overview separates
Billing CustomerandProject Parties. - Quotation customer tab is relabeled to
Project Parties, shows role clearly, and supports remark editing.
Verification
npx tsc --noEmitpasses.npm run lintstill fails because of pre-existing repo issues outside this task, including:src/components/ui/input-group.tsxsrc/features/chat/components/message-composer.tsxsrc/components/forms/demo-form.tsx