56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import type { LoaderFunctionArgs } from "@remix-run/node";
|
|
import { json } from "@remix-run/node";
|
|
import { prisma } from "~/utils/db.server";
|
|
|
|
export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
const url = new URL(request.url);
|
|
const areaId = url.searchParams.get("areaId");
|
|
const dredgerLocationId = url.searchParams.get("dredgerLocationId");
|
|
const reclamationLocationId = url.searchParams.get("reclamationLocationId");
|
|
|
|
if (!areaId || !dredgerLocationId || !reclamationLocationId) {
|
|
return json({ data: null });
|
|
}
|
|
|
|
try {
|
|
// Find the most recent report for this location combination
|
|
const lastReport = await prisma.report.findFirst({
|
|
where: {
|
|
areaId: parseInt(areaId),
|
|
dredgerLocationId: parseInt(dredgerLocationId),
|
|
reclamationLocationId: parseInt(reclamationLocationId),
|
|
},
|
|
orderBy: {
|
|
createdDate: 'desc',
|
|
},
|
|
select: {
|
|
dredgerLineLength: true,
|
|
shoreConnection: true,
|
|
reclamationHeight: true,
|
|
pipelineLength: true,
|
|
},
|
|
});
|
|
|
|
if (!lastReport) {
|
|
return json({ data: null });
|
|
}
|
|
|
|
const reclamationHeight = lastReport.reclamationHeight as any;
|
|
const pipelineLength = lastReport.pipelineLength as any;
|
|
|
|
// Calculate carry-forward values
|
|
const carryForwardData = {
|
|
dredgerLineLength: lastReport.dredgerLineLength,
|
|
shoreConnection: lastReport.shoreConnection,
|
|
reclamationHeightBase: (reclamationHeight.base || 0) + (reclamationHeight.extra || 0),
|
|
pipelineMain: (pipelineLength.main || 0) + (pipelineLength.ext1 || 0),
|
|
pipelineReserve: (pipelineLength.reserve || 0) + (pipelineLength.ext2 || 0),
|
|
};
|
|
|
|
return json({ data: carryForwardData });
|
|
} catch (error) {
|
|
console.error("Error fetching last report data:", error);
|
|
return json({ data: null });
|
|
}
|
|
};
|