diff --git a/routes/(apps)/mobility/(_islands)/EditMobility.tsx b/routes/(apps)/mobility/(_islands)/EditMobility.tsx index 7438518..fe3f9ef 100644 --- a/routes/(apps)/mobility/(_islands)/EditMobility.tsx +++ b/routes/(apps)/mobility/(_islands)/EditMobility.tsx @@ -13,7 +13,7 @@ interface Promotion { } interface Mobility { - id: number; + id: number | null; studentId: string; startDate: string | null; endDate: string | null; @@ -63,7 +63,20 @@ export default function EditMobility() { const updatedMobilities = prevData.mobilities?.map((mobility) => { if (mobility.studentId === studentId) { - return { ...mobility, [field]: value }; + const updatedMobility = { ...mobility, [field]: value }; + + if (field === "startDate" || field === "endDate") { + const startDate = new Date(updatedMobility.startDate || ""); + const endDate = new Date(updatedMobility.endDate || ""); + if (startDate && endDate && startDate <= endDate) { + const weeks = Math.ceil((endDate.getTime() - startDate.getTime()) / (7 * 24 * 60 * 60 * 1000)); + updatedMobility.weeksCount = weeks; + } else { + updatedMobility.weeksCount = null; + } + } + + return updatedMobility; } return mobility; }) || []; @@ -86,7 +99,7 @@ export default function EditMobility() { if (response.ok) { alert("Data saved successfully!"); - window.location.reload(); // Refresh the page to load updated data + window.location.reload(); } else { throw new Error(`Failed to save data: ${response.statusText}`); } @@ -131,6 +144,7 @@ export default function EditMobility() { ?.filter((student) => student.promotionId === promo.id) .map((student) => { const mobility = data.mobilities?.find((mob) => mob.studentId === student.id) || { + id: null, studentId: student.id, startDate: null, endDate: null, @@ -159,15 +173,7 @@ export default function EditMobility() { onChange={(e) => handleChange(student.id, "endDate", e.target.value)} /> - - - handleChange(student.id, "weeksCount", Number(e.target.value) || null) - } - /> - + {mobility.weeksCount ?? "N/A"} {error}

} {data?.promotions.map((promo) => (
-

Promotion: {promo.id}

+

Promotion: {promo.name}

@@ -57,8 +57,8 @@ export default function ConsultStudents() { {data.students .filter((student) => student.promotionId === promo.id) .map((student) => ( - - + + diff --git a/routes/(apps)/students/(_islands)/UploadStudents.tsx b/routes/(apps)/students/(_islands)/UploadStudents.tsx index 10ed4e2..e84e951 100644 --- a/routes/(apps)/students/(_islands)/UploadStudents.tsx +++ b/routes/(apps)/students/(_islands)/UploadStudents.tsx @@ -33,10 +33,12 @@ export default function UploadStudents() { for (const sheetName of workbook.SheetNames) { const sheet = workbook.Sheets[sheetName]; const data = XLSX.utils.sheet_to_json(sheet, { - header: ["Nom", "Prénom", "Mail"], + header: ["Identifiant", "Nom", "Prénom", "Mail"], range: 1, // Ignorer les en-têtes }); + console.log(`Data from sheet ${sheetName}:`, data); + const response = await fetch("/students/api/insert_students", { method: "POST", headers: { "Content-Type": "application/json" }, diff --git a/routes/(apps)/students/api/insert_students.ts b/routes/(apps)/students/api/insert_students.ts index 98b11cb..c6c70fc 100644 --- a/routes/(apps)/students/api/insert_students.ts +++ b/routes/(apps)/students/api/insert_students.ts @@ -1,4 +1,5 @@ import { Handlers } from "$fresh/server.ts"; +import { Database } from "@db/sqlite"; import connect from "$root/databases/connect.ts"; export const handler: Handlers = { @@ -7,7 +8,7 @@ export const handler: Handlers = { using connection = connect("students"); const promotions = connection.database.prepare( - "select id from promotions", + "select id, name from promotions", ).all(); const students = connection.database @@ -30,7 +31,7 @@ export const handler: Handlers = { }, async POST(request) { - console.log("API /mobility/api/insert_students called"); + console.log("API /students/api/insert_students called"); try { const body = await request.json(); @@ -48,7 +49,7 @@ export const handler: Handlers = { "INSERT OR IGNORE INTO promotions (name) VALUES (?)", ).run(promoName); - const promoIdRow: {id: string} = connection.database + const promoIdRow: { id: number } = connection.database .prepare("SELECT id FROM promotions WHERE name = ?") .get(promoName)!; const promoId = promoIdRow.id; @@ -56,12 +57,20 @@ export const handler: Handlers = { console.log(`Promotion ID for "${promoName}":`, promoId); const insertQuery = connection.database.prepare( - "INSERT INTO students (firstName, lastName, mail, promotionId) VALUES (?, ?, ?, ?)", + `INSERT INTO students + (userId, firstName, lastName, mail, promotionId) + VALUES (?, ?, ?, ?, ?)`, ); for (const student of data) { console.log("Inserting student:", student); - insertQuery.run(student.Nom, student["Prénom"], student.Mail, promoId); + insertQuery.run( + student.Identifiant, + student.Nom, + student["Prénom"], + student.Mail, + promoId, + ); } console.log("All data inserted successfully");
{student.id}
{student.userId} {student.firstName} {student.lastName} {student.mail}