From b386f9c5edf799a7522eb7cc73b1ac020667a5c1 Mon Sep 17 00:00:00 2001 From: Marcelin <m.lechossec@lpoaste.net> Date: Mon, 14 Oct 2024 12:02:37 +0200 Subject: [PATCH 1/2] =?UTF-8?q?ajout=20du=20bouton=20csv=20et=20s=C3=A9par?= =?UTF-8?q?ation=20de=20la=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/templates/core/activite_form.html | 575 ++++++++++++------------- core/templates/core/activites.html | 3 +- core/views.py | 3 + 3 files changed, 286 insertions(+), 295 deletions(-) diff --git a/core/templates/core/activite_form.html b/core/templates/core/activite_form.html index d769bc9..87a72c5 100644 --- a/core/templates/core/activite_form.html +++ b/core/templates/core/activite_form.html @@ -26,274 +26,274 @@ </style> - - <div class="container mb-4"> - <div class="row justify-content-center"> - <div class="col-12 m-3"> - <div class="card shadow h-100 text-center"> - <div class="card-header text-center d-flex justify-content-between align-items-center" id="cardHeader"> - <h2 class="d-inline-block mb-0">Option CSV</h2> - <button class="btn btn-link" id="toggle-button"> - <i class="fas fa-caret-down " style="color: 4d1d35;"></i> - </button> - </div> - <div class="card-body" style="display: none;"> - <form method="post" enctype="multipart/form-data" action="{% url 'core:activite_create' %}"> - {% csrf_token %} - <div class="form-group text-center"> <!-- Centering the form group --> - <div class="d-inline-block"> <!-- Centering the inner div --> - <input type="file" name="csv_file" class="form-control-file"> + {% if is_csv %} + <div class="container mb-4"> + <div class="row justify-content-center"> + <div class="col-12 m-3"> + <div class="card shadow h-100 text-center"> + <div class="card-header text-center d-flex justify-content-between align-items-center" id="cardHeader"> + <h2 class="d-inline-block mb-0">Option CSV</h2> + </div> + <div class="card-body"> + <form method="post" enctype="multipart/form-data" action="{% url 'core:activite_create' %}"> + {% csrf_token %} + <div class="form-group text-center"> <!-- Centering the form group --> + <div class="d-inline-block"> <!-- Centering the inner div --> + <input type="file" name="csv_file" class="form-control-file"> + </div> </div> - </div> - <button type="submit" class="btn btn-primary">Importer CSV</button> - </form> - <a href="{% url 'core:generate_example_csv' %}" class="btn btn-success mt-2">Télécharger Exemple CSV</a> + <button type="submit" class="btn btn-primary">Importer CSV</button> + </form> + <a href="{% url 'core:generate_example_csv' %}" class="btn btn-success mt-2">Télécharger Exemple CSV</a> + </div> </div> </div> </div> </div> - </div> - - <form method="post"> - {% csrf_token %} - <div class="container mb-4"> - <div class="row justify-content-center"> - <div class="col-12 m-3"> - <div class="card shadow h-100 " > - <div class="card-header text-center" id="cardHeader2"> - <h2>Nouvelle activité</h2> - </div> - <div class="card-body text-center"> - <form id="projet-form"> - <div class="btn-group d-flex flex-wrap justify-content-center" role="group" aria-label="Basic radio toggle button group"> - {% for projet in projet_dict %} - <input type="radio" class="btn-check" name="projet" id="projet-{{ projet.pk }}" autocomplete="off" - value="{{ projet.pk }}" - data-got-structures="{% if projet.gotStructures %}true{% else %}false{% endif %}" - data-got-services="{% if projet.gotServices %}true{% else %}false{% endif %}" - - data-nom="{{ projet.nom }}" - {% if projet.pk|stringformat:"s" == selected_projet %}checked{% endif %}> - - <label class="btn btn-outline-primary hover-buttons" - style="color: white; background-color: {{ projet.color }};" - for="projet-{{ projet.pk }}">{{ projet.nom }}</label> - {% empty %} - <p>Veuillez sélectionner un SDSI par défaut</p> - {% endfor %} + {% endif %} + + {% if is_manual %} + <form method="post"> + {% csrf_token %} + <div class="container mb-4"> + <div class="row justify-content-center"> + <div class="col-12 m-3"> + <div class="card shadow h-100 " > + <div class="card-header text-center" id="cardHeader2"> + <h2>Nouvelle activité</h2> </div> - </form> - - <hr> - - <div class="pt-1 pb-2" id="autres-projets-select" style="display: none;"> - - <div class="mt-3 pb-4" id="projet-buttons"> - {% for projet in projet_history %} - <button type="button" class="btn btn-primary projet-btn m-1" data-projet-id="{{ projet.pk }}">{{ projet.nom }}</button> - {% endfor %} - </div> - {{ form.projet.label_tag }} - <select class="form-select" id="id_projet" name="projet"> - <option value="">Sélectionnez un projet...</option> - {% for projet in projet_list %} - <option value="{{ projet.pk }}">{{ projet.nom }}</option> - {% endfor %} - </select> - <div class="pb-2"></div> + <div class="card-body text-center"> + <form id="projet-form"> + <div class="btn-group d-flex flex-wrap justify-content-center" role="group" aria-label="Basic radio toggle button group"> + {% for projet in projet_dict %} + <input type="radio" class="btn-check" name="projet" id="projet-{{ projet.pk }}" autocomplete="off" + value="{{ projet.pk }}" + data-got-structures="{% if projet.gotStructures %}true{% else %}false{% endif %}" + data-got-services="{% if projet.gotServices %}true{% else %}false{% endif %}" + + data-nom="{{ projet.nom }}" + {% if projet.pk|stringformat:"s" == selected_projet %}checked{% endif %}> + + <label class="btn btn-outline-primary hover-buttons" + style="color: white; background-color: {{ projet.color }};" + for="projet-{{ projet.pk }}">{{ projet.nom }}</label> + {% empty %} + <p>Veuillez sélectionner un SDSI par défaut</p> + {% endfor %} + </div> + </form> + <hr> - </div> - <div class="pt-1 pb-2" id="champ-structures" style="display: none;"> - <div id="structure-list"> - <div class="mt-3 pb-4" id="structure-buttons"> - {% for structure in structure_history %} - <button type="button" class="btn btn-primary structure-btn m-1" data-structure-id="{{ structure.pk }}">{{ structure.nom }}</button> - {% endfor %} - </div> - {{ form.structure.label_tag }} - <select name="structure" id="id_structure" class="form-select"> - <option value="">Sélectionnez une structure...</option> <!-- Option par défaut ajoutée --> - {% for type_label, structures in structures_by_type.items %} - <optgroup label="{{ type_label }}"> - {% for structure in structures %} - <option value="{{ structure.id }}">{{ structure.nom }}</option> + <div class="pt-1 pb-2" id="autres-projets-select" style="display: none;"> + + <div class="mt-3 pb-4" id="projet-buttons"> + {% for projet in projet_history %} + <button type="button" class="btn btn-primary projet-btn m-1" data-projet-id="{{ projet.pk }}">{{ projet.nom }}</button> {% endfor %} - </optgroup> - {% endfor %} - </select> - <div class="pb-2"></div> - <hr> - </div> - </div> + </div> + {{ form.projet.label_tag }} + <select class="form-select" id="id_projet" name="projet"> + <option value="">Sélectionnez un projet...</option> + {% for projet in projet_list %} + <option value="{{ projet.pk }}">{{ projet.nom }}</option> + {% endfor %} + </select> + <div class="pb-2"></div> + <hr> + </div> - <div class="pt-1 pb-2" id="champ-services" style="display: none;"> - <div id="service-list"> - <div class="mt-3 pb-4" id="service-buttons"> - {% for service_id, service_nom in service_history %} - <button type="button" class="btn btn-primary service-btn m-1" data-service-id="{{ service_id }}">{{ service_nom }}</button> - {% endfor %} + <div class="pt-1 pb-2" id="champ-structures" style="display: none;"> + <div id="structure-list"> + <div class="mt-3 pb-4" id="structure-buttons"> + {% for structure in structure_history %} + <button type="button" class="btn btn-primary structure-btn m-1" data-structure-id="{{ structure.pk }}">{{ structure.nom }}</button> + {% endfor %} + </div> + {{ form.structure.label_tag }} + <select name="structure" id="id_structure" class="form-select"> + <option value="">Sélectionnez une structure...</option> <!-- Option par défaut ajoutée --> + {% for type_label, structures in structures_by_type.items %} + <optgroup label="{{ type_label }}"> + {% for structure in structures %} + <option value="{{ structure.id }}">{{ structure.nom }}</option> + {% endfor %} + </optgroup> + {% endfor %} + </select> + <div class="pb-2"></div> + <hr> + </div> </div> - {{ form.service.label_tag }} - <select name="service" id="id_service" class="form-select"> - <option value="">Sélectionnez un service...</option> <!-- Option par défaut ajoutée --> - {% for value, label in form.fields.service.choices %} - {% if value %} <!-- Ignore la valeur null/None qui est interprétée comme une chaîne vide --> - <option value="{{ value }}">{{ label }}</option> - {% endif %} - {% endfor %} - </select> - <div class="pb-2"></div> - <hr> - </div> - </div> + <div class="pt-1 pb-2" id="champ-services" style="display: none;"> + <div id="service-list"> + <div class="mt-3 pb-4" id="service-buttons"> + {% for service_id, service_nom in service_history %} + <button type="button" class="btn btn-primary service-btn m-1" data-service-id="{{ service_id }}">{{ service_nom }}</button> + {% endfor %} + </div> + {{ form.service.label_tag }} + <select name="service" id="id_service" class="form-select"> + <option value="">Sélectionnez un service...</option> <!-- Option par défaut ajoutée --> + {% for value, label in form.fields.service.choices %} + {% if value %} <!-- Ignore la valeur null/None qui est interprétée comme une chaîne vide --> + <option value="{{ value }}">{{ label }}</option> + {% endif %} + {% endfor %} + </select> + <div class="pb-2"></div> + <hr> + </div> + </div> - <div class="pt-1 pb-2"> - <div class="mt-3 pb-4" id="most-used-hours-buttons"> - {% for hour, count in most_used_hours %} - <button type="button" class="btn btn-primary structure-btn m-1" onclick="updateTempsPasse('{{ hour }}')">{{ hour }}</button> - {% endfor %} - </div> - {{ form.temps_passe.label_tag }} - {{ form.temps_passe }} - </div> - <div class="row pt-1 pb-2"> - <div class="col-12 col-md-6"> - <div class="card-body" style="height: 30vh; overflow-y: auto;"> - <canvas id="ChartActivite" class=""></canvas> - </div> - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> - <p id="totalTemps" class="text-center">Temps distribué : {{ total_temps_passe|default:'0' }}h</p> - </div> - <div class="col-12 col-md-6 align-items-center d-flex justify-content-center text-center"> - <div class="col-6 form-group align-items-center"> - <label for="semaine_annee">Sélectionnez une semaine :</label> - <select name="semaine_annee" id="semaine_annee"> - {% for semaine in semaines %} - <option value="{{ semaine.0 }}">{{ semaine.1 }}</option> - {% endfor %} - </select> - - <button type="button" class="btn btn-light mt-5" data-toggle="modal" data-target="#confirmUpdateModal">Modifier le temps de travail par semaines ({{ user.temps_semaine }})</button> - </div> - </div> - <script> - // Définition de la fonction sum pour calculer la somme d'un tableau - function sum(array) { - - return array.slice(0, -1).reduce((total, current) => total + current, 0) - } + <div class="pt-1 pb-2"> + <div class="mt-3 pb-4" id="most-used-hours-buttons"> + {% for hour, count in most_used_hours %} + <button type="button" class="btn btn-primary structure-btn m-1" onclick="updateTempsPasse('{{ hour }}')">{{ hour }}</button> + {% endfor %} + </div> + {{ form.temps_passe.label_tag }} + {{ form.temps_passe }} + </div> - function sum2(array) { - - return array.reduce((total, current) => total + current, 0) - } - - function updateChart(semaineSelectionnee) { - const url = `/update-temps-travail/?semaine_annee=${semaineSelectionnee}` - fetch(url) - .then((response) => { - if (!response.ok) { - throw new Error('Network response was not ok') - } - return response.json() - }) - .then((data) => { - const labels = data.chart_label_projet - const dataValues = data.chart_data_projet - const backgroundColors = data.chart_color_projet - let totalTemps - - if (labels.includes("Temps restant")) { - totalTemps = sum(dataValues) - } else { - totalTemps = sum2(dataValues) + <div class="row pt-1 pb-2"> + <div class="col-12 col-md-6"> + <div class="card-body" style="height: 30vh; overflow-y: auto;"> + <canvas id="ChartActivite" class=""></canvas> + </div> + <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> + <p id="totalTemps" class="text-center">Temps distribué : {{ total_temps_passe|default:'0' }}h</p> + </div> + <div class="col-12 col-md-6 align-items-center d-flex justify-content-center text-center"> + <div class="col-6 form-group align-items-center"> + <label for="semaine_annee">Sélectionnez une semaine :</label> + <select name="semaine_annee" id="semaine_annee"> + {% for semaine in semaines %} + <option value="{{ semaine.0 }}">{{ semaine.1 }}</option> + {% endfor %} + </select> + + <button type="button" class="btn btn-light mt-5" data-toggle="modal" data-target="#confirmUpdateModal">Modifier le temps de travail par semaines ({{ user.temps_semaine }})</button> + </div> + </div> + <script> + // Définition de la fonction sum pour calculer la somme d'un tableau + function sum(array) { + + return array.slice(0, -1).reduce((total, current) => total + current, 0) } - - ChartActivite.data.labels = labels - ChartActivite.data.datasets[0].data = dataValues - ChartActivite.data.datasets[0].backgroundColor = backgroundColors - ChartActivite.update() - - document.getElementById('totalTemps').textContent = `Temps distribué : ${totalTemps}h` - }) - .catch((error) => { - console.error('Erreur lors de la récupération des données du graphique:', error) - }) - } - - document.addEventListener('DOMContentLoaded', () => { - const semaineSelectionnee = document.getElementById('semaine_annee').value - updateChart(semaineSelectionnee) - }) - - document.getElementById('semaine_annee').addEventListener('change', function () { - const semaineSelectionnee = this.value - updateChart(semaineSelectionnee) - }) - - const ctx = document.getElementById('ChartActivite').getContext('2d') - const ChartActivite = new Chart(ctx, { - type: 'doughnut', - data: { - labels: [], - datasets: [ - { - label: 'temps passe (h)', - data: [], - backgroundColor: [], - hoverOffset: 4 + + function sum2(array) { + + return array.reduce((total, current) => total + current, 0) } - ] - }, - options: { - plugins: { - legend: { - position: 'right' + + function updateChart(semaineSelectionnee) { + const url = `/update-temps-travail/?semaine_annee=${semaineSelectionnee}` + fetch(url) + .then((response) => { + if (!response.ok) { + throw new Error('Network response was not ok') + } + return response.json() + }) + .then((data) => { + const labels = data.chart_label_projet + const dataValues = data.chart_data_projet + const backgroundColors = data.chart_color_projet + let totalTemps + + if (labels.includes("Temps restant")) { + totalTemps = sum(dataValues) + } else { + totalTemps = sum2(dataValues) + } + + ChartActivite.data.labels = labels + ChartActivite.data.datasets[0].data = dataValues + ChartActivite.data.datasets[0].backgroundColor = backgroundColors + ChartActivite.update() + + document.getElementById('totalTemps').textContent = `Temps distribué : ${totalTemps}h` + }) + .catch((error) => { + console.error('Erreur lors de la récupération des données du graphique:', error) + }) } - }, - responsive: true, - maintainAspectRatio: false - } - }) - </script> - </div> - </div> - <div class="card-footer text-body-secondary pb-4 text-center" id="cardFooter"> - <button type="submit" class="btn btn-dark">Enregistrer</button> + + document.addEventListener('DOMContentLoaded', () => { + const semaineSelectionnee = document.getElementById('semaine_annee').value + updateChart(semaineSelectionnee) + }) + + document.getElementById('semaine_annee').addEventListener('change', function () { + const semaineSelectionnee = this.value + updateChart(semaineSelectionnee) + }) + + const ctx = document.getElementById('ChartActivite').getContext('2d') + const ChartActivite = new Chart(ctx, { + type: 'doughnut', + data: { + labels: [], + datasets: [ + { + label: 'temps passe (h)', + data: [], + backgroundColor: [], + hoverOffset: 4 + } + ] + }, + options: { + plugins: { + legend: { + position: 'right' + } + }, + responsive: true, + maintainAspectRatio: false + } + }) + </script> + </div> + </div> + <div class="card-footer text-body-secondary pb-4 text-center" id="cardFooter"> + <button type="submit" class="btn btn-dark">Enregistrer</button> + </div> + </div> </div> </div> </div> - </div> - </div> - </form> - <!-- Modal modification --> - <div class="modal fade" id="confirmUpdateModal" tabindex="-1" role="dialog" aria-hidden="true"> - <div class="modal-dialog modal-dialog-centered" role="document"> - <div class="modal-content"> - <div class="modal-header"> - <h5 class="modal-title">Confirmation de modification</h5> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> - <span aria-hidden="true">×</span> - </button> - </div> - <form method="post" action="{% url 'core:update_temps_travail' user.id %}"> - {% csrf_token %} - <div class="modal-body"> - <p>Êtes-vous sûr de vouloir modifier le temps de travail par semaine ?</p> - <label for="id_temps_semaine_nouveau">Nouveau temps de travail (en heures)</label> - <input type="number" id="id_temps_semaine_nouveau" name="temps_semaine_nouveau" class="form-control" value="{{ user_instance.temps_semaine }}" required> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-secondary" data-dismiss="modal">Annuler</button> - <button type="submit" class="btn btn-primary">Confirmer</button> + </form> + <!-- Modal modification --> + <div class="modal fade" id="confirmUpdateModal" tabindex="-1" role="dialog" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title">Confirmation de modification</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> </div> - </form> + <form method="post" action="{% url 'core:update_temps_travail' user.id %}"> + {% csrf_token %} + <div class="modal-body"> + <p>Êtes-vous sûr de vouloir modifier le temps de travail par semaine ?</p> + <label for="id_temps_semaine_nouveau">Nouveau temps de travail (en heures)</label> + <input type="number" id="id_temps_semaine_nouveau" name="temps_semaine_nouveau" class="form-control" value="{{ user_instance.temps_semaine }}" required> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Annuler</button> + <button type="submit" class="btn btn-primary">Confirmer</button> + </div> + </form> + </div> </div> </div> - </div> + {% endif %} <script> @@ -333,14 +333,22 @@ projectColor = rgbToHex(r, g, b); } - //card Options CSV - var cardHeader = document.getElementById('cardHeader'); - //card Nouvelle activité - var cardHeader2 = document.getElementById('cardHeader2'); - - var cardFooter = document.getElementById('cardFooter'); - + var isCSV = {{ is_csv|yesno:"true,false" }}; + var isManual = {{ is_manual|yesno:"true,false" }}; + if (isCSV) { + // Afficher la carte pour CSV + var cardHeader = document.getElementById('cardHeader'); + cardHeader.style.display = 'block'; // Affiche la carte CSV + } else if (isManual) { + // Afficher la carte pour l'ajout manuel + var cardHeader2 = document.getElementById('cardHeader2'); + cardHeader2.style.display = 'block'; // Affiche la carte manuelle + + var cardFooter = document.getElementById('cardFooter'); + cardFooter.style.display = 'block'; // Affiche le pied de carte + } + // Fonction pour éclaircir une couleur HEX function lightenColor(hex, percent) { @@ -361,56 +369,34 @@ var paleHeaderColor = lightenColor(projectColor, 0); var paleFooterColor = lightenColor(projectColor, 0); - var paleHeader2Color = lightenColor(projectColor, 10); // Rendre la couleur 10% plus pâle pour le cardSecondaire + var paleHeader2Color = lightenColor(projectColor, 0); // Rendre la couleur 10% plus pâle pour le cardSecondaire - - // Appliquer la couleur de fond pâle à cardHeader, si présent - if (cardHeader) { - cardHeader.style.backgroundColor = paleHeaderColor; - } else { - console.error('Element with ID "cardHeader" not found.'); - } - - // Appliquer la couleur de fond pâle à cardHeader2, si présent - if (cardHeader2) { - cardHeader2.style.backgroundColor = paleHeader2Color; - } else { - console.error('Element with ID "cardHeader2" not found.'); - } - - // Appliquer la couleur de fond pâle à cardFooter, si présent - if (cardFooter) { - cardFooter.style.backgroundColor = paleFooterColor; - } else { - console.error('Element with ID "cardFooter" not found.'); + if (isCSV) { + // Appliquer la couleur de fond pâle à cardHeader, si présent + if (cardHeader) { + cardHeader.style.backgroundColor = paleHeaderColor; + } else { + console.error('Element with ID "cardHeader" not found.'); + } } - - }); + if (isManual) { + // Appliquer la couleur de fond pâle à cardHeader2, si présent + if (cardHeader2) { + cardHeader2.style.backgroundColor = paleHeader2Color; + } else { + console.error('Element with ID "cardHeader2" not found.'); + } - // Récupérer le bouton et la div à déplier/replier - const toggleButton = document.getElementById("toggle-button"); - const cardBody = document.querySelector(".card-body"); - - // Vérifiez que le bouton et la div existent avant d'ajouter des écouteurs d'événements - if (toggleButton && cardBody) { - // Ajouter un écouteur d'événement au bouton - toggleButton.addEventListener("click", function() { - // Vérifier si la div est actuellement affichée ou masquée - if (cardBody.style.display === "none") { - // Si elle est masquée, l'afficher - cardBody.style.display = "block"; - // Modifier l'icône de la flèche pour indiquer que la div est ouverte - toggleButton.innerHTML = '<i class="fas fa-caret-up" style="color: 4d1d35;"></i>'; + // Appliquer la couleur de fond pâle à cardFooter, si présent + if (cardFooter) { + cardFooter.style.backgroundColor = paleFooterColor; } else { - // Sinon, la masquer - cardBody.style.display = "none"; - // Modifier l'icône de la flèche pour indiquer que la div est fermée - toggleButton.innerHTML = '<i class="fas fa-caret-down" style="color: 4d1d35;"></i>'; + console.error('Element with ID "cardFooter" not found.'); } - }); - } + } + }); // Fonction pour masquer la div "Structure" et désactiver le champ de sélection de la structure function hideStructureDiv() { @@ -664,6 +650,7 @@ </script> + {% else %} <div class="container"> <div class="row justify-content-center"> diff --git a/core/templates/core/activites.html b/core/templates/core/activites.html index 1abb70e..54c85a2 100644 --- a/core/templates/core/activites.html +++ b/core/templates/core/activites.html @@ -13,7 +13,8 @@ <div class="card shadow h-100"> <div class="card-header text-center" id="cardHeader"> <h2 class="text-center">Liste des activités</h2> - <a href="{% url 'core:activite_create' %}" class="btn btn-dark mb-3 mt-3">Ajouter une activité</a> + <a href="{% url 'core:activite_create' %}?type=manual" class="btn btn-dark mb-3 mt-3">Ajouter une activité</a> + <a href="{% url 'core:activite_create' %}?type=csv" class="btn btn-dark mb-3 mt-3">CSV</a> </div> <div class="card-body"> <div class="container-fluid"> diff --git a/core/views.py b/core/views.py index eba075e..8bbf57b 100644 --- a/core/views.py +++ b/core/views.py @@ -1362,6 +1362,9 @@ class ActiviteCreate(CreateView): sdsi = SDSI.objects.filter(EnCours=True).first() context["menu_activite"] = "active" + context['is_csv'] = self.request.GET.get('type') == 'csv' + context['is_manual'] = self.request.GET.get('type') == 'manual' + most_used_hours = self.get_most_used_hours() context["most_used_hours"] = most_used_hours -- GitLab From a99d94823bb7e7b75b333d57b1f183912c3a2ba2 Mon Sep 17 00:00:00 2001 From: Marcelin <m.lechossec@lpoaste.net> Date: Mon, 14 Oct 2024 16:36:19 +0200 Subject: [PATCH 2/2] =?UTF-8?q?s=C3=A9paration=20activit=C3=A9=20et=20csv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/templates/core/activite_form.html | 4 ++-- core/templates/core/activites.html | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/core/templates/core/activite_form.html b/core/templates/core/activite_form.html index 87a72c5..2d06b1c 100644 --- a/core/templates/core/activite_form.html +++ b/core/templates/core/activite_form.html @@ -31,8 +31,8 @@ <div class="row justify-content-center"> <div class="col-12 m-3"> <div class="card shadow h-100 text-center"> - <div class="card-header text-center d-flex justify-content-between align-items-center" id="cardHeader"> - <h2 class="d-inline-block mb-0">Option CSV</h2> + <div class="card-header text-center d-flex justify-content-center align-items-center" id="cardHeader"> + <h2 class="text-center mb-0">Ajouter des activités via un fichier CSV</h2> </div> <div class="card-body"> <form method="post" enctype="multipart/form-data" action="{% url 'core:activite_create' %}"> diff --git a/core/templates/core/activites.html b/core/templates/core/activites.html index 54c85a2..bfb38f8 100644 --- a/core/templates/core/activites.html +++ b/core/templates/core/activites.html @@ -11,10 +11,17 @@ <div class="col-12 m-3"> <!-- Centering the column --> <div class="card shadow h-100"> - <div class="card-header text-center" id="cardHeader"> - <h2 class="text-center">Liste des activités</h2> - <a href="{% url 'core:activite_create' %}?type=manual" class="btn btn-dark mb-3 mt-3">Ajouter une activité</a> - <a href="{% url 'core:activite_create' %}?type=csv" class="btn btn-dark mb-3 mt-3">CSV</a> + <div class="card-header position-relative text-center" id="cardHeader"> + <!-- Titre centré --> + <h2 class="mb-0">Liste des activités</h2> + + <!-- Bouton CSV à droite --> + <a href="{% url 'core:activite_create' %}?type=csv" class="btn btn-dark m-3" style="position: absolute; right: 0; top: 50%; transform: translateY(-50%);">CSV</a> + + <!-- Bouton "Ajouter une activité" en dessous --> + <div class="mt-3"> + <a href="{% url 'core:activite_create' %}?type=manual" class="btn btn-dark mb-3">Ajouter une activité</a> + </div> </div> <div class="card-body"> <div class="container-fluid"> -- GitLab