Ajouts de la maquette web sur le nouveau git (suite au bug de l'ancien répertoire git

This commit is contained in:
2024-10-16 18:19:14 +02:00
parent c3d21877df
commit cad70b9d8e
57 changed files with 12657 additions and 0 deletions

View File

@@ -0,0 +1,474 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Suivi des Heures</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<link rel="stylesheet" href="../../css/VACATAIRE/mes-heures.css">
</head>
<body>
<div class="header">
<!-- Logo pour retourner à l'accueil -->
<div class="logo-container">
<img src="../../media/img/logoWhite.png" alt="Logo Accueil">
</div>
<!-- Catégories dans le header -->
<div class="categories">
<a href="./vacataire.html">Accueil</a>
<a href="./mes-heures.html">Heures</a>
<a href="./paiements.html">Paiements</a>
<a href="./mes-informations.html">Mes informations et documents</a>
</div>
<!-- Section utilisateur avec déconnexion -->
<div class="user-section">
<div class="user-name">
Maxime MENAULT
</div>
<div class="logout-container">
<a href="../../index.html" title="Se déconnecter">
<img src="../../media/img/LogOutWhite.png" alt="Logo Déconnexion">
</a>
</div>
</div>
</div>
<div class="dashboard-container">
<div class="section-header">
<h2>Offres de vacation</h2>
</div>
<div class="proposition-container">
<table class="proposition-table" id="proposalTable">
<thead>
<tr>
<th>Période</th>
<th>Formation</th>
<th>Nom du Cours</th>
<th>Semestre</th>
<th>Type d'intervention</th>
<th>Volume Prévisionnel</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td>Décembre 2024</td>
<td>BUT1</td>
<td>Développement Web</td>
<td>1</td>
<td>CM, TD</td>
<td>8h</td>
<td>
<button class="accept-button" onclick="acceptProposal(this)">Postuler</button>
<button class="refuse-button" onclick="confirmRefusal(this)">Refuser</button>
</td>
</tr>
<tr>
<td>Janvier 2025</td>
<td>BUT2</td>
<td>SCR</td>
<td>3</td>
<td>TD, TP</td>
<td>6h</td>
<td>
<button class="accept-button" onclick="acceptProposal(this)">Postuler</button>
<button class="refuse-button" onclick="confirmRefusal(this)">Refuser</button>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Popup pour pièces justificatives -->
<div id="justificatifForm" class="justificatif-form popup">
<h3>Téléchargez vos pièces justificatives</h3>
<p>Veuillez télécharger le document suivant :</p>
<ul>
<li>Contrat de travail actuel</li>
</ul>
<input type="file" id="justificatif" name="justificatif" required>
<button id="submitJustificatif" onclick="submitJustificatif()">Soumettre</button>
<button onclick="closeJustificatifPopup()">Annuler</button>
</div>
<div class="section-header">
<h2>Prochaines heures</h2>
</div>
<div class="validated-hours-container card">
<table class="validated-hours-table" id="validatedTable">
<thead>
<tr>
<th>Période</th>
<th>Formation</th>
<th>Nom du Cours</th>
<th>Semestre</th>
<th>Type d'intervention</th>
<th>Volume Prévisionnel</th>
<th>Statut</th> <!-- Nouvelle colonne pour le statut -->
</tr>
</thead>
<tbody id="validatedTableBody">
<tr>
<td>Décembre 2024</td>
<td>BUT1</td>
<td>Développement Web</td>
<td>1</td>
<td>CM, TD</td>
<td>8h</td>
<td class="status-valide">Validé</td> <!-- Statut -->
</tr>
<tr>
<td>Janvier 2025</td>
<td>BUT2</td>
<td>SCR</td>
<td>3</td>
<td>TD, TP</td>
<td>6h</td>
<td class="status-valide">Validé</td> <!-- Statut -->
</tr>
<tr>
<td>Février 2025</td>
<td>BUT3</td>
<td>Base de données</td>
<td>5</td>
<td>CM</td>
<td>10h</td>
<td class="status-valide">Validé</td> <!-- Statut -->
</tr>
<tr>
<td>Mars 2025</td>
<td>BUT3</td>
<td>IA et Machine Learning</td>
<td>6</td>
<td>TD, TP</td>
<td>12h</td>
<td class="status-attente">En attente de traitement</td> <!-- Statut en attente -->
</tr>
<tr>
<td>Avril 2025</td>
<td>BUT2</td>
<td>Réseaux</td>
<td>4</td>
<td>CM, TD</td>
<td>4h</td>
<td class="status-attente">En attente de traitement</td> <!-- Statut en attente -->
</tr>
</tbody>
</table>
</div>
<div class="section-header">
<h2>Historique des Heures Travaillées</h2>
</div>
<div class="card">
<div class="table-container">
<table id="hoursTable">
<thead>
<tr>
<th onclick="sortTable(0)">Date &#x25B2;</th> <!-- Triable -->
<th>Matière</th>
<th>Type d'Intervention</th>
<th onclick="sortTable(3)">Volume Horaire &#x25B2;</th> <!-- Triable -->
<th onclick="sortTable(4)">Heures Travaillées &#x25B2;</th> <!-- Triable -->
<th>Actions</th>
</tr>
</thead>
<tbody id="hoursTableBody">
<!-- Rows will be generated dynamically with JavaScript -->
</tbody>
</table>
</div>
<!-- Pagination Buttons -->
<div id="pagination">
<button onclick="prevPage()">Précédent</button>
<span id="pageNumber"></span>
<button onclick="nextPage()">Suivant</button>
</div>
</div>
<div class="section-header">
<h2>Graphique des Heures Travaillées</h2>
</div>
<div class="chart-container">
<canvas id="hoursChart"></canvas>
</div>
<div class="section-header">
<h2>Signalement de problèmes d'heures</h2>
</div>
<div class="contact-form">
<form id="contactForm">
<label for="probleme">Type de problème :</label>
<select id="probleme" name="probleme" required>
<option value="" disabled selected>Choisir un problème</option>
<option value="non_paye">Il manque des heures dans mon historique</option>
<option value="montant_incorrect">Il y a des heures en trop</option>
<option value="autre">Autre</option>
</select>
<label for="commentaire">Commentaires :</label>
<input type="text" id="commentaire" name="commentaire" placeholder="Décrivez votre problème" required>
<button type="submit">Soumettre</button>
</form>
</div>
</div>
<!-- Popup pour les détails du cours -->
<div id="infoPopup" class="popup">
<h4>Détails du la journée</h4>
<p><strong>Promotion :</strong> <span id="promotion"></span></p>
<p><strong>Groupe(s) :</strong> <span id="groupe"></span></p>
<p><strong>Salle :</strong> <span id="salle"></span></p>
<button onclick="closeInfoPopup()">Fermer</button>
</div>
<!-- Popup pour succès de l'envoi du formulaire -->
<div id="popup" class="popup">
<img src="https://img.icons8.com/ios-filled/50/155724/checkmark.png" alt="Success Icon">
<h4>Signalement Envoyé !</h4>
<p>Merci pour votre signalement. Nous allons traiter votre demande dans les plus brefs délais.</p>
<button onclick="closePopup()">Fermer</button>
</div>
<!-- Popup de confirmation de refus -->
<div id="confirmationPopup" class="confirmation-popup">
<div class="confirmation-content">
<h4>Confirmer le Refus</h4>
<p>Êtes-vous sûr de vouloir refuser cette proposition d'heure ?</p>
<button id="confirmRefusalButton" onclick="confirmRefusalAction()">Confirmer</button>
<button onclick="closeConfirmationPopup()">Annuler</button>
</div>
</div>
<div id="infoPopup" class="popup">
<h4>Détails de l'intervention</h4>
<p><strong>Promotion :</strong> <span id="popupPromotion"></span></p>
<p><strong>Type de Cours :</strong> <span id="popupTypeCours"></span></p>
<p><strong>ETD :</strong> <span id="popupETD"></span></p>
<p><strong>Montant :</strong> <span id="popupMontant"></span></p>
<p><strong>Matière :</strong> <span id="popupMatiere"></span></p>
<button onclick="closeInfoPopup()">Fermer</button>
</div>
<div class="footer">
<p>&copy; 2024 IUT de Fontainebleau. Tous droits réservés | <a href="html/mentions_legales.html" style="color: white;">Mentions légales</a></p>
</div>
<script>
// Données du graphique
const ctx = document.getElementById('hoursChart').getContext('2d');
const hoursChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4'],
datasets: [{
label: 'Heures Travaillées',
data: [5, 10, 7, 8],
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: 'Heures'
}
},
x: {
title: {
display: true,
text: 'Semaines'
}
}
}
}
});
let proposalToRemove; // Variable pour stocker la proposition à supprimer
// Fonctions pour gérer l'acceptation et le refus
function acceptProposal(button) {
document.getElementById("justificatifForm").style.display = "block";
proposalToRemove = button.closest('tr'); // Stocker la proposition à supprimer
}
function confirmRefusal(button) {
proposalToRemove = button.closest('tr');
document.getElementById("confirmationPopup").style.display = "flex";
}
function confirmRefusalAction() {
proposalToRemove.remove();
closeConfirmationPopup();
}
function closeConfirmationPopup() {
document.getElementById("confirmationPopup").style.display = "none";
}
function submitJustificatif() {
alert("Vos pièces justificatives ont été soumises avec succès.");
closeJustificatifPopup(); // Cacher le formulaire
// Ajouter l'heure validée à la section des heures validées
const validatedTableBody = document.getElementById("validatedTableBody");
const newRow = document.createElement("tr");
const periode = proposalToRemove.cells[0].innerText; // Récupérer la période
const formation = proposalToRemove.cells[1].innerText; // Récupérer la formation
const nomCours = proposalToRemove.cells[2].innerText; // Récupérer le nom du cours
const semestre = proposalToRemove.cells[3].innerText; // Récupérer le semestre
const typeIntervention = proposalToRemove.cells[4].innerText; // Récupérer le type d'intervention
const volumePrevisionnel = proposalToRemove.cells[5].innerText; // Récupérer le volume prévisionnel
newRow.innerHTML = `<td>${periode}</td><td>${formation}</td><td>${nomCours}</td><td>${semestre}</td><td>${typeIntervention}</td><td>${volumePrevisionnel}</td><td class="status-attente">En attente de traitement</td> `;
validatedTableBody.appendChild(newRow);
proposalToRemove.remove(); // Supprimer la proposition de l'affichage
}
function closeJustificatifPopup() {
document.getElementById("justificatifForm").style.display = "none";
}
function getRandomBUT() {
return "BUT" + Math.floor(Math.random() * 3 + 1); // Génère un nombre aléatoire entre 1 et 3
}
// Gestion des popups
function showDetails(promotion, groupes, salle) {
document.getElementById("promotion").innerText = promotion;
document.getElementById("groupe").innerText = groupes;
document.getElementById("salle").innerText = salle;
document.getElementById("infoPopup").style.display = "block";
}
function closeInfoPopup() {
document.getElementById("infoPopup").style.display = "none";
}
function closePopup() {
document.getElementById("popup").style.display = "none";
}
// Gestion de l'envoi du formulaire de contact
document.getElementById('contactForm').addEventListener('submit', function(event) {
event.preventDefault();
document.getElementById("popup").style.display = "block";
});
</script>
<script>
// Exemple d'un grand nombre d'heures pour l'historique
const hoursData = [
{ date: '01/02/2024', matiere: 'SCR', type: 'CM', volume: '3 ETD', worked: '4h' },
{ date: '05/02/2024', matiere: 'Web Dev', type: 'TP', volume: '2 ETD', worked: '3h' },
{ date: '10/02/2024', matiere: 'Mathématiques', type: 'TD', volume: '4 ETD', worked: '5h' },
{ date: '15/02/2024', matiere: 'IA', type: 'CM', volume: '2 ETD', worked: '2h' },
{ date: '20/02/2024', matiere: 'Python', type: 'TP', volume: '5 ETD', worked: '7h' },
// Ajoutez ici un grand nombre de données...
{ date: '01/03/2024', matiere: 'Réseaux', type: 'TD', volume: '3 ETD', worked: '4h' },
{ date: '10/03/2024', matiere: 'Big Data', type: 'CM', volume: '5 ETD', worked: '6h' },
// Plusieurs lignes (simulons jusqu'à 50 lignes ou plus)...
{ date: '01/04/2024', matiere: 'Dev Mobile', type: 'TP', volume: '2 ETD', worked: '3h' },
{ date: '10/04/2024', matiere: 'Sécurité', type: 'CM', volume: '3 ETD', worked: '5h' },
];
// Variables pour la pagination
const rowsPerPage = 5;
let currentPage = 1;
const totalRows = hoursData.length;
const totalPages = Math.ceil(totalRows / rowsPerPage);
// Fonction pour afficher la table avec pagination
function displayTable(page) {
const start = (page - 1) * rowsPerPage;
const end = start + rowsPerPage;
const tableBody = document.getElementById('hoursTableBody');
tableBody.innerHTML = ''; // Clear existing rows
const pageData = hoursData.slice(start, end);
pageData.forEach(row => {
const tr = document.createElement('tr');
tr.innerHTML = `<td>${row.date}</td>
<td>${row.matiere}</td>
<td>${row.type}</td>
<td>${row.volume}</td>
<td>${row.worked}</td>
<td><span class="details-button" onclick="showDetails('BUT2', '1,2,3', '140')">Plus d'infos</span></td>`;
tableBody.appendChild(tr);
});
document.getElementById('pageNumber').innerText = `Page ${page} sur ${totalPages}`;
}
// Fonctions pour naviguer dans la pagination
function nextPage() {
if (currentPage < totalPages) {
currentPage++;
displayTable(currentPage);
}
}
function prevPage() {
if (currentPage > 1) {
currentPage--;
displayTable(currentPage);
}
}
// Fonction de tri pour les colonnes
function sortTable(n) {
const table = document.getElementById('hoursTable');
let rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
switching = true;
dir = "asc"; // Set the sorting direction to ascending
while (switching) {
switching = false;
rows = table.rows;
for (i = 1; i < (rows.length - 1); i++) {
shouldSwitch = false;
x = rows[i].getElementsByTagName("TD")[n];
y = rows[i + 1].getElementsByTagName("TD")[n];
if (dir === "asc") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
} else if (dir === "desc") {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
}
}
if (shouldSwitch) {
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
switchcount++;
} else {
if (switchcount === 0 && dir === "asc") {
dir = "desc";
switching = true;
}
}
}
}
// Initial load
displayTable(currentPage);
</script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,402 @@
<!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">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<link rel="stylesheet" href="../../css/VACATAIRE/paiements.css">
</head>
<body>
<div class="header">
<!-- Logo pour retourner à l'accueil -->
<div class="logo-container">
<img src="../../media/img/logoWhite.png" alt="Logo Accueil">
</div>
<!-- Catégories dans le header -->
<div class="categories">
<a href="./vacataire.html">Accueil</a>
<a href="./mes-heures.html">Heures</a>
<a href="./paiements.html">Paiements</a>
<a href="./mes-informations.html">Mes informations et documents</a>
</div>
<!-- Section utilisateur avec déconnexion -->
<div class="user-section">
<div class="user-name">
Maxime MENAULT
</div>
<div class="logout-container">
<a href="../../index.html" title="Se déconnecter">
<img src="../../media/img/LogOutWhite.png" alt="Logo Déconnexion">
</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>20h</td>
<td>870,00</td>
<td>700,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>25h</td>
<td>1 087,50</td>
<td>875,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>22h</td>
<td>957,00</td>
<td>760,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>20h</td>
<td>870,00</td>
<td>700,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>18h</td>
<td>783,00</td>
<td>625,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>20h</td>
<td>870,00</td>
<td>700,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>22h</td>
<td>957,00</td>
<td>760,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 (20h 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>&copy; 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: [870, 1087.5, 957, 870, 783, 870, 957],
borderColor: 'rgba(75, 192, 192, 1)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
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));
}
</script>
</body>
</html>

View File

@@ -0,0 +1,237 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard Vacataire</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" href="../../css/VACATAIRE/vacataire.css">
</head>
<body>
<div class="header">
<!-- Logo pour retourner à l'accueil -->
<div class="logo-container">
<img src="../../media/img/logoWhite.png" alt="Logo Accueil">
</div>
<!-- Catégories dans le header -->
<div class="categories">
<a href="./vacataire.html">Accueil</a>
<a href="./mes-heures.html">Heures</a>
<a href="./paiements.html">Paiements</a>
<a href="./mes-informations.html">Mes informations et documents</a>
</div>
<!-- Section utilisateur avec déconnexion -->
<div class="user-section">
<div class="user-name">
Maxime MENAULT
</div>
<div class="logout-container">
<a href="../../index.html" title="Se déconnecter">
<img src="../../media/img/LogOutWhite.png" alt="Logo Déconnexion">
</a>
</div>
</div>
</div>
<div class="dashboard-container">
<!-- Alertes et Notifications -->
<div class="section-header" id="notifications-section">
<h2>Alertes et Notifications</h2>
</div>
<div id="notifications-container">
<!-- Notifications -->
<div class="alert">
<span class="close" onclick="this.parentElement.style.display='none';">&times;</span>
<p><strong>Propositions d'heures en attente :</strong> Vous n'avez toujours pas validé les propositions d'heures. Ces dernières seront automatiquement acceptées dans 3 jours. Merci de le faire au plus vite dans : <a href="mes-heures.html">Mes heures</a>.</p>
</div>
<div class="success">
<span class="close" onclick="this.parentElement.style.display='none';">&times;</span>
<p><strong>Pièces justificatives :</strong> Vos pièces justificatives ont été validées par le responsable pédagogique et sont accessibles dans : <a href="mes-informations.html">Mes informations et documents</a>.</p>
</div>
</div>
<!-- Script pour gérer l'affichage des notifications -->
<script>
const notificationsContainer = document.getElementById('notifications-container');
const notificationsSection = document.getElementById('notifications-section');
// Vérifiez si le conteneur des notifications est vide
if (notificationsContainer.childElementCount === 0) {
notificationsSection.style.display = 'none'; // Masquer la section si aucune notification
}
</script>
<!-- Emploi du Temps avec navigation de semaines -->
<div class="section-header">
<h2>Mon Emploi du Temps</h2>
</div>
<div class="card">
<!-- Navigation entre semaines -->
<div class="week-navigation">
<button>&laquo; Semaine précédente</button>
<p><strong>Semaine du 18 au 24 Novembre 2024</strong></p>
<button>Semaine suivante &raquo;</button>
</div>
<div class="schedule-container">
<table class="schedule-table">
<thead>
<tr>
<th>Heures</th>
<th>Lundi</th>
<th>Mardi</th>
<th>Mercredi</th>
<th>Jeudi</th>
<th>Vendredi</th>
</tr>
</thead>
<tbody>
<tr>
<td class="time-slot">08:00 - 08:30</td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
</tr>
<tr>
<td class="time-slot">08:30 - 09:00</td>
<td class="class">TP - SCR<br><span>Salle 224 - BUT1 Groupe 3</span></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
</tr>
<tr>
<td class="time-slot">09:00 - 09:30</td>
<td class="class">TP - Mathématiques<br><span>Salle 101 - BUT2 Groupe 1</span></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="class">TD - SCR<br><span>Salle 305 - BUT1 Groupe 2</span></td>
<td class="no-class"></td>
</tr>
<tr>
<td class="time-slot">09:30 - 10:00</td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 202 - BUT1 Groupe 2</span></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 202 - BUT1 Groupe 2</span></td>
</tr>
<tr>
<td class="time-slot">10:00 - 10:30</td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 202 - BUT1 Groupe 2</span></td>
<td class="no-class"></td>
<td class="class">TP - SCR<br><span>Salle 305 - BUT1 Groupe 2</span></td>
<td class="no-class"></td>
</tr>
<tr>
<td class="time-slot">10:30 - 11:00</td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 202 - BUT1 Groupe 4</span></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
</tr>
<tr>
<td class="time-slot">11:00 - 11:30</td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
</tr>
<tr>
<td class="time-slot">13:00 - 13:30</td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 225 - BUT1 Groupe 1</span></td>
</tr>
<tr>
<td class="time-slot">13:30 - 14:00</td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 225 - BUT1 Groupe 2</span></td>
</tr>
<tr>
<td class="time-slot">14:00 - 14:30</td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 225 - BUT1 Groupe 3</span></td>
</tr>
<tr>
<td class="time-slot">14:30 - 15:00</td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="no-class"></td>
<td class="class">TP - DEV<br><span>Salle 225 - BUT1 Groupe 4</span></td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Suivi des Paiements -->
<div class="section-header">
<h2>Suivi des Paiements</h2>
</div>
<div class="card">
<div class="table-container">
<table>
<thead>
<tr>
<th>Période</th>
<th>Heures Payées</th>
<th>Montant Brut (€)</th>
<th>Date de Paiement</th>
<th>Bulletin de paie</th>
</tr>
</thead>
<tbody>
<tr>
<td>Septembre 2024</td>
<td>20h</td>
<td>870,00</td>
<td>01/10/2024</td>
<td><a href="https://ensap.gouv.fr" target="_blank" class="btn">Voir Bulletin</a></td>
</tr>
<tr>
<td>Octobre 2024</td>
<td>22h</td>
<td>957,00</td>
<td>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 (20h restantes)</p>
<div class="more-payments">
<p><a href="./paiements.html" class="btn">Voir tous les paiements</a></p>
</div>
</div>
</div>
<div class="footer">
<p>&copy; 2024 IUT de Fontainebleau. Tous droits réservés |
<a href="../mentions_legales.html">Mentions légales</a>
</p>
</div>
</body>
</html>