<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Suivi des Paiements</title> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <link rel="icon" href="../../media/img/logoIcon.ico" type="image/x-icon" /> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <link rel="stylesheet" href="../../css/PROF/paiements.css"> </head> <body> <!-- Header --> <div class="header w3-bar w3-card-4 w3-dark-blue"> <!-- Logo pour retourner à l'accueil --> <div class="logo-container w3-bar-item"> <img src="../../media/img/logoWhite.png" alt="Logo Accueil" class="w3-image" style="width:150px; height:40px;"> </div> <!-- Bouton burger pour petit écran --> <a href="javascript:void(0)" class="w3-bar-item w3-button w3-hide-large w3-right w3-padding-16" onclick="toggleMenu()">☰</a> <!-- Catégories dans le header --> <div id="menu" class="categories w3-hide-small w3-hide-medium w3-bar-item"> <a href="./enseignant_permanent.html" class="w3-bar-item w3-button">Accueil</a> <a href="./mes-heures.html" class="w3-bar-item w3-button">Heures</a> <a href="./paiements.html" class="w3-bar-item w3-button">Paiements</a> <a href="./mes-informations.html" class="w3-bar-item w3-button">Mes informations et documents</a> </div> <!-- Section utilisateur avec déconnexion --> <div class="user-section w3-right w3-hide-small w3-hide-medium"> <div class="user-name"> Denis MONNERAT </div> <div class="logout-container w3-bar-item"> <a href="./notifications.html" title="Notifications"> <img src="../../media/img/notifs.png" alt="Logo notification" style="width:24px; height:24px;"> </a> <a href="./settings.html" title="Paramètres"> <img src="../../media/img/settings.png" alt="Logo paramètres" style="width:24px; height:24px;"> </a> <a href="../../index.html" title="Se déconnecter"> <img src="../../media/img/LogOutWhite.png" alt="Logo Déconnexion" style="width:24px; height:24px;"> </a> </div> </div> <!-- Menu mobile caché au départ --> <div id="mobileMenu" class="w3-bar-block w3-hide w3-hide-large w3-dark-blue"> <a href="./enseignant_permanent.html" class="w3-bar-item w3-button">Accueil</a> <a href="./mes-heures.html" class="w3-bar-item w3-button">Heures</a> <a href="./paiements.html" class="w3-bar-item w3-button">Paiements</a> <a href="./mes-informations.html" class="w3-bar-item w3-button">Mes informations et documents</a> <!-- Section utilisateur pour mobile --> <div class="w3-bar-item w3-border-top w3-margin-top"> <div class="user-name">Denis MONNERAT</div> <a href="./notifications.html" title="Notifications"> <img src="../../media/img/notifs.png" alt="Logo notification" style="width:24px; height:24px;"> </a> <a href="./settings.html" title="Paramètres"> <img src="../../media/img/settings.png" alt="Logo paramètres" style="width:24px; height:24px;"> </a> <a href="../../index.html" title="Se déconnecter"> <img src="../../media/img/LogOutWhite.png" alt="Logo Déconnexion" style="width:24px; height:24px;"> </a> </div> </div> </div> <div class="dashboard-container"> <!-- Historique des paiements --> <div class="section-header"> <h2>Historique des Paiements</h2> </div> <div class="card"> <div class="table-container"> <table> <thead> <tr> <th data-sort="periode">Période</th> <th data-sort="heuresPayees">Heures Payées</th> <th data-sort="montantBrut">Montant Brut (€)</th> <th data-sort="montantNet">Montant Net (€)</th> <th data-sort="datePaiement">Date de Paiement</th> <th data-sort="modePaiement">Mode de Paiement</th> <th data-sort="compteBancaire">Compte Bancaire</th> <th data-sort="statut">Statut</th> <th>Bulletin de Paie</th> </tr> </thead> <tbody> <tr> <td>Février 2024</td> <td>35h</td> <td>3500,00</td> <td>2722,00</td> <td>01/03/2024</td> <td>Virement Bancaire</td> <td>Compte XXXXXX1234</td> <td class="status-valide">Validé</td> <td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td> </tr> <tr> <td>Mars 2024</td> <td>35h</td> <td>3500,00</td> <td>2722,00</td> <td>01/04/2024</td> <td>Virement Bancaire</td> <td>Compte XXXXXX1234</td> <td class="status-valide">Validé</td> <td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td> </tr> <tr> <td>Avril 2024</td> <td>35h</td> <td>3500,00</td> <td>2722,00</td> <td>01/05/2024</td> <td>Virement Bancaire</td> <td>Compte XXXXXX1234</td> <td class="status-valide">Validé</td> <td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td> </tr> <tr> <td>Mai 2024</td> <td>35h</td> <td>3500,00</td> <td>2722,00</td> <td>01/06/2024</td> <td>Virement Bancaire</td> <td>Compte XXXXXX1234</td> <td class="status-valide">Validé</td> <td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td> </tr> <tr> <td>Juin 2024</td> <td>35h</td> <td>3500,00</td> <td>2722,00</td> <td>01/07/2024</td> <td>Virement Bancaire</td> <td>Compte XXXXXX1234</td> <td class="status-valide">Validé</td> <td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td> </tr> <tr> <td>Septembre 2024</td> <td>35h</td> <td>3500,00</td> <td>2722,00</td> <td>01/10/2024</td> <td>Virement Bancaire</td> <td>Compte XXXXXX1234</td> <td class="status-valide">Validé</td> <td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td> </tr> <tr> <td>Octobre 2024</td> <td>35h</td> <td>3500,00</td> <td>2722,00</td> <td>01/11/2024</td> <td>Virement Bancaire</td> <td>Compte XXXXXX1234</td> <td class="status-attente">En attente</td> <td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td> </tr> </tbody> </table> </div> <p><strong>Prochain paiement prévu :</strong> Novembre 2024 (35h restantes)</p> </div> <!-- Graphique des paiements (brut) --> <div class="section-header"> <h2>Évolution de vos Paiements</h2> </div> <div class="card"> <div class="chart-container"> <canvas id="paymentChart"></canvas> </div> </div> <!-- Formulaire pour signaler un problème --> <!-- Formulaire pour signaler un problème --> <div class="section-header"> <h2>Signaler un problème de paye</h2> </div> <div class="card contact-form"> <h3>Formulaire de signalement</h3> <form id="contactForm"> <label for="probleme">Sélectionnez un problème :</label> <select id="probleme" required> <option value="">-- Sélectionner un problème --</option> <option value="noPayment">Je n'ai pas reçu de paiement</option> <option value="wrongAmount">Le montant de mon salaire est inférieur à ce qui était prévu.</option> <option value="duplicatePayment">J'ai reçu un paiement en double</option> <option value="latePayment">Mon paiement est en retard</option> <option value="unjustifiedWithholding">Il y a une retenue sur mon paiement que je ne comprends pas</option> <option value="technicalIssue">J'ai des difficultés à accéder à mes bulletins de salaire en ligne</option> </select> <!-- Champs supplémentaires qui s'affichent selon le problème --> <div id="detailsSupplementaires" style="display: none;"> <!-- Champ pour sélectionner le mois --> <div id="moisEnQuestion" style="display:none;"> <label for="mois">Sélectionner le mois :</label> <select id="mois"> <option value="">-- Sélectionner le mois --</option> <option value="fevrier">Février 2024</option> <option value="mars">Mars 2024</option> <option value="avril">Avril 2024</option> <option value="mai">Mai 2024</option> <option value="juin">Juin 2024</option> <option value="septembre">Septembre 2024</option> <option value="octobre">Octobre 2024</option> </select> </div> <!-- Champ pour indiquer le montant reçu --> <div id="montantRecuSupplementaire" style="display:none;"> <label for="montantRecu">Montant reçu (€) :</label> <input type="number" id="montantRecu" placeholder="Montant reçu" /> </div> <!-- Champ pour indiquer le montant attendu --> <div id="montantAttendu" style="display:none;"> <label for="montantAttenduInput">Montant attendu (€) :</label> <input type="number" id="montantAttenduInput" placeholder="Montant attendu" /> </div> </div> <button type="submit">Envoyer</button> </form> </div> </div> <div class="footer"> <p>© 2024 IUT de Fontainebleau. Tous droits réservés | <a href="html/mentions_legales.html">Mentions légales</a> </p> </div> <!-- Popup de confirmation --> <div class="popup" id="popup"> <img src="https://img.icons8.com/ios-filled/50/155724/checkmark.png" alt="Coche"> <h4>Message envoyé</h4> <p>Votre message a été transmis à la direction. Un email de confirmation vous a été envoyé.</p> <button onclick="fermerPopup()">Fermer</button> </div> <!-- Script pour gérer le formulaire et le popup --> <script> document.getElementById('probleme').addEventListener('change', function() { var detailsSupplementaires = document.getElementById('detailsSupplementaires'); var montantRecuSupplementaire = document.getElementById('montantRecuSupplementaire'); var moisEnQuestion = document.getElementById('moisEnQuestion'); // Champ pour sélectionner le mois var montantAttendu = document.getElementById('montantAttendu'); // Champ pour indiquer le montant attendu // Masquer tous les champs au départ detailsSupplementaires.style.display = 'none'; montantRecuSupplementaire.style.display = 'none'; moisEnQuestion.style.display = 'none'; montantAttendu.style.display = 'none'; // Afficher les champs en fonction du problème sélectionné switch (this.value) { case 'noPayment': detailsSupplementaires.style.display = 'block'; moisEnQuestion.style.display = 'block'; // Afficher le champ pour sélectionner le mois break; case 'wrongAmount': detailsSupplementaires.style.display = 'block'; montantRecuSupplementaire.style.display = 'block'; // Afficher le montant moisEnQuestion.style.display = 'block'; // Afficher le champ pour sélectionner le mois break; case 'duplicatePayment': detailsSupplementaires.style.display = 'block'; moisEnQuestion.style.display = 'block'; // Afficher le champ pour sélectionner le mois montantAttendu.style.display = 'block'; // Afficher le champ pour le montant attendu break; case 'latePayment': detailsSupplementaires.style.display = 'block'; moisEnQuestion.style.display = 'block'; // Afficher le champ pour sélectionner le mois break; case 'unjustifiedWithholding': detailsSupplementaires.style.display = 'block'; break; case 'technicalIssue': detailsSupplementaires.style.display = 'block'; break; default: // Aucune action si aucune valeur valide n'est sélectionnée break; } }); document.getElementById('contactForm').addEventListener('submit', function(event) { event.preventDefault(); // Afficher le popup de confirmation document.getElementById('popup').style.display = 'block'; }); function fermerPopup() { document.getElementById('popup').style.display = 'none'; // Réinitialiser le formulaire après soumission document.getElementById('contactForm').reset(); document.getElementById('detailsSupplementaires').style.display = 'none'; } // Configuration du graphique Chart.js const ctx = document.getElementById('paymentChart').getContext('2d'); const paymentChart = new Chart(ctx, { type: 'line', data: { labels: ['Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Septembre', 'Octobre'], datasets: [{ label: 'Montant Brut (€)', data: [3500, 3500, 3500, 3500, 3500, 3500, 3500], backgroundColor: 'rgba(204, 153, 0, 0.60)', // Jaune très sombre, pas transparent borderColor: 'rgba(178, 128, 0, 1)', // Jaune plus foncé pour la bordure fill: true, tension: 0.3, }] }, options: { responsive: true, scales: { y: { beginAtZero: true } }, plugins: { legend: { display: true, position: 'top', } } } }); document.querySelectorAll('th[data-sort]').forEach(function (header) { header.addEventListener('click', function () { const table = header.closest('table'); const tbody = table.querySelector('tbody'); const rowsArray = Array.from(tbody.querySelectorAll('tr')); const index = Array.from(header.parentElement.children).indexOf(header); let order = header.dataset.order || 1; // Retirer les classes de tri des autres colonnes document.querySelectorAll('th[data-sort]').forEach(function (th) { th.classList.remove('ascending', 'descending'); }); // Appliquer la classe de tri if (order == 1) { header.classList.add('ascending'); header.dataset.order = -1; // Inverser l'ordre pour la prochaine fois } else { header.classList.add('descending'); header.dataset.order = 1; // Réinitialiser pour la prochaine fois } // Trier les lignes du tableau rowsArray.sort(function (rowA, rowB) { let cellA = rowA.children[index].innerText.trim(); let cellB = rowB.children[index].innerText.trim(); // Gérer les périodes (mois) if (header.dataset.sort === 'periode') { cellA = moisToNumero(cellA); cellB = moisToNumero(cellB); } // Gérer les montants numériques avec des virgules else if (!isNaN(cellA.replace(',', '.')) && !isNaN(cellB.replace(',', '.'))) { return (parseFloat(cellA.replace(',', '.')) - parseFloat(cellB.replace(',', '.'))) * order; } // Gérer les dates else if (isDate(cellA) && isDate(cellB)) { return (new Date(cellA) - new Date(cellB)) * order; } // Gérer les textes (par défaut) else { return cellA.localeCompare(cellB) * order; } return (cellA - cellB) * order; }); // Réorganiser les lignes dans le tableau rowsArray.forEach(function (row) { tbody.appendChild(row); }); }); }); // Fonction pour convertir les mois en numéros pour faciliter le tri function moisToNumero(mois) { const moisIndex = { "Janvier": 1, "Février": 2, "Mars": 3, "Avril": 4, "Mai": 5, "Juin": 6, "Juillet": 7, "Août": 8, "Septembre": 9, "Octobre": 10, "Novembre": 11, "Décembre": 12 }; // Extraire le mois et l'année du texte (ex: "Février 2024") const [moisNom, annee] = mois.split(' '); return new Date(annee, moisIndex[moisNom] - 1); // Créer un objet Date } // Fonction pour vérifier si un texte est une date valide function isDate(dateString) { return !isNaN(Date.parse(dateString)); } function toggleMenu() { var x = document.getElementById("mobileMenu"); if (x.className.indexOf("w3-show") == -1) { x.className += " w3-show"; } else { x.className = x.className.replace(" w3-show", ""); } } </script> </body> </html>