function creerRapportReservationSalles(listeEvenements, dateDebut, dateFin) {
// Assurez-vous que les dates sont au format Date
dateDebut = new Date(dateDebut);
dateFin = new Date(dateFin);
const titreDoc = `Rapport hebdomadaire de réservation de salle : ${formatterDate(dateDebut)} à ${formatterDate(dateFin)}`;
const doc = DocumentApp.create(titreDoc);
const corps = doc.getBody();
corps.clear();
corps.appendParagraph(titreDoc).setHeading(DocumentApp.ParagraphHeading.HEADING1);
corps.appendParagraph(`Généré le : ${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'dd/MM/yyyy')}`);
listeEvenements.forEach((salle, index) => {
if (!salle.nomSalle) return; // Vérifie la présence du nom de la salle
corps.appendParagraph(salle.nomSalle).setHeading(DocumentApp.ParagraphHeading.HEADING2);
const tableau = [['Date & Heure', 'Détails de l’événement']];
salle.evenements.forEach(evenement => {
// Assurez-vous que les dates de l'événement sont au format Date
const debut = new Date(evenement.debut);
const fin = evenement.fin ? new Date(evenement.fin) : null;
const dateHeureFormatee = formatterDateEvenement(debut, fin);
const titre = evenement.titre || "Sans titre"; // Valeur par défaut si titre manquant
const description = evenement.description || "Aucune description"; // Valeur par défaut si description manquante
const [date, heure] = dateHeureFormatee.split(' (');
const detailsEvenement = `${titre}\nDescription : ${description}`;
tableau.push([`${date}\n${heure ? heure.replace(')', '') : ''}`, detailsEvenement]);
});
const tableauDoc = corps.appendTable(tableau);
// Mise en forme des en-têtes
const headerRow = tableauDoc.getRow(0);
headerRow.getCell(0).getChild(0).asParagraph().setBold(true);
headerRow.getCell(1).getChild(0).asParagraph().setBold(true);
// Formate les cellules et ajuste la largeur en ajoutant un espace invisible dans la première colonne
for (let i = 1; i < tableauDoc.getNumRows(); i++) {
const row = tableauDoc.getRow(i);
const cell1 = row.getCell(0);
const cell2 = row.getCell(1);
cell1.setPaddingTop(0).setPaddingBottom(0);
cell2.setPaddingTop(0).setPaddingBottom(0);
// Ajoute un espace dans la première cellule pour ajuster la largeur
if (cell1.getNumChildren() > 0) {
cell1.getChild(0).asText().appendText(" ");
}
// Mise en gras du contenu de chaque cellule pour les lignes d'événements
cell1.getChild(0).asParagraph().setBold(true);
cell2.getChild(0).asParagraph().setBold(true).setForegroundColor('#b00000');
}
if (index < listeEvenements.length - 1) {
corps.appendHorizontalRule();
}
});
}
// Fonctions de formatage
function formatterDate(date) {
return Utilities.formatDate(date, Session.getScriptTimeZone(), 'dd/MM/yyyy');
}
function formatterDateEvenement(debut, fin) {
const dateDebut = Utilities.formatDate(debut, Session.getScriptTimeZone(), 'dd/MM/yyyy');
const heureDebut = Utilities.formatDate(debut, Session.getScriptTimeZone(), 'HH:mm');
const heureFin = fin ? Utilities.formatDate(fin, Session.getScriptTimeZone(), 'HH:mm') : '';
return heureFin ? `${dateDebut} (${heureDebut} - ${heureFin})` : `${dateDebut} (${heureDebut})`;
}