// assets/js/family-calendar.js
const weeks = [
{
month: "September",
code: "W36",
dates: "01/09 – 07/09",
caroleOffDays: 0,
isSchoolHoliday: false,
isBankHoliday: false,
alex: { cp: 0, rtt: 0, ja: 0 },
laia: { cp: 0, rtt: 0, ja: 0 },
},
{
month: "September",
code: "W38",
dates: "15/09 – 21/09",
caroleOffDays: 2,
isSchoolHoliday: false,
isBankHoliday: false,
alex: { cp: 0, rtt: 0, ja: 0 },
laia: { cp: 0, rtt: 0, ja: 0 },
},
{
month: "October",
code: "W40",
dates: "29/09 – 05/10",
caroleOffDays: 0,
isSchoolHoliday: false,
isBankHoliday: false,
alex: { cp: 0, rtt: 0, ja: 0 },
laia: { cp: 0, rtt: 0, ja: 0 },
},
{
month: "August",
code: "W32",
dates: "03/08 – 09/08",
caroleOffDays: 5,
isSchoolHoliday: true,
isBankHoliday: false,
alex: { cp: 0, rtt: 0, ja: 0 },
laia: { cp: 0, rtt: 0, ja: 0 },
},
// TODO: compléter le reste des semaines W36 → W35
];
function renderTable() {
const planningBody = document.getElementById("planningBody");
if (!planningBody) return;
planningBody.innerHTML = "";
const showOnlyCaroleOff =
document.getElementById("showOnlyCaroleOff")?.checked;
const showOnlySchoolHoliday = document.getElementById(
"showOnlySchoolHoliday"
)?.checked;
weeks.forEach((week, index) => {
if (showOnlyCaroleOff && week.caroleOffDays === 0) return;
if (showOnlySchoolHoliday && !week.isSchoolHoliday) return;
const tr = document.createElement("tr");
if (week.caroleOffDays > 0) tr.classList.add("fc-row--carole-off");
if (week.isSchoolHoliday) tr.classList.add("fc-row--school-holiday");
if (week.isBankHoliday) tr.classList.add("fc-row--bank-holiday");
tr.innerHTML = `
${week.month} |
${week.code} |
${week.dates} |
${week.caroleOffDays || ""} |
${week.isSchoolHoliday ? "Oui" : ""} |
${week.isBankHoliday ? "Oui" : ""} |
|
|
|
|
|
|
`;
planningBody.appendChild(tr);
});
attachInputListeners();
updateSummary();
}
function attachInputListeners() {
const planningBody = document.getElementById("planningBody");
if (!planningBody) return;
planningBody.querySelectorAll("input[type='number']").forEach((input) => {
input.addEventListener("change", (e) => {
const w = parseInt(e.target.dataset.week, 10);
const person = e.target.dataset.person;
const type = e.target.dataset.type;
const value = parseFloat(e.target.value || "0");
weeks[w][person][type] = value;
updateSummary();
});
});
}
function updateSummary() {
const summaryDiv = document.getElementById("summaryText");
if (!summaryDiv) return;
const alexCpInit = parseFloat(
document.getElementById("alexCpInit")?.value || "0"
);
const alexRttInit = parseFloat(
document.getElementById("alexRttInit")?.value || "0"
);
const alexJaInit = parseFloat(
document.getElementById("alexJaInit")?.value || "0"
);
const laiaCpInit = parseFloat(
document.getElementById("laiaCpInit")?.value || "0"
);
const laiaRttInit = parseFloat(
document.getElementById("laiaRttInit")?.value || "0"
);
const laiaJaInit = parseFloat(
document.getElementById("laiaJaInit")?.value || "0"
);
let alexCpUsed = 0,
alexRttUsed = 0,
alexJaUsed = 0;
let laiaCpUsed = 0,
laiaRttUsed = 0,
laiaJaUsed = 0;
weeks.forEach((week) => {
alexCpUsed += week.alex.cp;
alexRttUsed += week.alex.rtt;
alexJaUsed += week.alex.ja;
laiaCpUsed += week.laia.cp;
laiaRttUsed += week.laia.rtt;
laiaJaUsed += week.laia.ja;
});
const alexCpLeft = alexCpInit - alexCpUsed;
const alexRttLeft = alexRttInit - alexRttUsed;
const alexJaLeft = alexJaInit - alexJaUsed;
const laiaCpLeft = laiaCpInit - laiaCpUsed;
const laiaRttLeft = laiaRttInit - laiaRttUsed;
const laiaJaLeft = laiaJaInit - laiaJaUsed;
summaryDiv.innerHTML = `
Alex
CP utilisés : ${alexCpUsed.toFixed(2)} / ${alexCpInit.toFixed(
2
)} (reste ${alexCpLeft.toFixed(2)})
RTT utilisés : ${alexRttUsed.toFixed(2)} / ${alexRttInit.toFixed(
2
)} (reste ${alexRttLeft.toFixed(2)})
JA utilisés : ${alexJaUsed.toFixed(2)} / ${alexJaInit.toFixed(
2
)} (reste ${alexJaLeft.toFixed(2)})
Laia
CP utilisés : ${laiaCpUsed.toFixed(2)} / ${laiaCpInit.toFixed(
2
)} (reste ${laiaCpLeft.toFixed(2)})
RTT utilisés : ${laiaRttUsed.toFixed(2)} / ${laiaRttInit.toFixed(
2
)} (reste ${laiaRttLeft.toFixed(2)})
JA utilisés : ${laiaJaUsed.toFixed(2)} / ${laiaJaInit.toFixed(2)})
`;
}
function initFamilyCalendar() {
if (!document.getElementById("planningBody")) return;
[
"alexCpInit",
"alexRttInit",
"alexJaInit",
"laiaCpInit",
"laiaRttInit",
"laiaJaInit",
].forEach((id) => {
const el = document.getElementById(id);
if (el) el.addEventListener("change", updateSummary);
});
["showOnlyCaroleOff", "showOnlySchoolHoliday"].forEach((id) => {
const el = document.getElementById(id);
if (el) el.addEventListener("change", renderTable);
});
renderTable();
}
document.addEventListener("DOMContentLoaded", initFamilyCalendar);