diff --git a/src/app/api/live-tracking/property-documents/route.ts b/src/app/api/live-tracking/property-documents/route.ts index 55774d8..35f4991 100644 --- a/src/app/api/live-tracking/property-documents/route.ts +++ b/src/app/api/live-tracking/property-documents/route.ts @@ -5,22 +5,25 @@ import { uploadedFiles } from "@/app/db/schema/uploaded_files"; export async function GET(req: Request) { const { searchParams } = new URL(req.url); + const dealIdParam = searchParams.get("dealId"); const uprnParam = searchParams.get("uprn"); const landlordPropertyIdParam = searchParams.get("landlordPropertyId"); - if (!uprnParam && !landlordPropertyIdParam) { + if (!dealIdParam && !uprnParam && !landlordPropertyIdParam) { return NextResponse.json( - { error: "uprn or landlordPropertyId is required" }, + { error: "dealId, uprn, or landlordPropertyId is required" }, { status: 400 }, ); } try { - // Prefer UPRN — it's more selective and avoids an OR full-table scan. - // Only fall back to landlordPropertyId when no UPRN is available. - const condition = uprnParam - ? eq(uploadedFiles.uprn, BigInt(uprnParam)) - : eq(uploadedFiles.landlordPropertyId, landlordPropertyIdParam!); + // Prefer dealId — reliable even when UPRN is missing from the deal. + // Fall back to UPRN, then landlordPropertyId. + const condition = dealIdParam + ? eq(uploadedFiles.hubsotDealId, dealIdParam) + : uprnParam + ? eq(uploadedFiles.uprn, BigInt(uprnParam)) + : eq(uploadedFiles.landlordPropertyId, landlordPropertyIdParam!); const rows = await db .select({ diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx index 95c60e7..ccb1db8 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx @@ -663,8 +663,7 @@ export default function ContractorUploadModal({ deal, portfolioId, onClose, docS {/* ── Measure Select ── */} {phase === "measure-select" && (() => { - const uprn = deal.uprn ?? null; - const docStatus = uprn ? docStatusMap?.[uprn] : undefined; + const docStatus = docStatusMap?.[deal.dealId]; const measureProgressMap = new Map( (docStatus?.measureProgress ?? []).map((m) => [m.measureName, m]), ); @@ -779,8 +778,7 @@ export default function ContractorUploadModal({ deal, portfolioId, onClose, docS {/* ── Phase 2: Classify ── */} {phase === "classify" && (() => { - const uprn = deal.uprn ?? null; - const docStatus = uprn ? docStatusMap?.[uprn] : undefined; + const docStatus = docStatusMap?.[deal.dealId]; const measureProgressMap = new Map( (docStatus?.measureProgress ?? []).map((m) => [m.measureName, m]), ); diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTable.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTable.tsx index 26457b9..8efbcb8 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTable.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTable.tsx @@ -36,7 +36,7 @@ type InstallStatusFilter = "all" | "none" | "hasDocs" | "partial" | "complete"; interface DocumentTableProps { data: ClassifiedDeal[]; - onOpenDrawer: (uprn: string | null, landlordPropertyId: string | null, dealname: string | null) => void; + onOpenDrawer: (dealId: string, uprn: string | null, landlordPropertyId: string | null, dealname: string | null) => void; docStatusMap: DocStatusMap; portfolioId: string; userCapability: PortfolioCapabilityType; @@ -67,7 +67,7 @@ export default function DocumentTable({ data, onOpenDrawer, docStatusMap, portfo const filteredData = useMemo(() => { return data.filter((d) => { - const status = d.uprn ? docStatusMap[d.uprn] : undefined; + const status = docStatusMap[d.dealId]; if (retroAssessmentFilter !== "all") { if (retroAssessmentFilter === "none" && !(!status || !status.hasSurveyDocs)) return false; @@ -115,7 +115,7 @@ export default function DocumentTable({ data, onOpenDrawer, docStatusMap, portfo const header = "Address,Landlord ID,Retrofit Assessment Status,Install Docs Status"; const body = rows .map((row) => { - const status = row.original.uprn ? docStatusMap[row.original.uprn] : undefined; + const status = docStatusMap[row.original.dealId]; const retroStatus = status?.isSurveyComplete ? "Complete" : status?.hasSurveyDocs diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTableColumns.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTableColumns.tsx index 2263d0d..f1371e7 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTableColumns.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/DocumentTableColumns.tsx @@ -101,7 +101,7 @@ function InstallDocsBadge({ status }: { status: DocStatus | undefined }) { } export function createDocumentTableColumns( - onOpenDrawer: (uprn: string | null, landlordPropertyId: string | null, dealname: string | null) => void, + onOpenDrawer: (dealId: string, uprn: string | null, landlordPropertyId: string | null, dealname: string | null) => void, docStatusMap: DocStatusMap = {}, onUpload?: (deal: ClassifiedDeal) => void, ): ColumnDef[] { @@ -138,14 +138,14 @@ export function createDocumentTableColumns( { id: "retroAssessmentStatus", accessorFn: (row) => { - const status = row.uprn ? docStatusMap[row.uprn] : undefined; + const status = docStatusMap[row.dealId]; if (status?.isSurveyComplete) return 2; if (status?.hasSurveyDocs) return 1; return 0; }, header: ({ column }) => , cell: ({ row }) => { - const status = row.original.uprn ? docStatusMap[row.original.uprn] : undefined; + const status = docStatusMap[row.original.dealId]; return ; }, enableHiding: false, @@ -155,7 +155,7 @@ export function createDocumentTableColumns( { id: "installDocs", accessorFn: (row) => { - const status = row.uprn ? docStatusMap[row.uprn] : undefined; + const status = docStatusMap[row.dealId]; const s = status?.installStatus ?? "none"; if (s === "all") return 3; if (s === "partial") return 2; @@ -164,7 +164,7 @@ export function createDocumentTableColumns( }, header: ({ column }) => , cell: ({ row }) => { - const status = row.original.uprn ? docStatusMap[row.original.uprn] : undefined; + const status = docStatusMap[row.original.dealId]; return ; }, enableHiding: false, @@ -177,8 +177,7 @@ export function createDocumentTableColumns( Docs ), cell: ({ row }) => { - const uprn = row.original.uprn ?? ""; - const status = uprn ? docStatusMap[uprn] : undefined; + const status = docStatusMap[row.original.dealId]; let icon: React.ReactNode; let className: string; @@ -201,6 +200,7 @@ export function createDocumentTableColumns(