You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
8.9 KiB
240 lines
8.9 KiB
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<UserController>();
|
|
|
|
Future<void> 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<UserController>(
|
|
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','create']);
|
|
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();
|
|
},
|
|
),
|
|
],
|
|
);
|
|
},
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|