From c72b7c1625a2d4b0e8b77f6882fe879f6bf1905d Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 15 Jun 2026 09:48:41 +0000 Subject: [PATCH] Add coordination comments, damp/mould, and Domna survey columns to property table and CSV export Co-Authored-By: Claude Sonnet 4.6 --- .../your-projects/live/PropertyTable.tsx | 8 +++ .../live/PropertyTableColumns.tsx | 68 +++++++++++++++++++ .../your-projects/live/dealQuery.ts | 2 + .../your-projects/live/docStatus.test.ts | 2 + .../your-projects/live/measureFilters.test.ts | 2 + .../your-projects/live/propertyCsv.test.ts | 2 + .../your-projects/live/propertyCsv.ts | 4 ++ .../your-projects/live/transforms.test.ts | 2 + .../(portfolio)/your-projects/live/types.ts | 2 + 9 files changed, 92 insertions(+) diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx index 348a5a11..9594f538 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx @@ -64,6 +64,10 @@ const COLUMN_LABELS: Record = { epcPrn: "EPC Certificate Number", batch: "Group", batchDescription: "Group Description", + coordinationComments: "Coordination Comments", + dampAndMouldGrowth: "Damp and Mould Growth", + dampMouldAndRepairComments: "Dampm, Mould and Repair Comments", + domnaSurveyRequested: "Domna Survey Requested" }; type DocFilter = "all" | "has_docs" | "incomplete" | "none"; @@ -106,6 +110,10 @@ export default function PropertyTable({ data, onOpenDrawer, portfolioId = "", sh epcPrn: false, batch: false, batchDescription: false, + coordinationComments: false, + dampAndMouldGrowth: false, + dampMouldAndRepairComments: false, + domnaSurveyRequested: false, }); // Pre-filter by stage, doc status, and removal status before TanStack gets it diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx index b889d636..eeb579fa 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx @@ -371,6 +371,74 @@ export function createPropertyTableColumns( ), }, + // ── Coordination comments ──────────────────────────────────────────── + { + accessorKey: "coordinationComments", + id: "coordinationComments", + header: () => ( + + Coordination Comments + + ), + cell: ({ row }) => ( + + {row.original.coordinationComments ?? } + + ), + }, + + // ── Damp and mould growth ──────────────────────────────────────────── + { + id: "dampAndMouldGrowth", + accessorFn: (row) => row.dampMouldFlag, + header: () => ( + + Damp & Mould Growth + + ), + cell: ({ row }) => ( + + {row.original.dampMouldFlag ?? } + + ), + }, + + // ── Damp, mould and repair comments ───────────────────────────────── + { + accessorKey: "dampMouldAndRepairComments", + id: "dampMouldAndRepairComments", + header: () => ( + + Damp, Mould & Repair Comments + + ), + cell: ({ row }) => ( + + {row.original.dampMouldAndRepairComments ?? } + + ), + }, + + // ── Domna survey required ──────────────────────────────────────────── + { + id: "domnaSurveyRequested", + accessorFn: (row) => row.domnasurveyRequired, + header: () => ( + + Domna Survey Required + + ), + cell: ({ row }) => { + const val = row.original.domnasurveyRequired; + if (val === null || val === undefined) return ; + return ( + + {val ? "Yes" : "No"} + + ); + }, + }, + ]; if (showDocuments) { diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts index 0532ab36..fb112ef3 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts @@ -36,6 +36,8 @@ export function mapDbRowToHubspotDeal(row: DealRow): HubspotDeal { sharepointLink: d.sharepointLink, dampMouldFlag: d.dampmouldGrowth, dampMouldAndRepairComments: d.dampMouldAndRepairComments, + coordinationComments: d.coordination_comments, + domnasurveyRequired: d.domnasurveyRequired, preSapScore: d.preSap, coordinator: row.coordinator, ioeV1Date: d.mtpCompletionDate, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts index 029e4113..fc281f23 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts @@ -60,6 +60,8 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), ...overrides, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts index 9166e8b5..afa7193b 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts @@ -59,6 +59,8 @@ function makeDeal(overrides: Partial = {}): ClassifiedDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), displayStage: "Coordination in Progress", diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts index da315e1a..ba3fb006 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts @@ -59,6 +59,8 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), ...overrides, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts index 37de6463..8fe4b778 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts @@ -26,6 +26,10 @@ export const PROPERTY_CSV_FIELDS: PropertyCsvField[] = [ { key: "epcPrn", label: "EPC Certificate Number" }, { key: "batch", label: "Group" }, { key: "batchDescription", label: "Group Description" }, + { key: "coordinationComments", label: "Coordination Comments" }, + { key: "dampMouldFlag", label: "Damp and Mould Growth" }, + { key: "dampMouldAndRepairComments", label: "Damp Mould and Repair Comments" }, + { key: "domnasurveyRequired", label: "Domna Survey Required" }, ]; export function escapeCsvCell(value: unknown): string { diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts index a60db64e..5467d22a 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts @@ -66,6 +66,8 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), ...overrides, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts index f53d71aa..07a81140 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts @@ -30,6 +30,8 @@ export type HubspotDeal = { sharepointLink: string | null; dampMouldFlag: string | null; // coordinator-stage damp/mould flag dampMouldAndRepairComments: string | null; // coordinator damp/mould comments + coordinationComments: string | null; + domnasurveyRequired: boolean | null; preSapScore: string | null; // kept as text (HubSpot returns strings) coordinator: string | null; ioeV1Date: Date | null;