import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:youmazgestion/Views/historique.dart'; import 'package:youmazgestion/Views/addProduct.dart'; import 'package:youmazgestion/Views/bilanMois.dart'; import 'package:youmazgestion/Views/gestionProduct.dart'; import 'package:youmazgestion/Views/gestionStock.dart'; import 'package:youmazgestion/Views/listUser.dart'; import 'package:youmazgestion/Views/loginPage.dart'; import 'package:youmazgestion/Views/registrationPage.dart'; import 'package:youmazgestion/Views/gestionRole.dart'; import 'package:youmazgestion/accueil.dart'; import 'package:youmazgestion/controller/userController.dart'; class CustomDrawer extends StatelessWidget { final UserController userController = Get.find(); Future clearUserData() async { final prefs = await SharedPreferences.getInstance(); await prefs.remove('username'); await prefs.remove('role'); } CustomDrawer({super.key}); @override Widget build(BuildContext context) { return Drawer( backgroundColor: Colors.white, child: ListView( children: [ GetBuilder( builder: (controller) => UserAccountsDrawerHeader( accountEmail: Text(controller.email), accountName: Text(controller.name), currentAccountPicture: const CircleAvatar( backgroundImage: AssetImage("assets/youmaz2.png"), ), decoration: const BoxDecoration( gradient: LinearGradient( colors: [Colors.white, Color.fromARGB(255, 4, 54, 95)], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), ), ), ListTile( leading: const Icon(Icons.home), iconColor: Colors.lightBlueAccent, title: const Text("Accueil"), onTap: () { Get.to(const AccueilPage()); }, ), ListTile( leading: const Icon(Icons.person_add), iconColor: Colors.green, title: const Text("Ajouter un utilisateur"), onTap: () async { bool hasPermission = await userController.hasAnyPermission(['create']); if (hasPermission) { Get.to(const RegistrationPage()); } else { Get.snackbar( "Accès refusé", "Vous n'avez pas les droits pour ajouter un utilisateur", backgroundColor: Colors.red, colorText: Colors.white, icon: const Icon(Icons.error), duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, ); } }, ), ListTile( leading: const Icon(Icons.supervised_user_circle), iconColor: const Color.fromARGB(255, 4, 54, 95), title: const Text("Modifier/Supprimer un utilisateur"), onTap: () async { bool hasPermission = await userController.hasAnyPermission(['update', 'delete']); if (hasPermission) { Get.to(const ListUserPage()); } else { Get.snackbar( "Accès refusé", "Vous n'avez pas les droits pour modifier/supprimer un utilisateur", backgroundColor: Colors.red, colorText: Colors.white, icon: const Icon(Icons.error), duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, ); } }, ), ListTile( leading: const Icon(Icons.add), iconColor: Colors.indigoAccent, title: const Text("Ajouter un produit"), onTap: () async { bool hasPermission = await userController.hasAnyPermission(['create']); if (hasPermission) { Get.to(const AddProductPage()); } else { Get.snackbar( "Accès refusé", "Vous n'avez pas les droits pour ajouter un produit", backgroundColor: Colors.red, colorText: Colors.white, icon: const Icon(Icons.error), duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, ); } }, ), ListTile( leading: const Icon(Icons.edit), iconColor: Colors.redAccent, title: const Text("Modifier/Supprimer un produit"), onTap: () async { bool hasPermission = await userController.hasAnyPermission(['update', 'delete']); if (hasPermission) { Get.to(GestionProduit()); } else { Get.snackbar( "Accès refusé", "Vous n'avez pas les droits pour modifier/supprimer un produit", backgroundColor: Colors.red, colorText: Colors.white, icon: const Icon(Icons.error), duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, ); } }, ), ListTile( leading: const Icon(Icons.bar_chart), title: const Text("Bilan"), onTap: () async { bool hasPermission = await userController.hasAnyPermission(['read']); if (hasPermission) { Get.to(const BilanMois()); } else { Get.snackbar( "Accès refusé", "Vous n'avez pas les droits pour accéder au bilan", backgroundColor: Colors.red, colorText: Colors.white, icon: const Icon(Icons.error_outline_outlined), duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, ); } }, ), ListTile( leading: const Icon(Icons.warning_amber), title: const Text("Gérer les rôles"), onTap: () async { bool hasPermission = await userController.hasAnyPermission(['update', 'delete']); if (hasPermission) { Get.to(const HandleUserRole()); } else { Get.snackbar( "Accès refusé", "Vous n'avez pas les droits pour gérer les rôles", backgroundColor: Colors.red, colorText: Colors.white, icon: const Icon(Icons.error_outline_outlined), duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, ); } }, ), ListTile( leading: const Icon(Icons.inventory), iconColor: Colors.blueAccent, title: const Text("Gestion de stock"), onTap: () async { bool hasPermission = await userController.hasAnyPermission(['update']); if (hasPermission) { Get.to(const GestionStockPage()); } else { Get.snackbar( "Accès refusé", "Vous n'avez pas les droits pour accéder à la gestion de stock", backgroundColor: Colors.red, colorText: Colors.white, icon: const Icon(Icons.error), duration: const Duration(seconds: 3), snackPosition: SnackPosition.TOP, ); } }, ), ListTile( leading: const Icon(Icons.history), iconColor: Colors.blue, title: const Text("Historique"), onTap: () { Get.to(HistoryPage()); }, ), ListTile( leading: const Icon(Icons.logout), iconColor: Colors.red, title: const Text("Déconnexion"), onTap: () { Get.defaultDialog( title: "Déconnexion", content: const Text("Voulez-vous vraiment vous déconnecter ?"), actions: [ ElevatedButton( child: const Text("Oui"), onPressed: () { clearUserData(); Get.offAll(const LoginPage()); }, ), ElevatedButton( child: const Text("Non"), onPressed: () { Get.back(); }, ), ], ); }, ), ], ), ); } }