diff --git a/lib/admin/class/association_membership_simple.dart b/lib/admin/class/association_membership_simple.dart index 8a0943a5ae..6a05982ba9 100644 --- a/lib/admin/class/association_membership_simple.dart +++ b/lib/admin/class/association_membership_simple.dart @@ -3,15 +3,18 @@ class AssociationMembership { required this.id, required this.name, required this.managerGroupId, + required this.templateId, }); late final String id; late final String name; late final String managerGroupId; + late final String? templateId; AssociationMembership.fromJson(Map json) { id = json['id']; name = json['name']; managerGroupId = json['manager_group_id']; + templateId = json['template_id']; } Map toJson() { @@ -19,6 +22,7 @@ class AssociationMembership { data['id'] = id; data['name'] = name; data['manager_group_id'] = managerGroupId; + data['template_id'] = templateId; return data; } @@ -26,20 +30,45 @@ class AssociationMembership { String? id, String? name, String? managerGroupId, + String? templateId, }) => AssociationMembership( id: id ?? this.id, name: name ?? this.name, managerGroupId: managerGroupId ?? this.managerGroupId, + templateId: templateId ?? this.templateId, ); AssociationMembership.empty() { id = ''; name = "Pas d'adhésion"; managerGroupId = ''; + templateId = ''; } @override String toString() { - return 'AssociationMembership(id: $id, name: $name, groupId: $managerGroupId)'; + return 'AssociationMembership(id: $id, name: $name, groupId: $managerGroupId, templateId: $templateId)'; + } +} + +class AssociationMembershipRenewDocumentsReturn { + AssociationMembershipRenewDocumentsReturn({required this.errors}); + late final Map errors; + + AssociationMembershipRenewDocumentsReturn.fromJson( + Map json, + ) { + errors = Map.from(json['errors'] ?? {}); + } + + Map toJson() { + final data = {}; + data['errors'] = errors; + return data; + } + + @override + String toString() { + return 'AssociationMembershipRenewDocumentsReturn(errors: $errors)'; } } diff --git a/lib/admin/class/user_association_membership.dart b/lib/admin/class/user_association_membership.dart index 1aab569848..613995d343 100644 --- a/lib/admin/class/user_association_membership.dart +++ b/lib/admin/class/user_association_membership.dart @@ -9,6 +9,8 @@ class UserAssociationMembership extends UserAssociationMembershipBase { required super.startDate, required super.endDate, required this.user, + required super.documentId, + required super.documentStatus, }); late final SimpleUser user; @@ -32,6 +34,8 @@ class UserAssociationMembership extends UserAssociationMembershipBase { String? userId, DateTime? startDate, DateTime? endDate, + String? documentId, + DocumentStatus? documentStatus, SimpleUser? user, }) { return UserAssociationMembership( @@ -41,12 +45,14 @@ class UserAssociationMembership extends UserAssociationMembershipBase { userId: userId ?? this.userId, startDate: startDate ?? this.startDate, endDate: endDate ?? this.endDate, + documentId: documentId ?? this.documentId, + documentStatus: documentStatus ?? this.documentStatus, user: user ?? this.user, ); } @override String toString() { - return "UserAssociationMembership {id: $id, associationMembershipId: $associationMembershipId, userId: $userId, startDate: $startDate, endDate: $endDate}"; + return "UserAssociationMembership {id: $id, associationMembershipId: $associationMembershipId, userId: $userId, startDate: $startDate, endDate: $endDate, documentId: $documentId, documentStatus: $documentStatus, user: $user}"; } } diff --git a/lib/admin/class/user_association_membership_base.dart b/lib/admin/class/user_association_membership_base.dart index 9c1318fe71..32f1a5ba88 100644 --- a/lib/admin/class/user_association_membership_base.dart +++ b/lib/admin/class/user_association_membership_base.dart @@ -1,5 +1,7 @@ import 'package:titan/tools/functions.dart'; +enum DocumentStatus { pending, approved, rejected } + class UserAssociationMembershipBase { UserAssociationMembershipBase({ required this.id, @@ -7,12 +9,16 @@ class UserAssociationMembershipBase { required this.userId, required this.startDate, required this.endDate, + required this.documentId, + required this.documentStatus, }); late final String id; late final String associationMembershipId; late final String userId; late final DateTime startDate; late final DateTime endDate; + late final String? documentId; + late final DocumentStatus? documentStatus; UserAssociationMembershipBase.fromJson(Map json) { id = json['id']; @@ -20,6 +26,12 @@ class UserAssociationMembershipBase { userId = json['user_id']; startDate = processDateFromAPI(json['start_date']); endDate = processDateFromAPI(json['end_date']); + documentId = json['document_id']; + documentStatus = json['document_status'] != null + ? DocumentStatus.values.firstWhere( + (e) => e.name == json['document_status'].toString().toLowerCase(), + ) + : null; } Map toJson() { @@ -34,6 +46,9 @@ class UserAssociationMembershipBase { userAssociationMembership['end_date'] = processDateToAPIWithoutHour( endDate, ); + userAssociationMembership['document_id'] = documentId; + userAssociationMembership['document_status'] = documentStatus?.name + .toUpperCase(); return userAssociationMembership; } @@ -42,10 +57,12 @@ class UserAssociationMembershipBase { associationMembershipId = '', userId = '', startDate = DateTime(0), - endDate = DateTime(0); + endDate = DateTime(0), + documentId = null, + documentStatus = null; @override String toString() { - return "UserAssociationMembership {id: $id, associationMembershipId: $associationMembershipId, userId: $userId, startDate: $startDate, endDate: $endDate}"; + return "UserAssociationMembership {id: $id, associationMembershipId: $associationMembershipId, userId: $userId, startDate: $startDate, endDate: $endDate, documentId: $documentId, documentStatus: $documentStatus}"; } } diff --git a/lib/admin/notification_service.dart b/lib/admin/notification_service.dart index 42346e87a7..82cf3c27b9 100644 --- a/lib/admin/notification_service.dart +++ b/lib/admin/notification_service.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/router.dart'; import 'package:titan/user/providers/user_provider.dart'; diff --git a/lib/admin/providers/all_account_types_list_provider.dart b/lib/admin/providers/all_account_types_list_provider.dart deleted file mode 100644 index 51bd6ca7ff..0000000000 --- a/lib/admin/providers/all_account_types_list_provider.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:titan/admin/class/account_type.dart'; -import 'package:titan/admin/providers/account_types_list_provider.dart'; - -final allAccountTypes = Provider>((ref) { - return ref - .watch(allAccountTypesListProvider) - .maybeWhen(data: (data) => data, orElse: () => []); -}); diff --git a/lib/admin/providers/all_groups_list_provider.dart b/lib/admin/providers/groups/all_groups_list_provider.dart similarity index 79% rename from lib/admin/providers/all_groups_list_provider.dart rename to lib/admin/providers/groups/all_groups_list_provider.dart index b2e6d14d82..dcd4b22ef0 100644 --- a/lib/admin/providers/all_groups_list_provider.dart +++ b/lib/admin/providers/groups/all_groups_list_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; final allGroupList = Provider>((ref) { return ref diff --git a/lib/admin/providers/group_id_provider.dart b/lib/admin/providers/groups/group_id_provider.dart similarity index 100% rename from lib/admin/providers/group_id_provider.dart rename to lib/admin/providers/groups/group_id_provider.dart diff --git a/lib/admin/providers/group_list_provider.dart b/lib/admin/providers/groups/group_list_provider.dart similarity index 100% rename from lib/admin/providers/group_list_provider.dart rename to lib/admin/providers/groups/group_list_provider.dart diff --git a/lib/admin/providers/group_logo_provider.dart b/lib/admin/providers/groups/group_logo_provider.dart similarity index 100% rename from lib/admin/providers/group_logo_provider.dart rename to lib/admin/providers/groups/group_logo_provider.dart diff --git a/lib/admin/providers/group_provider.dart b/lib/admin/providers/groups/group_provider.dart similarity index 100% rename from lib/admin/providers/group_provider.dart rename to lib/admin/providers/groups/group_provider.dart diff --git a/lib/admin/providers/simple_groups_groups_provider.dart b/lib/admin/providers/groups/simple_groups_groups_provider.dart similarity index 92% rename from lib/admin/providers/simple_groups_groups_provider.dart rename to lib/admin/providers/groups/simple_groups_groups_provider.dart index a9732b8c8d..ccdeba6ec1 100644 --- a/lib/admin/providers/simple_groups_groups_provider.dart +++ b/lib/admin/providers/groups/simple_groups_groups_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:titan/admin/class/group.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/tools/providers/map_provider.dart'; import 'package:titan/tools/token_expire_wrapper.dart'; diff --git a/lib/admin/providers/is_expanded_list_provider.dart b/lib/admin/providers/is_expanded_list_provider.dart deleted file mode 100644 index d835478325..0000000000 --- a/lib/admin/providers/is_expanded_list_provider.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:titan/admin/providers/permission_name_list_provider.dart'; - -class IsExpandedListProvider extends StateNotifier> { - IsExpandedListProvider(List permissionsNames) - : super(List.generate(permissionsNames.length, (index) => false)); - - void toggle(int i) { - var copy = state.toList(); - copy[i] = !copy[i]; - state = copy; - } -} - -final isExpandedListProvider = - StateNotifierProvider>((ref) { - final modules = ref.read(permissionsNamesListProvider); - return modules.maybeWhen( - data: (data) => IsExpandedListProvider(data), - orElse: () { - return IsExpandedListProvider([]); - }, - ); - }); diff --git a/lib/admin/providers/members_provider.dart b/lib/admin/providers/members_provider.dart deleted file mode 100644 index 89ce03fd8e..0000000000 --- a/lib/admin/providers/members_provider.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:titan/user/class/simple_users.dart'; - -class MembersNotifier extends StateNotifier> { - MembersNotifier() : super(const []); - - void add(SimpleUser user) { - state = state.sublist(0)..add(user); - } - - void remove(SimpleUser user) { - state = state.where((element) => element.id != user.id).toList(); - } -} - -final membersProvider = - StateNotifierProvider>( - (ref) => MembersNotifier(), - ); diff --git a/lib/admin/providers/association_membership_filtered_members_provider.dart b/lib/admin/providers/memberships/association_membership_filtered_members_provider.dart similarity index 90% rename from lib/admin/providers/association_membership_filtered_members_provider.dart rename to lib/admin/providers/memberships/association_membership_filtered_members_provider.dart index e74bccbaf7..6b5b7d2a65 100644 --- a/lib/admin/providers/association_membership_filtered_members_provider.dart +++ b/lib/admin/providers/memberships/association_membership_filtered_members_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:titan/admin/class/user_association_membership.dart'; -import 'package:titan/admin/providers/association_membership_members_list_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_members_list_provider.dart'; import 'package:titan/admin/providers/research_filter_provider.dart'; import 'package:diacritic/diacritic.dart'; diff --git a/lib/admin/providers/association_membership_list_provider.dart b/lib/admin/providers/memberships/association_membership_list_provider.dart similarity index 100% rename from lib/admin/providers/association_membership_list_provider.dart rename to lib/admin/providers/memberships/association_membership_list_provider.dart diff --git a/lib/admin/providers/association_membership_members_list_provider.dart b/lib/admin/providers/memberships/association_membership_members_list_provider.dart similarity index 76% rename from lib/admin/providers/association_membership_members_list_provider.dart rename to lib/admin/providers/memberships/association_membership_members_list_provider.dart index 6964dbaec3..383fdc92b4 100644 --- a/lib/admin/providers/association_membership_members_list_provider.dart +++ b/lib/admin/providers/memberships/association_membership_members_list_provider.dart @@ -1,4 +1,5 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:titan/admin/class/association_membership_simple.dart'; import 'package:titan/admin/class/user_association_membership.dart'; import 'package:titan/admin/class/user_association_membership_base.dart'; import 'package:titan/admin/repositories/association_membership_repository.dart'; @@ -35,6 +36,34 @@ class AssociationMembershipMembersNotifier ); } + Future + renewAssociationMembershipDocuments( + String associationMembershipId, + DateTime activeDate, + ) async { + final errors = await associationMembershipRepository + .renewAssociationMembershipDocuments( + associationMembershipId, + activeDate, + ); + await loadList( + () async => associationMembershipRepository + .getAssociationMembershipMembers(associationMembershipId), + ); + return errors; + } + + Future + renewUserMembershipDocuments(String userAssociationMembershipId) async { + final errors = await associationMembershipUserRepository + .renewUserMembershipDocument(userAssociationMembershipId); + await loadList( + () async => associationMembershipRepository + .getAssociationMembershipMembers(userAssociationMembershipId), + ); + return errors; + } + Future addMember( UserAssociationMembershipBase userAssociationMembership, SimpleUser user, @@ -49,6 +78,8 @@ class AssociationMembershipMembersNotifier userId: userAssociationMembership.userId, startDate: userAssociationMembership.startDate, endDate: userAssociationMembership.endDate, + documentId: userAssociationMembership.documentId, + documentStatus: userAssociationMembership.documentStatus, user: user, ), ); diff --git a/lib/admin/providers/association_membership_provider.dart b/lib/admin/providers/memberships/association_membership_provider.dart similarity index 100% rename from lib/admin/providers/association_membership_provider.dart rename to lib/admin/providers/memberships/association_membership_provider.dart diff --git a/lib/admin/providers/memberships/is_membership_admin.dart b/lib/admin/providers/memberships/is_membership_admin.dart new file mode 100644 index 0000000000..2ddd56be8f --- /dev/null +++ b/lib/admin/providers/memberships/is_membership_admin.dart @@ -0,0 +1,17 @@ +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:titan/admin/providers/memberships/association_membership_list_provider.dart'; +import 'package:titan/user/providers/user_provider.dart'; + +final isMembershipAdminProvider = Provider((ref) { + final me = ref.watch(userProvider); + final memberships = ref.watch(allAssociationMembershipListProvider); + return memberships.maybeWhen( + data: (memberships) { + return memberships.any( + (membership) => + me.groups.any((group) => group.id == membership.managerGroupId), + ); + }, + orElse: () => false, + ); +}); diff --git a/lib/admin/providers/user_association_membership_list_provider.dart b/lib/admin/providers/memberships/user_association_membership_list_provider.dart similarity index 100% rename from lib/admin/providers/user_association_membership_list_provider.dart rename to lib/admin/providers/memberships/user_association_membership_list_provider.dart diff --git a/lib/admin/providers/user_association_membership_provider.dart b/lib/admin/providers/memberships/user_association_membership_provider.dart similarity index 100% rename from lib/admin/providers/user_association_membership_provider.dart rename to lib/admin/providers/memberships/user_association_membership_provider.dart diff --git a/lib/admin/providers/structure_manager_provider.dart b/lib/admin/providers/mypayment/structure_manager_provider.dart similarity index 100% rename from lib/admin/providers/structure_manager_provider.dart rename to lib/admin/providers/mypayment/structure_manager_provider.dart diff --git a/lib/admin/providers/structure_provider.dart b/lib/admin/providers/mypayment/structure_provider.dart similarity index 100% rename from lib/admin/providers/structure_provider.dart rename to lib/admin/providers/mypayment/structure_provider.dart diff --git a/lib/admin/providers/account_types_list_provider.dart b/lib/admin/providers/permissions/account_types_list_provider.dart similarity index 100% rename from lib/admin/providers/account_types_list_provider.dart rename to lib/admin/providers/permissions/account_types_list_provider.dart diff --git a/lib/admin/providers/permission_name_list_provider.dart b/lib/admin/providers/permissions/permission_name_list_provider.dart similarity index 100% rename from lib/admin/providers/permission_name_list_provider.dart rename to lib/admin/providers/permissions/permission_name_list_provider.dart diff --git a/lib/admin/providers/permissions_list_provider.dart b/lib/admin/providers/permissions/permissions_list_provider.dart similarity index 98% rename from lib/admin/providers/permissions_list_provider.dart rename to lib/admin/providers/permissions/permissions_list_provider.dart index 796dbbc43e..60707fb6b9 100644 --- a/lib/admin/providers/permissions_list_provider.dart +++ b/lib/admin/providers/permissions/permissions_list_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:titan/admin/class/permissions.dart'; -import 'package:titan/admin/providers/permission_name_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permission_name_list_provider.dart'; import 'package:titan/admin/repositories/permission_repository.dart'; import 'package:titan/auth/providers/openid_provider.dart'; import 'package:titan/tools/providers/list_notifier.dart'; diff --git a/lib/admin/providers/school_id_provider.dart b/lib/admin/providers/schools/school_id_provider.dart similarity index 100% rename from lib/admin/providers/school_id_provider.dart rename to lib/admin/providers/schools/school_id_provider.dart diff --git a/lib/admin/providers/school_list_provider.dart b/lib/admin/providers/schools/school_list_provider.dart similarity index 100% rename from lib/admin/providers/school_list_provider.dart rename to lib/admin/providers/schools/school_list_provider.dart diff --git a/lib/admin/providers/school_provider.dart b/lib/admin/providers/schools/school_provider.dart similarity index 100% rename from lib/admin/providers/school_provider.dart rename to lib/admin/providers/schools/school_provider.dart diff --git a/lib/admin/providers/section_logo_provider.dart b/lib/admin/providers/section_logo_provider.dart deleted file mode 100644 index 61ca4e31f0..0000000000 --- a/lib/admin/providers/section_logo_provider.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/tools/providers/map_provider.dart'; - -class SimpleGroupLogoNotifier extends MapNotifier { - SimpleGroupLogoNotifier() : super(); -} - -final allGroupLogosProvider = - StateNotifierProvider< - SimpleGroupLogoNotifier, - Map>?> - >((ref) { - SimpleGroupLogoNotifier simpleGroupLogoNotifier = - SimpleGroupLogoNotifier(); - return simpleGroupLogoNotifier; - }); diff --git a/lib/admin/repositories/association_membership_repository.dart b/lib/admin/repositories/association_membership_repository.dart index 4b20a78a46..3968beeae9 100644 --- a/lib/admin/repositories/association_membership_repository.dart +++ b/lib/admin/repositories/association_membership_repository.dart @@ -65,6 +65,18 @@ class AssociationMembershipRepository extends Repository { ); } + Future + renewAssociationMembershipDocuments( + String associationMembershipId, + DateTime activeDate, + ) async { + return AssociationMembershipRenewDocumentsReturn.fromJson( + await create({ + "active_date": processDateToAPIWithoutHour(activeDate), + }, suffix: "$associationMembershipId/renew-documents"), + ); + } + Future createAssociationMembership( AssociationMembership associationMembership, ) async { diff --git a/lib/admin/repositories/association_membership_user_repository.dart b/lib/admin/repositories/association_membership_user_repository.dart index ff22deb29a..f6de4540a4 100644 --- a/lib/admin/repositories/association_membership_user_repository.dart +++ b/lib/admin/repositories/association_membership_user_repository.dart @@ -1,4 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:titan/admin/class/association_membership_simple.dart'; import 'package:titan/admin/class/user_association_membership.dart'; import 'package:titan/admin/class/user_association_membership_base.dart'; import 'package:titan/auth/providers/openid_provider.dart'; @@ -48,6 +49,14 @@ class AssociationMembershipUserRepository extends Repository { ); } + Future renewUserMembershipDocument( + String userAssociationMembershipId, + ) async { + return AssociationMembershipRenewDocumentsReturn.fromJson( + await create({}, suffix: "$userAssociationMembershipId/renew-documents"), + ); + } + Future deleteUserMembership(String userAssociationMembershipId) async { return await delete(userAssociationMembershipId); } diff --git a/lib/admin/router.dart b/lib/admin/router.dart index 42bea51569..6c8e4f5f1d 100644 --- a/lib/admin/router.dart +++ b/lib/admin/router.dart @@ -22,12 +22,11 @@ import 'package:titan/admin/ui/pages/schools/add_school_page/add_school_page.dar deferred as add_school_page; import 'package:titan/admin/ui/pages/schools/edit_school_page/edit_school_page.dart' deferred as edit_school_page; -import 'package:titan/admin/ui/pages/structure_page/structure_page.dart' +import 'package:titan/admin/ui/pages/mypayment/structure_page/structure_page.dart' deferred as structure_page; -import 'package:titan/admin/ui/pages/structure_page/add_edit_structure_page/add_edit_structure_page.dart' +import 'package:titan/admin/ui/pages/mypayment/add_edit_structure_page/add_edit_structure_page.dart' deferred as add_edit_structure_page; -import 'package:titan/admin/ui/pages/main_page/main_page.dart' - deferred as main_page; +import 'package:titan/admin/ui/pages/main_page.dart' deferred as main_page; import 'package:titan/tools/middlewares/admin_middleware.dart'; import 'package:titan/tools/middlewares/authenticated_middleware.dart'; import 'package:titan/tools/middlewares/deferred_middleware.dart'; diff --git a/lib/admin/tools/constants.dart b/lib/admin/tools/constants.dart index d89314750f..4b02310404 100644 --- a/lib/admin/tools/constants.dart +++ b/lib/admin/tools/constants.dart @@ -34,10 +34,17 @@ class AdminTextConstants { static const String deleteSchool1 = "Supprimer l'école : "; static const String deleteSchool2 = " ?"; //En deux fois pour ajouter l'école après ("Supprimer l'école : {ecole} ?") + static const String deleteStructure = "Supprimer la structure ?"; static const String deletedSchool = "École supprimée"; + static const String deletedStructure = "Structure supprimée avec succès"; static const String deleting = "Suppression"; + static const String deletingDescription = + "Attention, cette action est irréversible"; static const String deletingError = "Erreur lors de la suppression"; + static const String deletingStructureError = + "Erreur lors de la suppression de la structure"; static const String description = "Description"; + static const String eclSchool = "Centrale Lyon"; static const String edit = "Modifier"; static const String editStructure = "Modifier la structure"; @@ -75,6 +82,19 @@ class AdminTextConstants { static const String removeGroupMember1 = "Supprimer "; static const String removeGroupMember2 = " du groupe ?"; //En deux fois pour ajouter le surnom après ("Supprimer {surnom} du groupe") + static const String renewDocuments = "Renouveler les documents"; + static const String renewedDocuments = + "Le document de l'adhésion a été renouvelé avec succès"; + static const String renewingDocumentConfirmation = + "Êtes-vous sûr de vouloir renouveler le document de cette adhésion ?\nCette opération redemandera une signature à l'utilisateur et rendra l'adhésion inactive en attendant la signature."; + static const String renewingDocumentsConfirmation1 = + "Êtes-vous sûr de vouloir renouveler les documents de cette adhésion pour les adhérents encore actifs le "; + static const String renewingDocumentsConfirmation2 = + " ?\nCette opération redemandera une signature aux utilisateurs et rendra leur adhésion inactive en attendant la signature."; + static const String renewingDocumentTitle = "Renouvellement du document"; + static const String renewingDocumentsTitle = "Renouvellement des documents"; + static const String renewingError = + "Erreur lors du renouvellement du document de l'adhésion"; static const String research = "Recherche"; static const String schools = "Écoles"; static const String structures = "Structures"; @@ -119,13 +139,7 @@ class AdminTextConstants { "Erreur lors de la définition comme titulaire du compte bancaire"; static const String setAsBankAccountHolder = "Définir comme titulaire du compte bancaire"; - static const String deletingDescription = - "Attention, cette action est irréversible"; - static const String deletedStructure = "Structure supprimée avec succès"; - static const String deletingStructureError = - "Erreur lors de la suppression de la structure"; - - static const String deleteStructure = "Supprimer la structure ?"; + static const String templateId = "Identifiant du modèle"; } enum SchoolIdConstant { diff --git a/lib/admin/ui/components/menu_card_ui.dart b/lib/admin/ui/components/menu_card_ui.dart new file mode 100644 index 0000000000..cd78f0c87c --- /dev/null +++ b/lib/admin/ui/components/menu_card_ui.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:heroicons/heroicons.dart'; + +class MenuCardUi extends StatelessWidget { + final String text; + final HeroIcons icon; + final VoidCallback onTap; + const MenuCardUi({ + super.key, + required this.text, + required this.icon, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: onTap, + child: Container( + margin: const EdgeInsets.symmetric(vertical: 10), + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + boxShadow: [ + BoxShadow( + color: Colors.grey.withValues(alpha: 0.2), + blurRadius: 5, + spreadRadius: 2, + ), + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + HeroIcon(icon, color: Colors.grey.shade700, size: 40), + const SizedBox(width: 10), + Text(text, style: const TextStyle(fontSize: 20)), + ], + ), + ), + ); + } +} diff --git a/lib/admin/ui/pages/groups/add_group_page/add_group_page.dart b/lib/admin/ui/pages/groups/add_group_page/add_group_page.dart index a42957311a..4e7b8b4ada 100644 --- a/lib/admin/ui/pages/groups/add_group_page/add_group_page.dart +++ b/lib/admin/ui/pages/groups/add_group_page/add_group_page.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/admin_button.dart'; diff --git a/lib/admin/ui/pages/groups/add_loaner_page/add_loaner_page.dart b/lib/admin/ui/pages/groups/add_loaner_page/add_loaner_page.dart index 058a9e6216..77ea06ed8f 100644 --- a/lib/admin/ui/pages/groups/add_loaner_page/add_loaner_page.dart +++ b/lib/admin/ui/pages/groups/add_loaner_page/add_loaner_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/loan/class/loaner.dart'; diff --git a/lib/admin/ui/pages/groups/edit_group_page/edit_group_page.dart b/lib/admin/ui/pages/groups/edit_group_page/edit_group_page.dart index a906c41534..fbd99e4256 100644 --- a/lib/admin/ui/pages/groups/edit_group_page/edit_group_page.dart +++ b/lib/admin/ui/pages/groups/edit_group_page/edit_group_page.dart @@ -3,10 +3,10 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/group.dart'; -import 'package:titan/admin/providers/group_id_provider.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; -import 'package:titan/admin/providers/group_provider.dart'; -import 'package:titan/admin/providers/simple_groups_groups_provider.dart'; +import 'package:titan/admin/providers/groups/group_id_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_provider.dart'; +import 'package:titan/admin/providers/groups/simple_groups_groups_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/admin_button.dart'; diff --git a/lib/admin/ui/pages/groups/edit_group_page/results.dart b/lib/admin/ui/pages/groups/edit_group_page/results.dart index 9c3709453c..b5782a47fd 100644 --- a/lib/admin/ui/pages/groups/edit_group_page/results.dart +++ b/lib/admin/ui/pages/groups/edit_group_page/results.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/group.dart'; -import 'package:titan/admin/providers/group_provider.dart'; -import 'package:titan/admin/providers/simple_groups_groups_provider.dart'; +import 'package:titan/admin/providers/groups/group_provider.dart'; +import 'package:titan/admin/providers/groups/simple_groups_groups_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/tools/constants.dart'; import 'package:titan/tools/functions.dart'; diff --git a/lib/admin/ui/pages/groups/edit_group_page/search_user.dart b/lib/admin/ui/pages/groups/edit_group_page/search_user.dart index b5655d6577..20d46a01ea 100644 --- a/lib/admin/ui/pages/groups/edit_group_page/search_user.dart +++ b/lib/admin/ui/pages/groups/edit_group_page/search_user.dart @@ -3,9 +3,9 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/group.dart'; -import 'package:titan/admin/providers/group_id_provider.dart'; -import 'package:titan/admin/providers/group_provider.dart'; -import 'package:titan/admin/providers/simple_groups_groups_provider.dart'; +import 'package:titan/admin/providers/groups/group_id_provider.dart'; +import 'package:titan/admin/providers/groups/group_provider.dart'; +import 'package:titan/admin/providers/groups/simple_groups_groups_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/pages/groups/edit_group_page/results.dart'; import 'package:titan/admin/ui/components/user_ui.dart'; diff --git a/lib/admin/ui/pages/groups/group_page/group_page.dart b/lib/admin/ui/pages/groups/group_page/group_page.dart index 601a6d3bce..60d8edaf00 100644 --- a/lib/admin/ui/pages/groups/group_page/group_page.dart +++ b/lib/admin/ui/pages/groups/group_page/group_page.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/group_id_provider.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_id_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/admin/providers/is_admin_provider.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/admin/ui/admin.dart'; diff --git a/lib/admin/ui/pages/main_page/main_page.dart b/lib/admin/ui/pages/main_page.dart similarity index 61% rename from lib/admin/ui/pages/main_page/main_page.dart rename to lib/admin/ui/pages/main_page.dart index 60595c5d1d..606a141fe6 100644 --- a/lib/admin/ui/pages/main_page/main_page.dart +++ b/lib/admin/ui/pages/main_page.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:titan/admin/providers/is_admin_provider.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; -import 'package:titan/admin/ui/pages/main_page/menu_card_ui.dart'; -import 'package:titan/user/providers/user_list_provider.dart'; +import 'package:titan/admin/ui/components/menu_card_ui.dart'; import 'package:qlevar_router/qlevar_router.dart'; class AdminMainPage extends HookConsumerWidget { @@ -14,8 +14,7 @@ class AdminMainPage extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - ref.watch(userList); - + final isAdmin = ref.watch(isAdminProvider); final controller = ScrollController(); return AdminTemplate( @@ -34,50 +33,42 @@ class AdminMainPage extends HookConsumerWidget { : 1.5, ), children: [ - GestureDetector( - onTap: () { - QR.to(AdminRouter.root + AdminRouter.permissions); - }, - child: const MenuCardUi( + if (isAdmin) ...[ + MenuCardUi( text: AdminTextConstants.permissions, icon: HeroIcons.lockOpen, + onTap: () { + QR.to(AdminRouter.root + AdminRouter.permissions); + }, ), - ), - GestureDetector( - onTap: () { - QR.to(AdminRouter.root + AdminRouter.groups); - }, - child: const MenuCardUi( + MenuCardUi( text: AdminTextConstants.groups, icon: HeroIcons.users, + onTap: () { + QR.to(AdminRouter.root + AdminRouter.groups); + }, ), - ), - GestureDetector( - onTap: () { - QR.to(AdminRouter.root + AdminRouter.schools); - }, - child: const MenuCardUi( + MenuCardUi( text: AdminTextConstants.schools, icon: HeroIcons.academicCap, + onTap: () { + QR.to(AdminRouter.root + AdminRouter.schools); + }, ), - ), - GestureDetector( - onTap: () { - QR.to(AdminRouter.root + AdminRouter.structures); - }, - child: const MenuCardUi( + MenuCardUi( text: AdminTextConstants.myPayment, icon: HeroIcons.creditCard, + onTap: () { + QR.to(AdminRouter.root + AdminRouter.structures); + }, ), - ), - GestureDetector( + ], + MenuCardUi( + text: AdminTextConstants.memberships, + icon: HeroIcons.link, onTap: () { QR.to(AdminRouter.root + AdminRouter.associationMemberships); }, - child: const MenuCardUi( - text: AdminTextConstants.memberships, - icon: HeroIcons.link, - ), ), ], ), diff --git a/lib/admin/ui/pages/main_page/menu_card_ui.dart b/lib/admin/ui/pages/main_page/menu_card_ui.dart deleted file mode 100644 index 22fe6767e4..0000000000 --- a/lib/admin/ui/pages/main_page/menu_card_ui.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:heroicons/heroicons.dart'; - -class MenuCardUi extends StatelessWidget { - final String text; - final HeroIcons icon; - const MenuCardUi({super.key, required this.text, required this.icon}); - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.symmetric(vertical: 10), - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow( - color: Colors.grey.withValues(alpha: 0.2), - blurRadius: 5, - spreadRadius: 2, - ), - ], - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - HeroIcon(icon, color: Colors.grey.shade700, size: 40), - const SizedBox(width: 10), - Text(text, style: const TextStyle(fontSize: 20)), - ], - ), - ); - } -} diff --git a/lib/admin/ui/pages/memberships/add_edit_user_membership_page/add_edit_user_membership_page.dart b/lib/admin/ui/pages/memberships/add_edit_user_membership_page/add_edit_user_membership_page.dart index 3ec8fa38b3..329b81ed57 100644 --- a/lib/admin/ui/pages/memberships/add_edit_user_membership_page/add_edit_user_membership_page.dart +++ b/lib/admin/ui/pages/memberships/add_edit_user_membership_page/add_edit_user_membership_page.dart @@ -3,8 +3,8 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/user_association_membership.dart'; import 'package:titan/admin/class/user_association_membership_base.dart'; -import 'package:titan/admin/providers/association_membership_members_list_provider.dart'; -import 'package:titan/admin/providers/user_association_membership_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_members_list_provider.dart'; +import 'package:titan/admin/providers/memberships/user_association_membership_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/pages/memberships/add_edit_user_membership_page/search_result.dart'; @@ -37,6 +37,11 @@ class AddEditUserMembershipPage extends HookConsumerWidget { final end = useTextEditingController( text: isEdit ? processDate(membership.endDate) : "", ); + final documentStatus = useTextEditingController( + text: isEdit && membership.documentStatus != null + ? membership.documentStatus.toString().toLowerCase() + : "", + ); void displayToastWithContext(TypeMsg type, String msg) { displayToast(context, type, msg); @@ -100,6 +105,26 @@ class AddEditUserMembershipPage extends HookConsumerWidget { lastDate: DateTime(2100), ), ), + if (isEdit && membership.documentId != null) ...[ + const SizedBox(height: 50), + DropdownButtonFormField( + initialValue: documentStatus.text, + onChanged: (String? newValue) { + documentStatus.text = newValue!; + }, + items: DocumentStatus.values + .map( + (status) => DropdownMenuItem( + value: status.name, + child: Text(status.name.toUpperCase()), + ), + ) + .toList(), + decoration: const InputDecoration( + hintText: AdminTextConstants.group, + ), + ), + ], const SizedBox(height: 50), WaitingButton( builder: (child) => AddEditButtonLayout( @@ -153,6 +178,13 @@ class AddEditUserMembershipPage extends HookConsumerWidget { endDate: DateTime.parse( processDateBack(end.text), ), + documentStatus: documentStatus.text.isEmpty + ? null + : DocumentStatus.values.firstWhere( + (status) => + status.name == + documentStatus.text.toLowerCase(), + ), ), ); if (value) { @@ -176,6 +208,8 @@ class AddEditUserMembershipPage extends HookConsumerWidget { userId: membership.user.id, startDate: DateTime.parse(processDateBack(start.text)), endDate: DateTime.parse(processDateBack(end.text)), + documentId: null, + documentStatus: null, ); final value = await associationMembershipMembersNotifier .addMember(membershipAdd, membership.user); diff --git a/lib/admin/ui/pages/memberships/add_edit_user_membership_page/search_result.dart b/lib/admin/ui/pages/memberships/add_edit_user_membership_page/search_result.dart index e9d0994a6b..818e6eab34 100644 --- a/lib/admin/ui/pages/memberships/add_edit_user_membership_page/search_result.dart +++ b/lib/admin/ui/pages/memberships/add_edit_user_membership_page/search_result.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/user_association_membership_provider.dart'; +import 'package:titan/admin/providers/memberships/user_association_membership_provider.dart'; import 'package:titan/user/providers/user_list_provider.dart'; class SearchResult extends HookConsumerWidget { diff --git a/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_detail_page.dart b/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_detail_page.dart index 87b343fff3..78a3e745ff 100644 --- a/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_detail_page.dart +++ b/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_detail_page.dart @@ -1,16 +1,18 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/user_association_membership.dart'; -import 'package:titan/admin/providers/association_membership_filtered_members_provider.dart'; -import 'package:titan/admin/providers/association_membership_members_list_provider.dart'; -import 'package:titan/admin/providers/association_membership_provider.dart'; -import 'package:titan/admin/providers/user_association_membership_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_filtered_members_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_members_list_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_provider.dart'; +import 'package:titan/admin/providers/memberships/user_association_membership_provider.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/pages/memberships/association_membership_detail_page/association_membership_information_editor.dart'; import 'package:titan/admin/ui/pages/memberships/association_membership_detail_page/association_membership_member_editable_card.dart'; +import 'package:titan/admin/ui/pages/memberships/association_membership_detail_page/documents_renewer.dart'; import 'package:titan/admin/ui/pages/memberships/association_membership_detail_page/research_bar.dart'; import 'package:titan/admin/ui/pages/memberships/association_membership_detail_page/search_filters.dart'; import 'package:titan/tools/constants.dart'; @@ -39,7 +41,11 @@ class AssociationMembershipEditorPage extends HookConsumerWidget { child: Refresher( onRefresh: () async { await associationMembershipMemberListNotifier - .loadAssociationMembershipMembers(associationMembership.id); + .loadAssociationMembershipMembers( + associationMembership.id, + maximalStartDate: DateTime.now(), + minimalEndDate: DateTime.now(), + ); }, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 30), @@ -117,12 +123,16 @@ class AssociationMembershipEditorPage extends HookConsumerWidget { children: const [SearchFilters()], ), const SizedBox(height: 20), + if (kIsWeb && associationMembership.templateId != null) ...[ + DocumentsRenewer(), + const SizedBox(height: 20), + ], ResearchBar(), const SizedBox(height: 10), associationMembershipFilteredList.isEmpty ? const Text(AdminTextConstants.noMember) : SizedBox( - height: 400, + height: 600, child: ListView.builder( itemCount: associationMembershipFilteredList.length, itemBuilder: (context, index) { diff --git a/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_information_editor.dart b/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_information_editor.dart index f791809568..bddca10a6b 100644 --- a/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_information_editor.dart +++ b/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_information_editor.dart @@ -1,16 +1,19 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/all_groups_list_provider.dart'; -import 'package:titan/admin/providers/association_membership_list_provider.dart'; -import 'package:titan/admin/providers/association_membership_provider.dart'; +import 'package:titan/admin/providers/groups/all_groups_list_provider.dart'; +import 'package:titan/admin/providers/is_admin_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_list_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/tools/constants.dart'; import 'package:titan/tools/functions.dart'; import 'package:titan/tools/token_expire_wrapper.dart'; import 'package:titan/tools/ui/builders/waiting_button.dart'; import 'package:titan/tools/ui/layouts/add_edit_button_layout.dart'; +import 'package:titan/tools/ui/widgets/align_left_text.dart'; class AssociationMembershipInformationEditor extends HookConsumerWidget { final scrollKey = GlobalKey(); @@ -27,6 +30,9 @@ class AssociationMembershipInformationEditor extends HookConsumerWidget { associationMembershipProvider.notifier, ); final name = useTextEditingController(text: associationMembership.name); + final templateId = useTextEditingController( + text: associationMembership.templateId ?? '', + ); final groups = ref.watch(allGroupList); final groupIdController = useTextEditingController( text: associationMembership.managerGroupId, @@ -34,6 +40,7 @@ class AssociationMembershipInformationEditor extends HookConsumerWidget { final associationMembershipListNotifier = ref.watch( allAssociationMembershipListProvider.notifier, ); + final isAdmin = ref.watch(isAdminProvider); final key = GlobalKey(); groups.sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase())); @@ -44,71 +51,98 @@ class AssociationMembershipInformationEditor extends HookConsumerWidget { key: key, child: Column( children: [ - Container( - margin: const EdgeInsets.symmetric(vertical: 10), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - child: TextFormField( - controller: name, - cursorColor: ColorConstants.gradient1, - decoration: InputDecoration( - labelText: AdminTextConstants.name, - labelStyle: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - ), - suffixIcon: Container( - padding: const EdgeInsets.all(10), - child: const HeroIcon(HeroIcons.pencil), - ), - enabledBorder: const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.transparent), - ), - focusedBorder: const UnderlineInputBorder( - borderSide: BorderSide( - color: ColorConstants.gradient1, - ), + isAdmin + ? TextFormField( + controller: name, + cursorColor: ColorConstants.gradient1, + decoration: InputDecoration( + labelText: AdminTextConstants.name, + labelStyle: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + suffixIcon: Container( + padding: const EdgeInsets.all(10), + child: const HeroIcon(HeroIcons.pencil), + ), + enabledBorder: const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.transparent), + ), + focusedBorder: const UnderlineInputBorder( + borderSide: BorderSide( + color: ColorConstants.gradient1, ), ), - validator: (value) { - if (value == null || value.isEmpty) { - return AdminTextConstants.emptyFieldError; - } - return null; - }, ), + validator: (value) { + if (value == null || value.isEmpty) { + return AdminTextConstants.emptyFieldError; + } + return null; + }, + ) + : AlignLeftText( + associationMembership.name, + fontWeight: FontWeight.bold, ), - ], - ), - ), - const Align( - alignment: Alignment.centerLeft, - child: Text( - AdminTextConstants.group, - style: TextStyle(fontWeight: FontWeight.bold), - ), + const SizedBox(height: 10), + AlignLeftText( + AdminTextConstants.group, + fontWeight: FontWeight.bold, ), - DropdownButtonFormField( - initialValue: groupIdController.text, - onChanged: (String? newValue) { - groupIdController.text = newValue!; - }, - items: groups - .map( - (group) => DropdownMenuItem( - value: group.id, - child: Text(group.name), + isAdmin + ? DropdownButtonFormField( + initialValue: groupIdController.text, + onChanged: (String? newValue) { + groupIdController.text = newValue!; + }, + items: groups + .map( + (group) => DropdownMenuItem( + value: group.id, + child: Text(group.name), + ), + ) + .toList(), + decoration: const InputDecoration( + hintText: AdminTextConstants.group, ), ) - .toList(), - decoration: const InputDecoration( - hintText: AdminTextConstants.group, - ), - ), + : AlignLeftText( + groups + .firstWhere( + (group) => + group.id == + associationMembership.managerGroupId, + ) + .name, + fontWeight: FontWeight.bold, + ), const SizedBox(height: 20), + if (kIsWeb) ...[ + TextFormField( + controller: templateId, + cursorColor: ColorConstants.gradient1, + decoration: InputDecoration( + labelText: AdminTextConstants.templateId, + labelStyle: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + suffixIcon: Container( + padding: const EdgeInsets.all(10), + child: const HeroIcon(HeroIcons.pencil), + ), + enabledBorder: const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.transparent), + ), + focusedBorder: const UnderlineInputBorder( + borderSide: BorderSide(color: ColorConstants.gradient1), + ), + ), + ), + const SizedBox(height: 20), + ], WaitingButton( builder: (child) => AddEditButtonLayout( colors: const [ @@ -125,13 +159,22 @@ class AssociationMembershipInformationEditor extends HookConsumerWidget { await tokenExpireWrapper(ref, () async { final value = await associationMembershipListNotifier .updateAssociationMembership( - associationMembership.copyWith(name: name.text), + associationMembership.copyWith( + name: name.text, + managerGroupId: groupIdController.text, + templateId: templateId.text.isEmpty + ? null + : templateId.text, + ), ); if (value) { associationMembershipNotifier.setAssociationMembership( associationMembership.copyWith( name: name.text, managerGroupId: groupIdController.text, + templateId: templateId.text.isEmpty + ? null + : templateId.text, ), ); displayToastWithContext( diff --git a/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_member_editable_card.dart b/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_member_editable_card.dart index 1552f951e6..e95b392660 100644 --- a/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_member_editable_card.dart +++ b/lib/admin/ui/pages/memberships/association_membership_detail_page/association_membership_member_editable_card.dart @@ -1,16 +1,24 @@ import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/user_association_membership.dart'; -import 'package:titan/admin/providers/association_membership_members_list_provider.dart'; -import 'package:titan/admin/providers/user_association_membership_provider.dart'; +import 'package:titan/admin/class/user_association_membership_base.dart'; +import 'package:titan/admin/providers/memberships/association_membership_members_list_provider.dart'; +import 'package:titan/admin/providers/memberships/user_association_membership_provider.dart'; import 'package:titan/admin/router.dart'; +import 'package:titan/admin/tools/constants.dart'; import 'package:titan/phonebook/ui/pages/admin_page/delete_button.dart'; import 'package:titan/phonebook/ui/pages/admin_page/edition_button.dart'; +import 'package:titan/tools/constants.dart'; import 'package:titan/tools/functions.dart'; import 'package:titan/phonebook/tools/constants.dart'; import 'package:titan/tools/token_expire_wrapper.dart'; import 'package:qlevar_router/qlevar_router.dart'; +import 'package:titan/tools/ui/builders/waiting_button.dart'; +import 'package:titan/tools/ui/layouts/add_edit_button_layout.dart'; +import 'package:titan/tools/ui/widgets/custom_dialog_box.dart'; class MemberEditableCard extends HookConsumerWidget { const MemberEditableCard({super.key, required this.associationMembership}); @@ -61,6 +69,73 @@ class MemberEditableCard extends HookConsumerWidget { ], ), ), + if (kIsWeb && associationMembership.documentStatus != null) + Expanded( + child: Row( + children: [ + AutoSizeText( + associationMembership.documentStatus!.name.toUpperCase(), + minFontSize: 10, + maxFontSize: 15, + style: TextStyle( + color: + associationMembership.documentStatus == + DocumentStatus.approved + ? Colors.green + : associationMembership.documentStatus == + DocumentStatus.pending + ? Colors.blue + : Colors.red, + ), + ), + const SizedBox(width: 10), + WaitingButton( + builder: (child) => AddEditButtonLayout( + colors: const [ + ColorConstants.gradient1, + ColorConstants.gradient2, + ], + child: child, + ), + onTap: () async { + await showDialog( + context: context, + builder: ((context) => CustomDialogBox( + title: AdminTextConstants.renewingDocumentTitle, + descriptions: + AdminTextConstants.renewingDocumentConfirmation, + onYes: (() async { + await tokenExpireWrapper(ref, () async { + final result = + await associationMembershipMemberListNotifier + .renewUserMembershipDocuments( + associationMembership.id, + ); + if (result.errors.isNotEmpty) { + displayToastWithContext( + TypeMsg.error, + result.errors[associationMembership.userId] ?? + AdminTextConstants.renewingError, + ); + } else { + displayToastWithContext( + TypeMsg.msg, + AdminTextConstants.renewedDocuments, + ); + } + }); + }), + )), + ); + }, + child: const HeroIcon( + HeroIcons.arrowPath, + color: Colors.white, + ), + ), + ], + ), + ), Expanded( child: Column( children: [ diff --git a/lib/admin/ui/pages/memberships/association_membership_detail_page/documents_renewer.dart b/lib/admin/ui/pages/memberships/association_membership_detail_page/documents_renewer.dart new file mode 100644 index 0000000000..bcf0d60c24 --- /dev/null +++ b/lib/admin/ui/pages/memberships/association_membership_detail_page/documents_renewer.dart @@ -0,0 +1,139 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:titan/admin/providers/memberships/association_membership_members_list_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_provider.dart'; +import 'package:titan/admin/tools/constants.dart'; +import 'package:titan/tools/constants.dart'; +import 'package:titan/tools/functions.dart'; +import 'package:titan/tools/token_expire_wrapper.dart'; +import 'package:titan/tools/ui/builders/waiting_button.dart'; +import 'package:titan/tools/ui/layouts/add_edit_button_layout.dart'; +import 'package:titan/tools/ui/widgets/align_left_text.dart'; +import 'package:titan/tools/ui/widgets/custom_dialog_box.dart'; +import 'package:titan/tools/ui/widgets/date_entry.dart'; + +class DocumentsRenewer extends HookConsumerWidget { + const DocumentsRenewer({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final dateController = useTextEditingController(); + final associationMembership = ref.watch(associationMembershipProvider); + final associationMembershipMemberListNotifier = ref.watch( + associationMembershipMembersProvider.notifier, + ); + + void displayToastWithContext(TypeMsg type, String msg) { + displayToast(context, type, msg); + } + + useListenable(dateController); + return Column( + children: [ + AlignLeftText( + AdminTextConstants.renewingDocumentsTitle, + fontSize: 18, + fontWeight: FontWeight.w700, + color: ColorConstants.gradient1, + ), + SizedBox( + width: MediaQuery.of(context).size.width, + child: Row( + children: [ + Expanded( + child: DateEntry( + label: AdminTextConstants.startDateMinimal, + controller: dateController, + onTap: () => getOnlyDayDate( + context, + dateController, + firstDate: DateTime(DateTime.now().year), + lastDate: DateTime(DateTime.now().year + 7), + ), + ), + ), + const SizedBox(width: 30), + Expanded( + child: WaitingButton( + builder: (child) => AddEditButtonLayout( + colors: dateController.text.isEmpty + ? [ + ColorConstants.deactivated1, + ColorConstants.deactivated2, + ] + : [ColorConstants.gradient1, ColorConstants.gradient2], + child: child, + ), + onTap: dateController.text.isEmpty + ? () async {} + : () async { + await showDialog( + context: context, + builder: ((context) => CustomDialogBox( + title: AdminTextConstants.renewingDocumentsTitle, + descriptions: + AdminTextConstants + .renewingDocumentsConfirmation1 + + dateController.text + + AdminTextConstants + .renewingDocumentsConfirmation2, + onYes: (() async { + await tokenExpireWrapper(ref, () async { + final result = + await associationMembershipMemberListNotifier + .renewAssociationMembershipDocuments( + associationMembership.id, + DateTime.parse( + processDateBack( + dateController.text, + ), + ), + ); + if (result.errors.isNotEmpty) { + if (context.mounted) { + Navigator.of(context).pop(); + await showDialog( + context: context, + builder: ((context) => CustomDialogBox( + title: AdminTextConstants + .renewingDocumentsTitle, + descriptions: result.errors.entries + .map( + (e) => "${e.key}: ${e.value}", + ) + .join("\n"), + onYes: (() { + Navigator.of(context).pop(); + }), + )), + ); + } + } else { + displayToastWithContext( + TypeMsg.msg, + AdminTextConstants.renewedDocuments, + ); + } + }); + }), + )), + ); + }, + child: const Text( + AdminTextConstants.renewDocuments, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: Colors.white, + ), + ), + ), + ), + ], + ), + ), + ], + ); + } +} diff --git a/lib/admin/ui/pages/memberships/association_membership_detail_page/search_filters.dart b/lib/admin/ui/pages/memberships/association_membership_detail_page/search_filters.dart index 694d366265..3aa41172be 100644 --- a/lib/admin/ui/pages/memberships/association_membership_detail_page/search_filters.dart +++ b/lib/admin/ui/pages/memberships/association_membership_detail_page/search_filters.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/association_membership_members_list_provider.dart'; -import 'package:titan/admin/providers/association_membership_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_members_list_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/tools/constants.dart'; import 'package:titan/tools/functions.dart'; diff --git a/lib/admin/ui/pages/memberships/association_membership_page/association_membership_page.dart b/lib/admin/ui/pages/memberships/association_membership_page/association_membership_page.dart index 8ae53d5400..8db55caafa 100644 --- a/lib/admin/ui/pages/memberships/association_membership_page/association_membership_page.dart +++ b/lib/admin/ui/pages/memberships/association_membership_page/association_membership_page.dart @@ -2,10 +2,11 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/association_membership_simple.dart'; -import 'package:titan/admin/providers/all_groups_list_provider.dart'; -import 'package:titan/admin/providers/association_membership_list_provider.dart'; -import 'package:titan/admin/providers/association_membership_members_list_provider.dart'; -import 'package:titan/admin/providers/association_membership_provider.dart'; +import 'package:titan/admin/providers/groups/all_groups_list_provider.dart'; +import 'package:titan/admin/providers/is_admin_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_list_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_members_list_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_provider.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/item_card_ui.dart'; @@ -19,6 +20,7 @@ import 'package:titan/tools/functions.dart'; import 'package:titan/tools/ui/layouts/refresher.dart'; import 'package:titan/tools/token_expire_wrapper.dart'; import 'package:qlevar_router/qlevar_router.dart'; +import 'package:titan/user/providers/user_provider.dart'; class AssociationMembershipsPage extends HookConsumerWidget { const AssociationMembershipsPage({super.key}); @@ -38,6 +40,8 @@ class AssociationMembershipsPage extends HookConsumerWidget { associationMembershipMembersProvider.notifier, ); final groups = ref.watch(allGroupList); + final me = ref.watch(userProvider); + final isAdmin = ref.watch(isAdminProvider); final nameController = TextEditingController(); final groupIdController = TextEditingController(); @@ -134,10 +138,18 @@ class AssociationMembershipsPage extends HookConsumerWidget { ...g.map( (associationMembership) => AssociationMembershipUi( associationMembership: associationMembership, + canEdit: me.groups.any( + (group) => + group.id == + associationMembership.managerGroupId, + ), + isAdmin: isAdmin, onEdit: () { associationMembershipMembersNotifier .loadAssociationMembershipMembers( associationMembership.id, + maximalStartDate: DateTime.now(), + minimalEndDate: DateTime.now(), ); associationMembershipNotifier .setAssociationMembership( diff --git a/lib/admin/ui/pages/memberships/association_membership_page/association_membership_ui.dart b/lib/admin/ui/pages/memberships/association_membership_page/association_membership_ui.dart index 694a576747..8dfd606470 100644 --- a/lib/admin/ui/pages/memberships/association_membership_page/association_membership_ui.dart +++ b/lib/admin/ui/pages/memberships/association_membership_page/association_membership_ui.dart @@ -9,6 +9,8 @@ import 'package:titan/tools/ui/builders/waiting_button.dart'; class AssociationMembershipUi extends HookConsumerWidget { final AssociationMembership associationMembership; + final bool canEdit; + final bool isAdmin; final void Function() onEdit; final Future Function() onDelete; const AssociationMembershipUi({ @@ -16,6 +18,8 @@ class AssociationMembershipUi extends HookConsumerWidget { required this.associationMembership, required this.onEdit, required this.onDelete, + required this.canEdit, + required this.isAdmin, }); @override @@ -33,29 +37,33 @@ class AssociationMembershipUi extends HookConsumerWidget { ), ), ), - const SizedBox(width: 10), - Row( - children: [ - GestureDetector( - onTap: onEdit, - child: AssociationMembershipButton( - gradient1: Colors.grey.shade800, - gradient2: Colors.grey.shade900, - child: const HeroIcon(HeroIcons.eye, color: Colors.white), - ), - ), - const SizedBox(width: 10), - WaitingButton( - onTap: onDelete, - builder: (child) => AssociationMembershipButton( - gradient1: ColorConstants.gradient1, - gradient2: ColorConstants.gradient2, - child: child, + if (canEdit || isAdmin) ...[ + const SizedBox(width: 10), + Row( + children: [ + GestureDetector( + onTap: onEdit, + child: AssociationMembershipButton( + gradient1: Colors.grey.shade800, + gradient2: Colors.grey.shade900, + child: const HeroIcon(HeroIcons.eye, color: Colors.white), + ), ), - child: const HeroIcon(HeroIcons.xMark, color: Colors.white), - ), - ], - ), + if (isAdmin) ...[ + const SizedBox(width: 10), + WaitingButton( + onTap: onDelete, + builder: (child) => AssociationMembershipButton( + gradient1: ColorConstants.gradient1, + gradient2: ColorConstants.gradient2, + child: child, + ), + child: const HeroIcon(HeroIcons.xMark, color: Colors.white), + ), + ], + ], + ), + ], ], ); } diff --git a/lib/admin/ui/pages/structure_page/add_edit_structure_page/add_edit_structure_page.dart b/lib/admin/ui/pages/mypayment/add_edit_structure_page/add_edit_structure_page.dart similarity index 97% rename from lib/admin/ui/pages/structure_page/add_edit_structure_page/add_edit_structure_page.dart rename to lib/admin/ui/pages/mypayment/add_edit_structure_page/add_edit_structure_page.dart index 643b517171..6804ff1fdf 100644 --- a/lib/admin/ui/pages/structure_page/add_edit_structure_page/add_edit_structure_page.dart +++ b/lib/admin/ui/pages/mypayment/add_edit_structure_page/add_edit_structure_page.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/association_membership_simple.dart'; -import 'package:titan/admin/providers/association_membership_list_provider.dart'; -import 'package:titan/admin/providers/structure_manager_provider.dart'; -import 'package:titan/admin/providers/structure_provider.dart'; +import 'package:titan/admin/providers/memberships/association_membership_list_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_manager_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/admin_button.dart'; -import 'package:titan/admin/ui/pages/structure_page/add_edit_structure_page/search_user.dart'; +import 'package:titan/admin/ui/pages/mypayment/add_edit_structure_page/search_user.dart'; import 'package:titan/mypayment/class/structure.dart'; import 'package:titan/mypayment/providers/structure_list_provider.dart'; import 'package:titan/tools/constants.dart'; diff --git a/lib/admin/ui/pages/structure_page/add_edit_structure_page/results.dart b/lib/admin/ui/pages/mypayment/add_edit_structure_page/results.dart similarity index 96% rename from lib/admin/ui/pages/structure_page/add_edit_structure_page/results.dart rename to lib/admin/ui/pages/mypayment/add_edit_structure_page/results.dart index 351f91eea7..361bce39f2 100644 --- a/lib/admin/ui/pages/structure_page/add_edit_structure_page/results.dart +++ b/lib/admin/ui/pages/mypayment/add_edit_structure_page/results.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/structure_manager_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_manager_provider.dart'; import 'package:titan/tools/constants.dart'; import 'package:titan/tools/ui/builders/async_child.dart'; import 'package:titan/tools/ui/builders/waiting_button.dart'; diff --git a/lib/admin/ui/pages/structure_page/add_edit_structure_page/search_user.dart b/lib/admin/ui/pages/mypayment/add_edit_structure_page/search_user.dart similarity index 93% rename from lib/admin/ui/pages/structure_page/add_edit_structure_page/search_user.dart rename to lib/admin/ui/pages/mypayment/add_edit_structure_page/search_user.dart index 291478fb8e..9cda373d2f 100644 --- a/lib/admin/ui/pages/structure_page/add_edit_structure_page/search_user.dart +++ b/lib/admin/ui/pages/mypayment/add_edit_structure_page/search_user.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/structure_manager_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_manager_provider.dart'; import 'package:titan/admin/tools/constants.dart'; -import 'package:titan/admin/ui/pages/structure_page/add_edit_structure_page/results.dart'; +import 'package:titan/admin/ui/pages/mypayment/add_edit_structure_page/results.dart'; import 'package:titan/tools/constants.dart'; import 'package:titan/tools/ui/widgets/styled_search_bar.dart'; import 'package:titan/user/class/simple_users.dart'; diff --git a/lib/admin/ui/pages/structure_page/structure_button.dart b/lib/admin/ui/pages/mypayment/structure_page/structure_button.dart similarity index 100% rename from lib/admin/ui/pages/structure_page/structure_button.dart rename to lib/admin/ui/pages/mypayment/structure_page/structure_button.dart diff --git a/lib/admin/ui/pages/structure_page/structure_page.dart b/lib/admin/ui/pages/mypayment/structure_page/structure_page.dart similarity index 95% rename from lib/admin/ui/pages/structure_page/structure_page.dart rename to lib/admin/ui/pages/mypayment/structure_page/structure_page.dart index 9e4894f00a..eeee2ce97c 100644 --- a/lib/admin/ui/pages/structure_page/structure_page.dart +++ b/lib/admin/ui/pages/mypayment/structure_page/structure_page.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/router.dart'; -import 'package:titan/admin/providers/structure_manager_provider.dart'; -import 'package:titan/admin/providers/structure_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_manager_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/item_card_ui.dart'; -import 'package:titan/admin/ui/pages/structure_page/structure_ui.dart'; +import 'package:titan/admin/ui/pages/mypayment/structure_page/structure_ui.dart'; import 'package:titan/mypayment/class/structure.dart'; import 'package:titan/mypayment/providers/bank_account_holder_provider.dart'; import 'package:titan/mypayment/providers/structure_list_provider.dart'; diff --git a/lib/admin/ui/pages/structure_page/structure_ui.dart b/lib/admin/ui/pages/mypayment/structure_page/structure_ui.dart similarity index 96% rename from lib/admin/ui/pages/structure_page/structure_ui.dart rename to lib/admin/ui/pages/mypayment/structure_page/structure_ui.dart index 72a46b216a..231705cf56 100644 --- a/lib/admin/ui/pages/structure_page/structure_ui.dart +++ b/lib/admin/ui/pages/mypayment/structure_page/structure_ui.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:qlevar_router/qlevar_router.dart'; -import 'package:titan/admin/providers/structure_manager_provider.dart'; -import 'package:titan/admin/providers/structure_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_manager_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_provider.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/components/item_card_ui.dart'; diff --git a/lib/admin/ui/pages/permissions/module_expansion_panel.dart b/lib/admin/ui/pages/permissions/module_expansion_panel.dart index dd3851d3d6..390e6263f4 100644 --- a/lib/admin/ui/pages/permissions/module_expansion_panel.dart +++ b/lib/admin/ui/pages/permissions/module_expansion_panel.dart @@ -3,7 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/account_type.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/admin/ui/pages/permissions/permission_expansion_panel.dart'; class ModuleExpansionPanel extends HookConsumerWidget { diff --git a/lib/admin/ui/pages/permissions/permission_expansion_panel.dart b/lib/admin/ui/pages/permissions/permission_expansion_panel.dart index c31c764a95..61c10cee06 100644 --- a/lib/admin/ui/pages/permissions/permission_expansion_panel.dart +++ b/lib/admin/ui/pages/permissions/permission_expansion_panel.dart @@ -4,7 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/account_type.dart'; import 'package:titan/admin/class/permissions.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/tools/function.dart'; import 'package:titan/admin/ui/pages/permissions/permission_row.dart'; diff --git a/lib/admin/ui/pages/permissions/permissions.dart b/lib/admin/ui/pages/permissions/permissions.dart index cf54beee60..247e555d72 100644 --- a/lib/admin/ui/pages/permissions/permissions.dart +++ b/lib/admin/ui/pages/permissions/permissions.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/account_types_list_provider.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; -import 'package:titan/admin/providers/permission_name_list_provider.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/account_types_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permission_name_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/pages/permissions/module_expansion_panel.dart'; diff --git a/lib/admin/ui/pages/schools/add_school_page/add_school_page.dart b/lib/admin/ui/pages/schools/add_school_page/add_school_page.dart index 7ae21c8247..23a3f4522c 100644 --- a/lib/admin/ui/pages/schools/add_school_page/add_school_page.dart +++ b/lib/admin/ui/pages/schools/add_school_page/add_school_page.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/school.dart'; -import 'package:titan/admin/providers/school_list_provider.dart'; +import 'package:titan/admin/providers/schools/school_list_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/admin_button.dart'; diff --git a/lib/admin/ui/pages/schools/edit_school_page/edit_school_page.dart b/lib/admin/ui/pages/schools/edit_school_page/edit_school_page.dart index 4253ff6305..07efda5e26 100644 --- a/lib/admin/ui/pages/schools/edit_school_page/edit_school_page.dart +++ b/lib/admin/ui/pages/schools/edit_school_page/edit_school_page.dart @@ -3,8 +3,8 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/school.dart'; -import 'package:titan/admin/providers/school_list_provider.dart'; -import 'package:titan/admin/providers/school_provider.dart'; +import 'package:titan/admin/providers/schools/school_list_provider.dart'; +import 'package:titan/admin/providers/schools/school_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/admin_button.dart'; diff --git a/lib/admin/ui/pages/schools/school_page/school_page.dart b/lib/admin/ui/pages/schools/school_page/school_page.dart index 719dc74911..24408a166a 100644 --- a/lib/admin/ui/pages/schools/school_page/school_page.dart +++ b/lib/admin/ui/pages/schools/school_page/school_page.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/school_list_provider.dart'; -import 'package:titan/admin/providers/school_provider.dart'; +import 'package:titan/admin/providers/schools/school_list_provider.dart'; +import 'package:titan/admin/providers/schools/school_provider.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/admin/ui/admin.dart'; import 'package:titan/admin/ui/components/item_card_ui.dart'; diff --git a/lib/advert/ui/pages/form_page/add_rem_announcer_page.dart b/lib/advert/ui/pages/form_page/add_rem_announcer_page.dart index f3843d7288..fec863fc4c 100644 --- a/lib/advert/ui/pages/form_page/add_rem_announcer_page.dart +++ b/lib/advert/ui/pages/form_page/add_rem_announcer_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/advert/class/announcer.dart'; import 'package:titan/advert/providers/all_announcer_list_provider.dart'; import 'package:titan/advert/providers/announcer_list_provider.dart'; diff --git a/lib/booking/ui/pages/admin_pages/add_edit_manager_page.dart b/lib/booking/ui/pages/admin_pages/add_edit_manager_page.dart index e89d0c1405..eaf144c965 100644 --- a/lib/booking/ui/pages/admin_pages/add_edit_manager_page.dart +++ b/lib/booking/ui/pages/admin_pages/add_edit_manager_page.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/group_id_provider.dart'; +import 'package:titan/admin/providers/groups/group_id_provider.dart'; import 'package:titan/booking/class/manager.dart'; import 'package:titan/booking/providers/manager_list_provider.dart'; import 'package:titan/booking/providers/manager_provider.dart'; @@ -16,7 +16,7 @@ import 'package:titan/tools/token_expire_wrapper.dart'; import 'package:titan/tools/ui/layouts/item_chip.dart'; import 'package:titan/tools/ui/widgets/custom_dialog_box.dart'; import 'package:qlevar_router/qlevar_router.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; class AddEditManagerPage extends HookConsumerWidget { final GlobalKey dataKey = GlobalKey(); diff --git a/lib/booking/ui/pages/admin_pages/admin_page.dart b/lib/booking/ui/pages/admin_pages/admin_page.dart index d6e8f2edd7..a2140ea9fb 100644 --- a/lib/booking/ui/pages/admin_pages/admin_page.dart +++ b/lib/booking/ui/pages/admin_pages/admin_page.dart @@ -3,7 +3,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/group_id_provider.dart'; +import 'package:titan/admin/providers/groups/group_id_provider.dart'; import 'package:titan/booking/class/manager.dart'; import 'package:titan/booking/providers/is_admin_provider.dart'; import 'package:titan/service/class/room.dart'; diff --git a/lib/drawer/ui/drawer_top_bar.dart b/lib/drawer/ui/drawer_top_bar.dart index 0d6d6f389f..7d3549b848 100644 --- a/lib/drawer/ui/drawer_top_bar.dart +++ b/lib/drawer/ui/drawer_top_bar.dart @@ -3,6 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/providers/is_admin_provider.dart'; +import 'package:titan/admin/providers/memberships/is_membership_admin.dart'; import 'package:titan/admin/router.dart'; import 'package:titan/auth/providers/is_connected_provider.dart'; import 'package:titan/drawer/providers/animation_provider.dart'; @@ -31,6 +32,7 @@ class DrawerTopBar extends HookConsumerWidget { final profilePicture = ref.watch(profilePictureProvider); final hasScrolled = ref.watch(hasScrolledProvider.notifier); final isAdmin = ref.watch(isAdminProvider); + final isMembershipAdmin = ref.watch(isMembershipAdminProvider); final isConnected = ref.watch(isConnectedProvider); final animation = ref.watch(animationProvider); final emailPopupStateNotifier = ref.read(emailPopupStateProvider.notifier); @@ -65,7 +67,7 @@ class DrawerTopBar extends HookConsumerWidget { Container(width: 25), GestureDetector( onTap: () { - if (isAdmin) { + if (isAdmin || isMembershipAdmin) { if (dropDownAnimation.isDismissed) { dropDownAnimation.forward(); } else { @@ -105,7 +107,7 @@ class DrawerTopBar extends HookConsumerWidget { : Image.memory(file).image, ), ), - if (isAdmin) + if (isAdmin || isMembershipAdmin) Positioned( bottom: 0, right: 0, @@ -236,7 +238,7 @@ class DrawerTopBar extends HookConsumerWidget { ), ), const SizedBox(height: 10), - if (isAdmin) + if (isAdmin || isMembershipAdmin) Transform.translate( offset: Offset(0, -15 * (1 - dropDownAnimation.value)), child: GestureDetector( diff --git a/lib/mypayment/ui/pages/invoices_admin_page/invoices_admin_page.dart b/lib/mypayment/ui/pages/invoices_admin_page/invoices_admin_page.dart index 327fe45668..792abe648e 100644 --- a/lib/mypayment/ui/pages/invoices_admin_page/invoices_admin_page.dart +++ b/lib/mypayment/ui/pages/invoices_admin_page/invoices_admin_page.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/structure_provider.dart'; +import 'package:titan/admin/providers/mypayment/structure_provider.dart'; import 'package:titan/mypayment/providers/invoice_list_provider.dart'; import 'package:titan/mypayment/providers/structure_list_provider.dart'; import 'package:titan/mypayment/ui/pages/invoices_admin_page/invoice_card.dart'; diff --git a/lib/others/ui/no_module.dart b/lib/others/ui/no_module.dart index 0b6482d33c..472e04027a 100644 --- a/lib/others/ui/no_module.dart +++ b/lib/others/ui/no_module.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/permission_name_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permission_name_list_provider.dart'; import 'package:titan/others/tools/constants.dart'; import 'package:titan/tools/providers/path_forwarding_provider.dart'; import 'package:qlevar_router/qlevar_router.dart'; diff --git a/lib/phonebook/ui/pages/add_edit_groupement/add_edit_groupement_page.dart b/lib/phonebook/ui/pages/add_edit_groupement/add_edit_groupement_page.dart index 16658231b1..52bcf636f1 100644 --- a/lib/phonebook/ui/pages/add_edit_groupement/add_edit_groupement_page.dart +++ b/lib/phonebook/ui/pages/add_edit_groupement/add_edit_groupement_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/admin/tools/constants.dart'; import 'package:titan/phonebook/class/association_groupement.dart'; import 'package:titan/phonebook/providers/association_groupement_list_provider.dart'; diff --git a/lib/phonebook/ui/pages/association_editor_page/association_information_editor.dart b/lib/phonebook/ui/pages/association_editor_page/association_information_editor.dart index 0f89b1544a..37451b718e 100644 --- a/lib/phonebook/ui/pages/association_editor_page/association_information_editor.dart +++ b/lib/phonebook/ui/pages/association_editor_page/association_information_editor.dart @@ -3,7 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/admin/providers/is_admin_provider.dart'; import 'package:titan/phonebook/providers/association_groupement_provider.dart'; import 'package:titan/phonebook/providers/association_list_provider.dart'; diff --git a/lib/raffle/ui/pages/admin_module_page/tombola_handler.dart b/lib/raffle/ui/pages/admin_module_page/tombola_handler.dart index 88d19687df..43810b71b1 100644 --- a/lib/raffle/ui/pages/admin_module_page/tombola_handler.dart +++ b/lib/raffle/ui/pages/admin_module_page/tombola_handler.dart @@ -3,7 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/raffle/providers/raffle_list_provider.dart'; import 'package:titan/raffle/tools/constants.dart'; import 'package:titan/raffle/ui/pages/admin_module_page/confirm_creation.dart'; diff --git a/lib/settings/providers/module_list_provider.dart b/lib/settings/providers/module_list_provider.dart index d093e242a4..0a5d25508f 100644 --- a/lib/settings/providers/module_list_provider.dart +++ b/lib/settings/providers/module_list_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/advert/router.dart'; import 'package:titan/amap/router.dart'; import 'package:titan/booking/router.dart'; diff --git a/lib/tools/functions.dart b/lib/tools/functions.dart index 9ff3f8b72d..f0711b3cd7 100644 --- a/lib/tools/functions.dart +++ b/lib/tools/functions.dart @@ -7,7 +7,7 @@ import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:heroicons/heroicons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:intl/intl.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/tools/constants.dart'; import 'package:titan/tools/plausible/plausible.dart'; import 'package:titan/tools/repository/repository.dart'; diff --git a/lib/vote/providers/voting_group_list_provider.dart b/lib/vote/providers/voting_group_list_provider.dart index e79fb11de7..d6eabe80d4 100644 --- a/lib/vote/providers/voting_group_list_provider.dart +++ b/lib/vote/providers/voting_group_list_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/vote/providers/voter_list_provider.dart'; final votingGroupListProvider = Provider>((ref) { diff --git a/lib/vote/ui/pages/admin_page/voters_bar.dart b/lib/vote/ui/pages/admin_page/voters_bar.dart index 81dac4a033..5ad909f712 100644 --- a/lib/vote/ui/pages/admin_page/voters_bar.dart +++ b/lib/vote/ui/pages/admin_page/voters_bar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/tools/functions.dart'; import 'package:titan/vote/class/voter.dart'; import 'package:titan/vote/providers/status_provider.dart'; diff --git a/test/admin/group_id_provider_test.dart b/test/admin/group_id_provider_test.dart index 6055f403e2..932188c239 100644 --- a/test/admin/group_id_provider_test.dart +++ b/test/admin/group_id_provider_test.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:titan/admin/providers/group_id_provider.dart'; +import 'package:titan/admin/providers/groups/group_id_provider.dart'; void main() { group('GroupIdNotifier', () { diff --git a/test/admin/group_list_provider_test.dart b/test/admin/group_list_provider_test.dart index b352ecc733..50dca98bef 100644 --- a/test/admin/group_list_provider_test.dart +++ b/test/admin/group_list_provider_test.dart @@ -3,7 +3,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:titan/admin/class/account_type.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/group_list_provider.dart'; +import 'package:titan/admin/providers/groups/group_list_provider.dart'; import 'package:titan/admin/repositories/group_repository.dart'; import 'package:titan/user/class/user.dart'; diff --git a/test/admin/group_logo_provider_test.dart b/test/admin/group_logo_provider_test.dart index b3aa595508..2bdf45d83d 100644 --- a/test/admin/group_logo_provider_test.dart +++ b/test/admin/group_logo_provider_test.dart @@ -3,7 +3,7 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; -import 'package:titan/admin/providers/group_logo_provider.dart'; +import 'package:titan/admin/providers/groups/group_logo_provider.dart'; import 'package:titan/admin/repositories/group_logo_repository.dart'; class MockGroupLogoRepository extends Mock implements GroupLogoRepository {} diff --git a/test/admin/group_provider_test.dart b/test/admin/group_provider_test.dart index a373824ec0..00a3fdddfb 100644 --- a/test/admin/group_provider_test.dart +++ b/test/admin/group_provider_test.dart @@ -2,7 +2,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:titan/admin/class/group.dart'; -import 'package:titan/admin/providers/group_provider.dart'; +import 'package:titan/admin/providers/groups/group_provider.dart'; import 'package:titan/admin/repositories/group_repository.dart'; import 'package:titan/user/class/simple_users.dart'; diff --git a/test/admin/members_provider_test.dart b/test/admin/members_provider_test.dart deleted file mode 100644 index a3215c0ef8..0000000000 --- a/test/admin/members_provider_test.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:titan/admin/providers/members_provider.dart'; -import 'package:titan/user/class/simple_users.dart'; - -void main() { - group('MembersNotifier', () { - test('Adding a user to the list', () { - final membersNotifier = MembersNotifier(); - final user = SimpleUser.empty().copyWith(id: '1', name: 'John'); - membersNotifier.add(user); - expect(membersNotifier.state.length, 1); - expect(membersNotifier.state[0], user); - }); - - test('Removing a user from the list', () { - final membersNotifier = MembersNotifier(); - final user1 = SimpleUser.empty().copyWith(id: '1', name: 'John'); - final user2 = SimpleUser.empty().copyWith(id: '2', name: 'Jane'); - membersNotifier.add(user1); - membersNotifier.add(user2); - membersNotifier.remove(user1); - expect(membersNotifier.state.length, 1); - expect(membersNotifier.state[0], user2); - }); - - test('Removing a user that doesn\'t exist in the list', () { - final membersNotifier = MembersNotifier(); - final user1 = SimpleUser.empty().copyWith(id: '1', name: 'John'); - final user2 = SimpleUser.empty().copyWith(id: '2', name: 'Jane'); - membersNotifier.add(user1); - membersNotifier.remove(user2); - expect(membersNotifier.state.length, 1); - expect(membersNotifier.state[0], user1); - }); - }); -} diff --git a/test/amap/is_amap_admin_provider_test.dart b/test/amap/is_amap_admin_provider_test.dart index 25701e762e..bfa74caac3 100644 --- a/test/amap/is_amap_admin_provider_test.dart +++ b/test/amap/is_amap_admin_provider_test.dart @@ -2,7 +2,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:titan/admin/class/permissions.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/amap/providers/is_amap_admin_provider.dart'; import 'package:titan/amap/tools/constants.dart'; import 'package:titan/user/class/user.dart'; diff --git a/test/cinema/is_cinema_admin_test.dart b/test/cinema/is_cinema_admin_test.dart index b62c1c5429..9f2c9751dc 100644 --- a/test/cinema/is_cinema_admin_test.dart +++ b/test/cinema/is_cinema_admin_test.dart @@ -2,7 +2,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/permissions.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/cinema/providers/is_cinema_admin.dart'; import 'package:titan/cinema/tools/constants.dart'; import 'package:titan/user/class/user.dart'; diff --git a/test/event/is_admin_provider_test.dart b/test/event/is_admin_provider_test.dart index 75b9a77d51..445d8acbdb 100644 --- a/test/event/is_admin_provider_test.dart +++ b/test/event/is_admin_provider_test.dart @@ -2,7 +2,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:titan/admin/class/permissions.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/event/providers/is_admin_provider.dart'; import 'package:titan/event/tools/constants.dart'; import 'package:titan/user/class/user.dart'; diff --git a/test/vote/is_vote_admin_provider_test.dart b/test/vote/is_vote_admin_provider_test.dart index 870ca4ebb9..15df96c1f9 100644 --- a/test/vote/is_vote_admin_provider_test.dart +++ b/test/vote/is_vote_admin_provider_test.dart @@ -2,7 +2,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:titan/admin/class/permissions.dart'; import 'package:titan/admin/class/simple_group.dart'; -import 'package:titan/admin/providers/permissions_list_provider.dart'; +import 'package:titan/admin/providers/permissions/permissions_list_provider.dart'; import 'package:titan/user/class/user.dart'; import 'package:titan/user/providers/user_provider.dart'; import 'package:titan/vote/providers/is_vote_admin_provider.dart';