From 2ef730508fbd08d1a8a41e61445d6357b76ebe8c Mon Sep 17 00:00:00 2001 From: kdeterme Date: Wed, 7 Oct 2026 10:26:08 +0200 Subject: [PATCH] =?UTF-8?q?feat(calendar):=20int=C3=A9grer=20les=20notes?= =?UTF-8?q?=20et=20documents=20dans=20la=20modale=20d'intervention?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/interventions_calendar.css | 40 +++ .../calendar/interventions_calendar.js | 97 ++++++++ .../interventions/interventions_calendar.html | 189 +++++++------- .../calendar_intervention_notes_docs.html | 141 +++++++++++ .../tests/test_calendar_notes_docs.py | 234 ++++++++++++++++++ loko/interventions/urls.py | 1 + loko/interventions/views/calendar.py | 65 +++++ 7 files changed, 682 insertions(+), 85 deletions(-) create mode 100644 loko/interventions/templates/interventions/partials/calendar_intervention_notes_docs.html create mode 100644 loko/interventions/tests/test_calendar_notes_docs.py diff --git a/loko/interventions/static/interventions/calendar/interventions_calendar.css b/loko/interventions/static/interventions/calendar/interventions_calendar.css index 4ca66c8..e2866af 100644 --- a/loko/interventions/static/interventions/calendar/interventions_calendar.css +++ b/loko/interventions/static/interventions/calendar/interventions_calendar.css @@ -1146,4 +1146,44 @@ opacity: 0.4; } +/* --- Modal Notes & Documents --- */ +@media (min-width: 992px) { + .border-start-lg { + border-left: 1px solid #dee2e6 !important; + padding-left: 1.25rem !important; + } +} + +.calendar-modal-notes-docs-container { + min-height: 250px; + max-height: 60vh; + overflow-y: auto; + scrollbar-width: thin; + padding-right: 4px; +} + +.cal-note-card { + transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; +} + +.cal-note-card:hover { + background-color: #ffffff !important; + border-color: #b0c4de !important; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05); +} + +.cal-doc-card { + transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; +} + +.cal-doc-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08) !important; + border-color: #b0c4de !important; +} + +.cal-nd-filter-btn { + transition: all 0.15s ease; +} + diff --git a/loko/interventions/static/interventions/calendar/interventions_calendar.js b/loko/interventions/static/interventions/calendar/interventions_calendar.js index a9c3315..979b999 100644 --- a/loko/interventions/static/interventions/calendar/interventions_calendar.js +++ b/loko/interventions/static/interventions/calendar/interventions_calendar.js @@ -4894,6 +4894,7 @@ document.addEventListener('DOMContentLoaded', function () { } clearPlanningFeedback(); + loadModalNotesAndDocuments(currentModalInterventionId); planningModal.show(); } @@ -5087,6 +5088,102 @@ document.addEventListener('DOMContentLoaded', function () { planningFeedback.textContent = ''; } + function loadModalNotesAndDocuments(interventionId) { + const container = document.getElementById('modal-notes-docs-content'); + const summaryText = document.getElementById('modal-notes-docs-summary'); + if (!container) return; + + if (summaryText) { + summaryText.textContent = '…'; + } + + container.innerHTML = ` +
+
+ ${gettext('Chargement...')} +
+ ${gettext('Chargement des notes et documents...')} +
+ `; + + if (!interventionId) { + container.innerHTML = `
${gettext('Aucune intervention sélectionnée.')}
`; + return; + } + + const url = (typeof interventionCalendarDetailsUrlPattern !== 'undefined') + ? interventionCalendarDetailsUrlPattern.replace('/0/details/', `/${interventionId}/details/`) + : `/interventions/calendar/intervention/${interventionId}/details/`; + + fetch(url, { + headers: { 'X-Requested-With': 'XMLHttpRequest' } + }) + .then(response => { + if (!response.ok) { + throw new Error(response.statusText || 'Erreur de chargement'); + } + return response.json(); + }) + .then(data => { + if (currentModalInterventionId !== interventionId) return; + + if (data.success && data.html) { + container.innerHTML = data.html; + + const notesCount = data.notes_count || 0; + const docsCount = data.documents_count || 0; + const notesText = notesCount > 1 ? `${notesCount} ${gettext('notes')}` : `${notesCount} ${gettext('note')}`; + const docsText = docsCount > 1 ? `${docsCount} ${gettext('docs')}` : `${docsCount} ${gettext('doc')}`; + + if (summaryText) { + summaryText.textContent = `${notesText} • ${docsText}`; + } + + // Setup filter buttons + const filterBtns = container.querySelectorAll('.cal-nd-filter-btn'); + const notesSection = container.querySelector('#cal-modal-notes-section'); + const docsSection = container.querySelector('#cal-modal-docs-section'); + + filterBtns.forEach(btn => { + btn.addEventListener('click', function () { + filterBtns.forEach(b => { + b.classList.remove('active'); + b.classList.remove('btn-primary'); + b.classList.add('btn-outline-primary'); + }); + this.classList.add('active'); + this.classList.remove('btn-outline-primary'); + this.classList.add('btn-primary'); + const filter = this.getAttribute('data-filter'); + + if (notesSection) { + notesSection.style.display = (filter === 'all' || filter === 'notes') ? '' : 'none'; + } + if (docsSection) { + docsSection.style.display = (filter === 'all' || filter === 'docs') ? '' : 'none'; + } + }); + }); + } else { + container.innerHTML = `
${gettext('Impossible de charger les notes et documents.')}
`; + } + }) + .catch(err => { + if (currentModalInterventionId !== interventionId) return; + console.error('Error loading notes/documents:', err); + container.innerHTML = ` +
+ ${gettext('Erreur lors du chargement des notes et documents.')} + +
+ `; + const retryBtn = container.querySelector('#retry-load-notes-docs-btn'); + if (retryBtn) { + retryBtn.addEventListener('click', () => loadModalNotesAndDocuments(interventionId)); + } + }); + } + function loadCalendarData(customDate) { let url = interventionseventsUrl; diff --git a/loko/interventions/templates/interventions/interventions_calendar.html b/loko/interventions/templates/interventions/interventions_calendar.html index 489ad1c..5319dc2 100644 --- a/loko/interventions/templates/interventions/interventions_calendar.html +++ b/loko/interventions/templates/interventions/interventions_calendar.html @@ -554,100 +554,118 @@