From 23e3c0d2e2854cd5c4afad965e959b1894071385 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Tue, 7 Jul 2026 23:43:53 -0400 Subject: [PATCH] =?UTF-8?q?planif=20(feuille=20job=20mobile)=20:=20comment?= =?UTF-8?q?aire=20interne=20par=20d=C3=A9faut=20=E2=80=94=20plus=20de=20co?= =?UTF-8?q?urriel=20client=20accidentel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Incident : un employé a envoyé un courriel au client en croyant ajouter un commentaire privé au fil du ticket. Le composeur de la feuille (jobSheet) s'ouvrait en mode « Réponse · courriel » (public) par défaut. - openJobSheet : `noteMode` défaut = TRUE (commentaire INTERNE) au lieu de false (réponse client) ; ouverture en mode réponse seulement si `{ reply: true }` explicite (aucun appelant ne le fait) - bascule réordonnée : « Note interne » (1re, défaut) · « Répondre au client » (2e, explicite) ; couleur d'alerte (deep-orange) quand la réponse client est sélectionnée - bouton d'envoi : « Enregistrer la note » (interne, neutre) vs « Envoyer au client » (orange) ; indice/placeholder clarifiés (« ajoutée au fil, jamais envoyée au client » vs « ⚠ ENVOYÉE au client ») - répondre au client reste possible mais = choix explicite (aligne le comportement sûr déjà présent dans le panneau détail complet : case « Envoyer aussi au client » jdReplyPublic par défaut off) - Vérifié en aperçu sur un job AVEC courriel client : le composeur s'ouvre en « Note interne » Co-Authored-By: Claude Opus 4.8 --- apps/ops/src/pages/PlanificationPage.vue | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index 80eaed1..1886483 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -359,15 +359,15 @@
Conversation client ({{ sheetThread.messages.length }})
- +
- + - +
- {{ noteMode ? 'Note interne épinglée au job — jamais envoyée au client' : (replyChannel.ok ? ('Envoyée au client par ' + replyChannel.label + (jobSheet.job.legacy_ticket_id ? ' · consignée au ticket' : '')) : 'Aucun courriel/téléphone au dossier client') }} + {{ noteMode ? 'Note interne — ajoutée au fil du ticket, jamais envoyée au client' : (replyChannel.ok ? ('⚠ ENVOYÉE au client par ' + replyChannel.label + (jobSheet.job.legacy_ticket_id ? ' · consignée au ticket' : '')) : 'Aucun courriel/téléphone au dossier client') }}
@@ -5499,7 +5499,7 @@ async function loadSheetThread (j) { } catch (e) { /* fil indisponible */ } if (jobSheet.job && jobSheet.job.name === tok) sheetThread.loading = false } -function openJobSheet (j, opts) { jobSheet.job = j; snoozeDate.value = addDaysISO(todayISO(), 7); sheetNoteText.value = j.notes || ''; postDraft.value = ''; noteMode.value = !!(opts && opts.note); serviceCheck.done = false; serviceCheck.loading = false; jobSheet.open = true; loadSheetThread(j) } +function openJobSheet (j, opts) { jobSheet.job = j; snoozeDate.value = addDaysISO(todayISO(), 7); sheetNoteText.value = j.notes || ''; postDraft.value = ''; noteMode.value = !(opts && opts.reply); /* défaut SÛR : commentaire INTERNE (jamais un courriel accidentel) — « Répondre au client » = bascule explicite */ serviceCheck.done = false; serviceCheck.loading = false; jobSheet.open = true; loadSheetThread(j) } // Auto-save de la note à la FERMETURE de la feuille (X · clic extérieur · bouton Fermer · Échap) — uniquement si modifiée. Plus de bouton Enregistrer. function onJobSheetHide () { const j = jobSheet.job; if (j && (sheetNoteText.value || '') !== (j.notes || '')) patchJob(j, { notes: sheetNoteText.value || '' }, 'Note enregistrée') } function openNote (j) { noteDialog.job = j; noteDialog.text = j.notes || ''; noteDialog.open = true }