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 @@