|
|
@@ -59,7 +59,8 @@ export async function GET(
|
|
|
importId,
|
|
|
fileName: file?.filename || 'Unknown',
|
|
|
uploadDate: importRecord.createdAt,
|
|
|
- summary
|
|
|
+ summary,
|
|
|
+ summaryExists: cintasSummaries.length > 0
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
@@ -69,4 +70,90 @@ export async function GET(
|
|
|
{ status: 500 }
|
|
|
);
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+export async function POST(
|
|
|
+ request: NextRequest,
|
|
|
+ { params }: { params: Promise<{ id: string }> }
|
|
|
+) {
|
|
|
+ try {
|
|
|
+ const { id } = await params;
|
|
|
+ const importId = parseInt(id);
|
|
|
+
|
|
|
+ if (isNaN(importId)) {
|
|
|
+ return NextResponse.json(
|
|
|
+ { error: 'Invalid import ID' },
|
|
|
+ { status: 400 }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // Check if import exists
|
|
|
+ const importRecord = await prisma.import.findUnique({
|
|
|
+ where: { id: importId }
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!importRecord) {
|
|
|
+ return NextResponse.json(
|
|
|
+ { error: 'Import not found' },
|
|
|
+ { status: 404 }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // Check if summary already exists
|
|
|
+ const existingSummaries = await prisma.cintasSummary.count({
|
|
|
+ where: { importId }
|
|
|
+ });
|
|
|
+
|
|
|
+ if (existingSummaries > 0) {
|
|
|
+ // Return existing summary
|
|
|
+ const cintasSummaries = await prisma.cintasSummary.findMany({
|
|
|
+ where: { importId },
|
|
|
+ orderBy: { week: 'asc' }
|
|
|
+ });
|
|
|
+
|
|
|
+ return NextResponse.json({
|
|
|
+ importId,
|
|
|
+ summaryGenerated: false,
|
|
|
+ message: 'Summary already exists',
|
|
|
+ summary: cintasSummaries.map(summary => ({
|
|
|
+ week: summary.week,
|
|
|
+ trrTotal: summary.trrTotal,
|
|
|
+ fourWkAverages: summary.fourWkAverages,
|
|
|
+ trrPlus4Wk: summary.trrPlus4Wk,
|
|
|
+ powerAdds: summary.powerAdds
|
|
|
+ }))
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // Execute the stored procedure to generate summary
|
|
|
+ await prisma.$executeRawUnsafe(
|
|
|
+ `CALL cintas_calculate_summary(${importId})`
|
|
|
+ );
|
|
|
+
|
|
|
+ // Fetch the newly generated summary
|
|
|
+ const cintasSummaries = await prisma.cintasSummary.findMany({
|
|
|
+ where: { importId },
|
|
|
+ orderBy: { week: 'asc' }
|
|
|
+ });
|
|
|
+
|
|
|
+ return NextResponse.json({
|
|
|
+ importId,
|
|
|
+ summaryGenerated: true,
|
|
|
+ message: 'Summary generated successfully',
|
|
|
+ summary: cintasSummaries.map(summary => ({
|
|
|
+ week: summary.week,
|
|
|
+ trrTotal: summary.trrTotal,
|
|
|
+ fourWkAverages: summary.fourWkAverages,
|
|
|
+ trrPlus4Wk: summary.trrPlus4Wk,
|
|
|
+ powerAdds: summary.powerAdds
|
|
|
+ }))
|
|
|
+ });
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error generating summary:', error);
|
|
|
+ return NextResponse.json(
|
|
|
+ { error: 'Failed to generate summary', details: error instanceof Error ? error.message : 'Unknown error' },
|
|
|
+ { status: 500 }
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|