task-d.6.2
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generatedAt": "2026-07-01T02:01:55.746Z",
|
||||
"generatedAt": "2026-07-01T04:26:26.164Z",
|
||||
"overallStatus": "PASS",
|
||||
"quotationCode": "CRA2606-1107",
|
||||
"expectedFixtureCode": "QT-H5-AUDIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# PDF Audit Report
|
||||
|
||||
- Generated At: 2026-07-01T02:01:55.746Z
|
||||
- Generated At: 2026-07-01T04:26:26.164Z
|
||||
- Overall Status: PASS
|
||||
- Quotation Code: CRA2606-1107
|
||||
- Template: ALLA Demo Quotation Standard v1.0
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
# Task D.6.2 Implementation Report - 2026-07-01
|
||||
|
||||
## Scope
|
||||
- Prefill quotation creation from opportunity detail so users do not need to reselect the same opportunity.
|
||||
- Add `Project Close Date` and `Delivery Date` to both opportunity and quotation flows.
|
||||
- Enforce backend-supported hot-project auto suggestion with same-session manual override support.
|
||||
|
||||
## Review Summary
|
||||
Reviewed before implementation:
|
||||
- [AGENTS.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/AGENTS.md)
|
||||
- [plans/task-d.6.2.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/plans/task-d.6.2.md)
|
||||
- [docs/standards/project-foundations.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/standards/project-foundations.md)
|
||||
- [docs/standards/architecture-rules.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/standards/architecture-rules.md)
|
||||
- [docs/standards/ui-ux-rules.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/standards/ui-ux-rules.md)
|
||||
- [docs/standards/task-review-checklist.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/standards/task-review-checklist.md)
|
||||
- [docs/business/crm-terminology.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/business/crm-terminology.md)
|
||||
- [docs/adr/0018-lead-enquiry-domain-separation.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/adr/0018-lead-enquiry-domain-separation.md)
|
||||
- [docs/implementation/task-d.6-crm-activity-foundation-audit-log-separation-2026-07-01.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/implementation/task-d.6-crm-activity-foundation-audit-log-separation-2026-07-01.md)
|
||||
- [docs/implementation/task-d.6.1-lead-create-form-ux-default-rules-2026-07-01.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/implementation/task-d.6.1-lead-create-form-ux-default-rules-2026-07-01.md)
|
||||
|
||||
## Implementation Summary
|
||||
- Added shared hot-project decision logic in [hot-project.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/shared/hot-project.ts) so frontend and backend use the same `projectCloseDate <= current date + 3 months` rule.
|
||||
- Extended `crm_opportunities` and `crm_quotations` with `project_close_date`, `delivery_date`, `hot_project_auto_suggested`, and `hot_project_manually_overridden`, plus migration [0002_opportunity_quotation_timeline_hot_project.sql](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/drizzle/0002_opportunity_quotation_timeline_hot_project.sql).
|
||||
- Updated DTOs, Zod schemas, and server services so create/update flows accept the new date fields, validate `YYYY-MM-DD`, auto-suggest hot-project state, and preserve manual override flags.
|
||||
- Updated opportunity form to show calendar-based `Project Close Date` and `Delivery Date`, and to stop re-forcing the hot-project checkbox after the user manually changes it in the same session.
|
||||
- Rebuilt quotation form flow to support:
|
||||
- opening from opportunity detail with prefilled opportunity/customer/contact/project data
|
||||
- timeline field carry-forward (`projectCloseDate`, `deliveryDate`)
|
||||
- hot-project auto suggestion with manual override preservation
|
||||
- touched-field protection so post-open prefills do not overwrite user edits
|
||||
- Updated opportunity detail to pass quotation prefill context and display new timeline values.
|
||||
|
||||
## Files Changed
|
||||
- [src/db/schema.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/db/schema.ts)
|
||||
- [drizzle/0002_opportunity_quotation_timeline_hot_project.sql](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/drizzle/0002_opportunity_quotation_timeline_hot_project.sql)
|
||||
- [drizzle/meta/_journal.json](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/drizzle/meta/_journal.json)
|
||||
- [src/features/crm/shared/hot-project.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/shared/hot-project.ts)
|
||||
- [src/features/crm/opportunities/api/types.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/opportunities/api/types.ts)
|
||||
- [src/features/crm/opportunities/schemas/opportunity.schema.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/opportunities/schemas/opportunity.schema.ts)
|
||||
- [src/features/crm/opportunities/server/service.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/opportunities/server/service.ts)
|
||||
- [src/features/crm/opportunities/components/opportunity-form-sheet.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/opportunities/components/opportunity-form-sheet.tsx)
|
||||
- [src/features/crm/opportunities/components/opportunity-detail.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/opportunities/components/opportunity-detail.tsx)
|
||||
- [src/app/api/crm/opportunities/route.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/app/api/crm/opportunities/route.ts)
|
||||
- [src/app/api/crm/opportunities/[id]/route.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/app/api/crm/opportunities/[id]/route.ts)
|
||||
- [src/features/crm/quotations/api/types.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/quotations/api/types.ts)
|
||||
- [src/features/crm/quotations/schemas/quotation.schema.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/quotations/schemas/quotation.schema.ts)
|
||||
- [src/features/crm/quotations/server/service.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/quotations/server/service.ts)
|
||||
- [src/features/crm/quotations/components/quotation-form-sheet.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/quotations/components/quotation-form-sheet.tsx)
|
||||
|
||||
## Verification
|
||||
- `npm run typecheck` ✅
|
||||
- `npm run build` ✅
|
||||
- Existing warnings remained from Turbopack workspace-root inference and the broad local storage provider path pattern in `src/features/foundation/storage/server/local-provider.ts`.
|
||||
- `npm run audit:pdf` ✅
|
||||
- Regenerated audit artifacts and reports under `artifacts/pdf-audit/` and `docs/implementation/pdf-audit-report.*`.
|
||||
|
||||
## Outcome
|
||||
- Opportunity detail now launches quotation creation with selected opportunity context already attached.
|
||||
- Opportunity and quotation both persist project timeline dates.
|
||||
- Hot-project suggestion is deterministic, backend-backed, and no longer fights the user after manual override during the same edit session.
|
||||
Reference in New Issue
Block a user