Checkpoint: Ajout de "Tous" dans la liste des publics cible pour les séquences. Modifications apportées :

 Base de données : enum publicCible mis à jour avec la valeur "tous"

 Frontend mis à jour dans 4 fichiers :
- AdminSequences.tsx : ajout de "tous" dans les types TypeScript, options de sélection et badges (couleur violet)
- AdminSequenceInscrits.tsx : ajout de "tous" dans les fonctions de labels et badges
- AdminRapportPublicCible.tsx : ajout de "tous" dans les fonctions de labels et badges
- Inscription.tsx : ajout de "tous" dans le mapping, l'affichage et la logique d'alerte (pas d'alerte si public cible = "Tous")

Les séquences peuvent maintenant être créées avec le public cible "Tous", ce qui permet de cibler tous les profils sans distinction.
This commit is contained in:
Manus Sandbox
2025-11-19 09:09:31 -05:00
parent 61d64c365b
commit b72a9c471c
10 changed files with 816 additions and 7 deletions

View File

@@ -62,6 +62,7 @@ export default function AdminRapportPublicCible() {
const labels = {
directeur: "Directeur",
chef_service: "Chef de service",
tous: "Tous",
autre: "Autre",
};
return labels[publicCible as keyof typeof labels] || "Autre";
@@ -71,6 +72,7 @@ export default function AdminRapportPublicCible() {
const colors = {
directeur: "bg-blue-100 text-blue-800",
chef_service: "bg-green-100 text-green-800",
tous: "bg-purple-100 text-purple-800",
autre: "bg-gray-100 text-gray-800",
};
return colors[publicCible as keyof typeof colors] || colors.autre;

View File

@@ -21,6 +21,7 @@ export default function AdminSequenceInscrits() {
const colors = {
directeur: "bg-blue-100 text-blue-800",
chef_service: "bg-green-100 text-green-800",
tous: "bg-purple-100 text-purple-800",
autre: "bg-gray-100 text-gray-800",
};
return colors[publicCible as keyof typeof colors] || colors.autre;
@@ -30,6 +31,7 @@ export default function AdminSequenceInscrits() {
const labels = {
directeur: "Directeur",
chef_service: "Chef de service",
tous: "Tous",
autre: "Autre",
};
return labels[publicCible as keyof typeof labels] || "Autre";

View File

@@ -34,7 +34,7 @@ export default function AdminSequences() {
formationId: "",
nom: "",
lieu: "",
publicCible: "autre" as "directeur" | "chef_service" | "autre",
publicCible: "autre" as "directeur" | "chef_service" | "tous" | "autre",
capaciteMax: "12",
dateBlocage: "",
statut: "ouverte" as "ouverte" | "bloquee" | "terminee",
@@ -292,6 +292,7 @@ export default function AdminSequences() {
const colors = {
directeur: "bg-blue-100 text-blue-800",
chef_service: "bg-green-100 text-green-800",
tous: "bg-purple-100 text-purple-800",
autre: "bg-gray-100 text-gray-800",
};
return colors[publicCible as keyof typeof colors] || colors.autre;
@@ -301,6 +302,7 @@ export default function AdminSequences() {
const labels = {
directeur: "Directeur",
chef_service: "Chef de service",
tous: "Tous",
autre: "Autre",
};
return labels[publicCible as keyof typeof labels] || "Autre";
@@ -378,7 +380,7 @@ export default function AdminSequences() {
<Label htmlFor="publicCible">Public cible *</Label>
<Select
value={formData.publicCible}
onValueChange={(value: "directeur" | "chef_service" | "autre") => setFormData({ ...formData, publicCible: value })}
onValueChange={(value: "directeur" | "chef_service" | "tous" | "autre") => setFormData({ ...formData, publicCible: value })}
>
<SelectTrigger id="publicCible">
<SelectValue placeholder="Sélectionner le public cible" />
@@ -386,6 +388,7 @@ export default function AdminSequences() {
<SelectContent>
<SelectItem value="directeur">Directeur</SelectItem>
<SelectItem value="chef_service">Chef de service</SelectItem>
<SelectItem value="tous">Tous</SelectItem>
<SelectItem value="autre">Autre</SelectItem>
</SelectContent>
</Select>

View File

@@ -68,12 +68,15 @@ export default function Inscription() {
const publicCibleMap: Record<string, string> = {
"directeur": "directeur",
"chef_service": "chef_service",
"tous": "tous",
"autre": "autre"
};
if (publicCibleMap[selectedSequence.publicCible] !== formData.fonction) {
// Si le public cible est "tous", ne pas afficher d'alerte
if (selectedSequence.publicCible !== "tous" && publicCibleMap[selectedSequence.publicCible] !== formData.fonction) {
const publicCibleLabel = selectedSequence.publicCible === "directeur" ? "Directeurs" :
selectedSequence.publicCible === "chef_service" ? "Chefs de service" : "Autre";
selectedSequence.publicCible === "chef_service" ? "Chefs de service" :
selectedSequence.publicCible === "tous" ? "Tous" : "Autre";
const fonctionLabel = formData.fonction === "directeur" ? "Directeur" :
formData.fonction === "chef_service" ? "Chef de service" : "Autre";
@@ -300,7 +303,7 @@ export default function Inscription() {
</div>
<div className="flex items-center gap-2">
<Users className="w-4 h-4" />
<span>Public cible : {sequence.publicCible === "directeur" ? "Directeurs" : sequence.publicCible === "chef_service" ? "Chefs de service" : "Autre"}</span>
<span>Public cible : {sequence.publicCible === "directeur" ? "Directeurs" : sequence.publicCible === "chef_service" ? "Chefs de service" : sequence.publicCible === "tous" ? "Tous" : "Autre"}</span>
</div>
<div className="flex items-center gap-2">
<Users className="w-4 h-4" />