Description du script

Ce script est destiné à la page "detail.pl" de Koha. Il réalise deux actions principales :

Explication détaillée de l’algorithme

  1. Déclenchement du script :
  2. Traitement du tableau de prêts :
  3. Traitement du tableau de collection :
  4. Affichage et logs :

Inclusion du code

//Calcul durée prêt page detail  
  //Code collection lien page detail  
   if (window.location.pathname.includes("detail.pl")) { 
  setTimeout(() => {
    console.log("Début du traitement");

    // Sélection du tableau et des colonnes
    const table = document.querySelector("#holdings_table");
    if (!table) {
      console.log("Tableau #holdings_table introuvable");
      return;
    }
    console.log("Tableau trouvé");

    // Récupère l'index de la colonne "Statut" en fonction de l'en-tête
    const headers = Array.from(table.querySelectorAll("thead th"));
    const statusColumnIndex = headers.findIndex((header) => header.textContent.trim() === "Statut");

    if (statusColumnIndex === -1) {
      console.log("Colonne 'Statut' introuvable");
      return;
    }
    console.log("Colonne 'Statut' trouvée à l'index " + statusColumnIndex);

    // Parcourt les lignes du tableau
    const rows = table.querySelectorAll("tbody tr");
    const today = new Date();
    console.log(`Date d'aujourd'hui : ${today.toISOString()}`);

    rows.forEach((row, rowIndex) => {
      console.log(`Traitement de la ligne ${rowIndex + 1}`);

      const statusCell = row.children[statusColumnIndex];
      if (!statusCell) {
        console.log(`Cellule de statut introuvable dans la ligne ${rowIndex + 1}`);
        return;
      }

      const textContent = statusCell.textContent.trim();
      console.log(`Contenu de la cellule de statut : '${textContent}'`);

      // Recherche d'une date au format DD/MM/YYYY
      const dateMatch = textContent.match(/(\d{2})\/(\d{2})\/(\d{4})/); // Cherche une date au format DD/MM/YYYY

      if (dateMatch) {
        const day = dateMatch[1];
        const month = dateMatch[2];
        const year = dateMatch[3];

        // Crée un objet Date avec la date trouvée
        const loanDate = new Date(`${year}-${month}-${day}`);
        console.log(`Date trouvée et convertie : ${loanDate.toISOString()}`);

        const diffTime = loanDate - today; // Différence en millisecondes
        const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); // Convertit en jours

        // Ajout du résultat dans la cellule
        const resultSpan = document.createElement("span");
        resultSpan.style.display = "block"; // Pour que l'information supplémentaire soit bien visible

        if (diffDays >= 0) {
          console.log(`${diffDays} jour(s) restant(s)`);
          resultSpan.textContent = `${diffDays} jour(s) restant(s)`;
          resultSpan.style.color = "green";
        } else {
          console.log(`${Math.abs(diffDays)} jour(s) de retard`);
          resultSpan.textContent = `${Math.abs(diffDays)} jour(s) de retard`;
          resultSpan.style.color = "red";
        }

        statusCell.appendChild(resultSpan); // Ajoute l'information dans la cellule
      } else {
        console.log("Aucune date trouvée dans la cellule de statut");
      }
    
       // Rechercher le tableau des éléments
    const catalogTable = document.querySelector("table");
    if (!catalogTable) return; // Arrêter si aucun tableau n'est trouvé

    // Trouver l'en-tête "Collection"
    const tableHeaders = Array.from(catalogTable.querySelectorAll("thead th"));
    const collectionColumnIndex = tableHeaders.findIndex(
        (header) => header.textContent.trim() === "Collection"
    );

    if (collectionColumnIndex === -1) return; // Arrêter si la colonne "Collection" n'existe pas

    // Parcourir chaque ligne du tableau
    const tableRows = catalogTable.querySelectorAll("tbody tr");
    tableRows.forEach((row) => {
        const rowCells = row.querySelectorAll("td");
        const collectionCell = rowCells[collectionColumnIndex];

        if (collectionCell) {
            const collectionIdentifier = collectionCell.textContent.trim();
            if (collectionIdentifier) {
                // Créer le lien vers la recherche de la collection
                const collectionLink = document.createElement("a");
                collectionLink.href = `https://koha.dracenie.com/cgi-bin/koha/catalogue/search.pl?q=ccode:%22${encodeURIComponent(
                    collectionIdentifier
                )}%22`;
                collectionLink.textContent = collectionIdentifier;
                collectionLink.target = "_blank"; // Ouvre le lien dans un nouvel onglet

                // Remplacer le contenu de la cellule par le lien
                collectionCell.textContent = ""; // Vider la cellule
                collectionCell.appendChild(collectionLink);
            }
        }
    }); 
    
    
    });

    console.log("Traitement terminé");
  }, 1000); // Délai de 2 secondes
}

Éléments à modifier

Points clés pour les mises à jour de Koha