gigafibre-fsm/apps/ops/src/components/shared
louispaulb 6bf323b18e fix(ops): champ d'assignation — échelle d'implication + bascules « moi » + fix lecture équipe
Refonte du modèle d'interaction (retour user) + correction du bug d'affichage des assistants.

Bug corrigé (racine = hub) : getJobTeam lisait le doctype-enfant « Dispatch Job Assistant »
via erp.list → PermissionError pour le compte de service → renvoyait [] en silence. Résultat :
chips assistants jamais affichées, tech non exclu de l'autosuggest, et POST add/remove partait
de [] → écrasait les assistants existants. Fix : lire `assistants` VIA LE DOC PARENT (child table
embarquée, sans vérif de perm sur l'enfant). Vérifié : getJobTeam(LEG-253958) renvoie l'assistant.

Nouveau modèle (AssignmentField) :
- UN champ « Ajouter un participant » (techs + compétences en tête, puis tous les utilisateurs).
  1er ajouté = assigné/lead ; suivants = assistant par défaut.
- Échelle d'implication par personne (menu sur la chip) : Suiveur ‹ Assistant ‹ Sur place (équipe).
  · Suiveur (#) = reçoit les MàJ, hors équipe (/conversations/follow).
  · Assistant (CC) = sur l'équipe, SANS bloc horaire (Dispatch Job Assistant pinned=0).
  · Sur place = assistant AVEC bloc réservé dans son horaire (pinned=1) — masqué sur ticket (can-onsite=false).
- « Assist » / « Suivre » deviennent des BASCULES sur l'utilisateur connecté (moi), plus des liens d'expansion.
- Suivi keyé par courriel si connu, sinon tech_id (repli).

Câblage : PlanificationPage jdSetAssistant({value,label,onsite}) → addAssistant pinned=onsite?1:0
(le hub `add` remplace la ligne du même tech → sert aussi à changer de niveau). IssueDetail : can-onsite=false.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 17:40:36 -04:00
..
conversation feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
detail-sections fix(ops): champ d'assignation — échelle d'implication + bascules « moi » + fix lecture équipe 2026-07-08 17:40:36 -04:00
AddToTaskDialog.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
AssignmentField.vue fix(ops): champ d'assignation — échelle d'implication + bascules « moi » + fix lecture équipe 2026-07-08 17:40:36 -04:00
ConversationPanel.vue fix(ops): sécurité + robustesse dispatch/comms 2026-07-02 08:56:35 -04:00
CreateInvoiceModal.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
DataTable.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
DetailModal.vue fix(ops): device detail modal responsive on mobile 2026-07-04 22:41:15 -04:00
DynamicFilter.vue feat(ui): T5 audit — composant DynamicFilter réutilisable + intégré sur Clients 2026-07-04 19:13:37 -04:00
EmptyState.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
InlineField.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
InterveneDialog.vue feat: suivi généralisé, occupation ressources, horaire tech, revert journal 2026-07-08 12:40:22 -04:00
MessageList.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
NotificationBell.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
OccupancyStrip.vue fix(ops/mobile): bandes d'occupation ≤7 jours remplissent la largeur (fini le micro-défilement) 2026-07-04 20:58:43 -04:00
OrchestratorDialog.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
OutageAlertsPanel.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
OutboxPanel.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
PageHeader.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
PipelineBoard.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
ProjectWizard.vue ops : priorités 3 niveaux (source unique) + compétences multi + création unifiée + planif 2026-07-07 20:46:57 -04:00
QuoteWizard.vue ops : priorités 3 niveaux (source unique) + compétences multi + création unifiée + planif 2026-07-07 20:46:57 -04:00
ReaderStack.vue feat(fsm): platform build — comms UI, F→ERPNext sync/billing, roster, campaigns, network, reports 2026-06-15 06:12:12 -04:00
RecipientSelect.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
RecurrenceSelector.vue feat: dispatch planning mode, offer pool, shared presets, recurrence selector 2026-04-08 22:44:18 -04:00
ReportScaffold.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
RouteMap.vue ops: MapLibre/OSM basemap (drop Mapbox) + satellite toggle, unified Créer flow, wizard pricing, infra-first reverse client 2026-07-06 21:52:14 -04:00
ServiceStatusDialog.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
StatCard.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
TableSkeleton.vue feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
TagEditor.vue feat(dispatch): skill PRIORITY ordering per tech (specialists first) 2026-07-02 10:50:51 -04:00
TaskNode.vue ops : types de job = source unique (config/job-types) 2026-07-07 21:27:32 -04:00
TechSelect.vue feat(ops): champ d'assignation MULTIFONCTION (À / CC / #) partagé 2026-07-08 16:49:57 -04:00
TicketStatusControl.vue #27 Standardise ticket-detail rendering (status / tags / row component) 2026-07-08 14:31:39 -04:00
UnifiedCreateModal.vue ops : types de job = source unique (config/job-types) 2026-07-07 21:27:32 -04:00
WeeklyScheduleEditor.vue planif: horaires (lot) — recherche/skill/tout-aucun ; grille 2 sem. par défaut (sélecteur retiré) 2026-07-07 12:56:17 -04:00