gigafibre-fsm/apps/ops
louispaulb 608a525038 Events: segment checkboxes for the reminder ("not opened"/"opened"/"clicked")
The reminder previously always targeted everyone not yet registered as one
fixed group. Staff can now pick which engagement segments to include:

- reminderCandidates()/reminderSend() (events.js) accept an optional
  `segments` filter (subset of sent/opened/clicked, matching the original
  invitation's per-recipient status). `breakdown` always reports the FULL
  unfiltered counts so the UI can show each checkbox's true count
  regardless of what's checked; `candidates`/`count` reflect the filter —
  what actually gets sent.
- New routes accept it: GET reminder-preview?segments=a,b and POST
  reminder-send {segments:[...]}.
- EventsPage.vue Rappel tab: the flat breakdown chips became checkboxes
  (all checked by default = prior behavior), with a live target count and
  a client-side-filtered recipient preview.
- CampaignDetailPage.vue: new "Relancer les non-inscrits" button for any
  event-type send — same checkbox/count/confirm flow in a compact dialog,
  without leaving the campaign page. Targets that campaign directly (no
  source picker needed, unlike the Events-page flow which can target any
  past send for the event).

Verified live: segment-filtered preview against the real production
campaign (2,295 total non-registered -> 708 when limited to opened+clicked,
correctly excluding the 1,587 who never opened).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 12:18:56 -04:00
..
.quasar feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
infra Events: creation, capacity cap, language-tagged attachments, additive audience list 2026-07-09 10:10:43 -04:00
public/icons feat: add ops app + CONTEXT.md, simplify URL to /ops/ 2026-03-30 22:41:58 -04:00
src Events: segment checkboxes for the reminder ("not opened"/"opened"/"clicked") 2026-07-24 12:18:56 -04:00
src-pwa feat: nested tasks, project wizard, n8n webhooks, inline task editing 2026-04-01 13:01:20 -04:00
.env.example feat(hub+ops): user invite flow sends temp password via Mailjet + dev .env.example 2026-05-05 19:50:06 -04:00
.env.production security: harden payments/hub auth + remove leaked ERPNext token from source 2026-06-16 06:17:17 -04:00
.gitignore 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
deploy.sh infra: deploy.sh renders ops nginx.conf from versioned template w/ server-side token injection 2026-07-08 15:59:48 -04:00
index.html feat: add ops app + CONTEXT.md, simplify URL to /ops/ 2026-03-30 22:41:58 -04:00
knip.json feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
package-lock.json 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
package.json 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
quasar.config.js 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