121 lines
3.5 KiB
TypeScript
121 lines
3.5 KiB
TypeScript
import { prisma } from "~/utils/db.server";
|
|
|
|
export async function manageSheet(reportId: number, shift: string, areaId: number, dredgerLocationId: number, reclamationLocationId: number, createdDate: Date) {
|
|
// Format date as YYYY-MM-DD
|
|
const dateString = createdDate.toISOString().split('T')[0];
|
|
|
|
try {
|
|
// Check if a sheet already exists for this combination
|
|
const existingSheet = await prisma.sheet.findUnique({
|
|
where: {
|
|
areaId_dredgerLocationId_reclamationLocationId_date: {
|
|
areaId,
|
|
dredgerLocationId,
|
|
reclamationLocationId,
|
|
date: dateString
|
|
}
|
|
}
|
|
});
|
|
|
|
if (existingSheet) {
|
|
// Sheet exists, update it with the new shift
|
|
if (shift === 'day' && !existingSheet.dayShiftId) {
|
|
await prisma.sheet.update({
|
|
where: { id: existingSheet.id },
|
|
data: {
|
|
dayShiftId: reportId,
|
|
status: existingSheet.nightShiftId ? 'completed' : 'pending'
|
|
}
|
|
});
|
|
} else if (shift === 'night' && !existingSheet.nightShiftId) {
|
|
await prisma.sheet.update({
|
|
where: { id: existingSheet.id },
|
|
data: {
|
|
nightShiftId: reportId,
|
|
status: existingSheet.dayShiftId ? 'completed' : 'pending'
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
// No sheet exists, create a new one
|
|
const sheetData: any = {
|
|
areaId,
|
|
dredgerLocationId,
|
|
reclamationLocationId,
|
|
date: dateString,
|
|
status: 'pending'
|
|
};
|
|
|
|
if (shift === 'day') {
|
|
sheetData.dayShiftId = reportId;
|
|
} else if (shift === 'night') {
|
|
sheetData.nightShiftId = reportId;
|
|
}
|
|
|
|
await prisma.sheet.create({
|
|
data: sheetData
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Error managing sheet:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
export async function removeFromSheet(reportId: number, shift: string, areaId: number, dredgerLocationId: number, reclamationLocationId: number, createdDate: Date) {
|
|
// Format date as YYYY-MM-DD
|
|
const dateString = createdDate.toISOString().split('T')[0];
|
|
|
|
try {
|
|
// Find the sheet for this combination
|
|
const existingSheet = await prisma.sheet.findUnique({
|
|
where: {
|
|
areaId_dredgerLocationId_reclamationLocationId_date: {
|
|
areaId,
|
|
dredgerLocationId,
|
|
reclamationLocationId,
|
|
date: dateString
|
|
}
|
|
}
|
|
});
|
|
|
|
if (existingSheet) {
|
|
if (shift === 'day' && existingSheet.dayShiftId === reportId) {
|
|
if (existingSheet.nightShiftId) {
|
|
// Keep sheet but remove day shift
|
|
await prisma.sheet.update({
|
|
where: { id: existingSheet.id },
|
|
data: {
|
|
dayShiftId: null,
|
|
status: 'pending'
|
|
}
|
|
});
|
|
} else {
|
|
// Delete sheet if no other shift
|
|
await prisma.sheet.delete({
|
|
where: { id: existingSheet.id }
|
|
});
|
|
}
|
|
} else if (shift === 'night' && existingSheet.nightShiftId === reportId) {
|
|
if (existingSheet.dayShiftId) {
|
|
// Keep sheet but remove night shift
|
|
await prisma.sheet.update({
|
|
where: { id: existingSheet.id },
|
|
data: {
|
|
nightShiftId: null,
|
|
status: 'pending'
|
|
}
|
|
});
|
|
} else {
|
|
// Delete sheet if no other shift
|
|
await prisma.sheet.delete({
|
|
where: { id: existingSheet.id }
|
|
});
|
|
}
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('Error removing from sheet:', error);
|
|
throw error;
|
|
}
|
|
} |