Skip to content
Snippets Groups Projects
Commit 682feeeb authored by RENAULT Juliette's avatar RENAULT Juliette
Browse files

modif statut : ne permet de modifier plus que le BDX

modif de upgradeProfile : ne modifie plus les présidents, prends juste en compte les BDX
parent 3119071e
No related branches found
No related tags found
No related merge requests found
......@@ -13,19 +13,24 @@ class ModStatut extends StatefulWidget {
}
class _ModStatutState extends State<ModStatut> {
DatabaseService data = DatabaseService();
List<String> _selectedStatuts = [];
List<String> _selectedBDX = [];
List<String> _bdxOptions = ['BDE', 'BDA', 'BDS', 'BDD'];
List<String> listClub = [];
List<String> clubsOptions = [];
Map<String, dynamic> clubsMap = {};
bool canSubmit = false;
@override
void initState() {
super.initState();
_fetchClubs();
// Initialisation des statuts sélectionnés
if (widget.profilData['statut'] != null) {
if (widget.profilData['statut']?.containsKey('president') ?? false) { // Si il y a président comme clé dans statut
if (widget.profilData['statut']?.containsKey('president') ?? false) {
_selectedStatuts.add('president');
for (String club in widget.profilData['statut']['president']) {
listClub.add(club);
......@@ -43,13 +48,18 @@ class _ModStatutState extends State<ModStatut> {
_validateSubmission();
}
Future<void> _fetchClubs() async {
clubsMap = await data.getClubs();
setState(() {
clubsOptions = clubsMap.values.map((value) => value['nom'].toString()).toList();
});
}
// Fonction pour vérifier la soumission
void _validateSubmission() {
if (_selectedStatuts.contains('BDX')) {
// Si BDX est sélectionné, vérifie si au moins une option parmi BDE, BDA, BDS ou BDD est sélectionnée
canSubmit = _selectedBDX.isNotEmpty;
} else {
// Si BDX n'est pas sélectionné, la soumission est toujours possible
canSubmit = true;
}
}
......@@ -73,20 +83,8 @@ class _ModStatutState extends State<ModStatut> {
'Choisissez le nouveau statut (ne rien cocher pour un utilisateur standard)',
style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold),
),
CheckboxListTile(
title: Text('Président'),
value: _selectedStatuts.contains('president'),
onChanged: (bool? value) {
setState(() {
if (value != null && value) {
_selectedStatuts.add('president');
} else {
_selectedStatuts.remove('president');
}
});
},
),
CheckboxListTile( // Si BDX coché alors on affiche les autres boutons
title: Text('BDX'),
value: _selectedStatuts.contains('BDX'),
onChanged: (bool? value) {
......@@ -98,7 +96,6 @@ class _ModStatutState extends State<ModStatut> {
_selectedStatuts.removeWhere((option) => _bdxOptions.contains(option));
_selectedBDX.clear();
}
// Vérifiez la soumission à chaque changement
_validateSubmission();
});
},
......@@ -115,7 +112,6 @@ class _ModStatutState extends State<ModStatut> {
} else {
_selectedBDX.remove(option);
}
// Vérifiez la soumission à chaque changement
_validateSubmission();
});
},
......@@ -129,14 +125,14 @@ class _ModStatutState extends State<ModStatut> {
if (status == 'BDX') {
selectedStatusMap[status] = _selectedBDX;
} else {
selectedStatusMap[status] = listClub;
selectedStatusMap[status] = [];
}
}
print("nouveau statut : $selectedStatusMap");
// Lien avec la base de données
DatabaseService database = DatabaseService();
database.upgradeProfile(widget.idProfil, selectedStatusMap);
database.upgradeProfile(widget.idProfil, _selectedBDX);
Navigator.pop(context);
})
],
......
......
......@@ -676,8 +676,6 @@ class DatabaseService {
//Fonctions en rapport avec la collection Profils
//collection reference
//création de la base de donnée des profils
......@@ -882,159 +880,28 @@ class DatabaseService {
}
Future<void> upgradeProfile(String id, Map<String, List<String>>? statut) async {
// Vérifier si statut est nul
if (statut == null) {
throw Exception("Le statut est null.");
}
// Vérifier si l'ID existe dans la base de données des profils
final profileDoc = await profileCollection.doc(id).get();
if (!profileDoc.exists) {
throw Exception(
"Le profil avec l'ID $id n'existe pas dans la base de données.");
}
try {
// Vérifier si le statut contient président ou coprésident
if (statut.containsKey('president') ||
statut.containsKey("copresident")) {
List<String> presidentList = statut['president'] ?? [];
List<String> copresidentList = statut['copresident'] ?? [];
// Combinez les listes de présidents et de coprésidents pour couvrir tous les cas
List<String> allPresidents = [...presidentList, ...copresidentList];
// Liste des anciens clubs dont l'utilisateur était président avant la mise à jour
List<String> oldPresidentClubs = [];
// Récupérer les anciens clubs dont l'utilisateur était président
QuerySnapshot oldPresidentsQuerySnapshot = await PresidentCollection
.where('idProfil', isEqualTo: "/Profils/$id").get();
oldPresidentsQuerySnapshot.docs.forEach((doc) {
oldPresidentClubs.add(doc['idClub'].id);
});
// Supprimer les documents dans la collection Presidents pour les clubs dont l'utilisateur n'est plus président
List<String> clubsToRemove = oldPresidentClubs.where((
clubId) => !allPresidents.contains(clubId)).toList();
for (String clubId in clubsToRemove) {
QuerySnapshot docsToRemoveQuerySnapshot = await PresidentCollection
.where('idProfil', isEqualTo: "/Profils/$id").where(
'idClub', isEqualTo: clubCollection.doc(clubId)).get();
docsToRemoveQuerySnapshot.docs.forEach((doc) async {
await doc.reference.delete();
print(
"Document removed from Presidents collection successfully for club $clubId!");
});
}
// Ajouter les nouveaux clubs dont l'utilisateur est président à la collection Presidents
for (String clubName in allPresidents) {
if (!oldPresidentClubs.contains(clubName)) {
QuerySnapshot clubQuerySnapshot = await clubCollection.where(
'nom', isEqualTo: clubName).get();
// Vérifier si le club a été trouvé
if (clubQuerySnapshot.docs.isEmpty) {
throw Exception(
"Le club avec le nom $clubName n'existe pas dans la base de données.");
}
// Récupérer le document du club
DocumentSnapshot clubData = clubQuerySnapshot.docs.first;
// Déterminer le type en fonction du rôle dans le club
String type = statut.containsKey("copresident")
? "co"
: "president";
// Ajouter un document à la collection Presidents
try {
await PresidentCollection.add({
"idProfil": "/Profils/$id", // Référence au document de profil
"idClub": clubData.reference, // Référence au document de club
"type": type,
});
print(
"Document added to Presidents collection successfully for club $clubName!");
} catch (e) {
print(
"Error adding document to Presidents collection for club $clubName: $e");
throw Exception(
"Une erreur est survenue lors de l'ajout du profil à la collection Presidents pour le club $clubName.");
}
}
}
} else {
// Si l'utilisateur n'est plus président d'aucun club, supprimer tous ses documents dans la collection Presidents
QuerySnapshot docsToRemoveQuerySnapshot = await PresidentCollection
.where('idProfil', isEqualTo: "/Profils/$id").get();
docsToRemoveQuerySnapshot.docs.forEach((doc) async {
Future<void> upgradeProfile(String id, List<String> bdxList) async {
// Supprimer les anciens documents dans la collection BDX pour les BDX dont l'utilisateur n'est plus membre
QuerySnapshot oldBDXQuerySnapshot = await BDXCollection
.where('uid', isEqualTo: "/Profils/$id").get();
oldBDXQuerySnapshot.docs.forEach((doc) async {
if (!bdxList.contains(doc['nomBDX'])) {
await doc.reference.delete();
print(
"Document removed from Presidents collection successfully for club ${doc['idClub']
.id}!");
});
print("Document removed from BDX collection successfully for BDX ${doc['nomBDX']}!");
}
print("DocumentSnapshot successfully updated!");
// Vérifier si le statut contient BDX
if (statut.containsKey('BDX')) {
List<String> bdxList = statut['BDX'] ?? [];
// Liste des anciens BDX dont l'utilisateur était membre avant la mise à jour
List<String> oldBDX = [];
// Récupérer les anciens BDX dont l'utilisateur était membre
QuerySnapshot oldBDXQuerySnapshot =
await BDXCollection.where('uid', isEqualTo: "/Profils/$id").get();
oldBDXQuerySnapshot.docs.forEach((doc) {
oldBDX.add(doc["nomBDX"]);
});
// Supprimer les documents dans la collection BDX pour les BDX dont l'utilisateur n'est plus membre
List<String> bdxToRemove = oldBDX.where((nomBDX) =>
!bdxList.contains(nomBDX)).toList();
for (String nomBDX in bdxToRemove) {
QuerySnapshot docsToRemoveQuerySnapshot = await BDXCollection
.where('uid', isEqualTo: "/Profils/$id")
.where('nomBDX', isEqualTo: nomBDX)
.get();
docsToRemoveQuerySnapshot.docs.forEach((doc) async {
await doc.reference.delete();
print(
"Document removed from BDX collection successfully for BDX $nomBDX!");
});
}
// Ajouter les nouveaux BDX dont l'utilisateur est membre à la collection BDX
for (String nomBDX in bdxList) {
if (!oldBDX.contains(nomBDX)) {
// Ajouter un document à la collection BDX
try {
await BDXCollection.add({
"uid": "/Profils/$id",
"nomBDX": nomBDX, // Correction ici
await BDXCollection.doc().set({
"uid": profileCollection.doc(id), // Utiliser la référence au document de profil
"nomBDX": nomBDX,
});
print(
"Document added to BDX collection successfully for BDX $nomBDX!");
} catch (e) {
print(
"Error adding document to BDX collection for BDX $nomBDX: $e");
throw Exception(
"Une erreur est survenue lors de l'ajout du profil à la collection BDX pour le BDX $nomBDX.");
}
}
}
}
} catch (e) {
print("Error updating document: $e");
throw Exception(
"Une erreur est survenue lors de la mise à jour du statut du profil.");
print("Document added to BDX collection successfully for BDX $nomBDX!");
}
}
Future<Map<String, dynamic>> getClubsfromUid(String userId) async {
Map<String, dynamic> clubdata = {};
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment