Skip to content

Commit 018e3be

Browse files
authored
Merge pull request #161 from dpplanner/feature/160-반납-메시지-조회-권한-추가
feat: 반납 메시지 열람 권한 추가
2 parents c84463e + cce06c9 commit 018e3be

9 files changed

+109
-34
lines changed

dplanner/lib/pages/club_management_page.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,11 @@ class _ClubManagementPageState extends State<ClubManagementPage> {
5252
}, true),
5353
selectButton("예약 요청", () {
5454
if (MemberController.to.clubMember().role == "ADMIN" ||
55-
(MemberController.to.clubMember().clubAuthorityTypes !=
56-
null &&
57-
MemberController.to
58-
.clubMember()
59-
.clubAuthorityTypes!
60-
.contains("SCHEDULE_ALL"))) {
55+
(MemberController.to.clubMember().clubAuthorityTypes != null
56+
&& (MemberController.to.clubMember().clubAuthorityTypes!.contains("SCHEDULE_ALL")
57+
|| MemberController.to.clubMember().clubAuthorityTypes!.contains("RETURN_MSG_READ"))
58+
)
59+
) {
6160
Get.toNamed('/reservation_list');
6261
} else {
6362
snackBar(title: "권한이 없습니다", content: "클럽 관리자에게 권한을 요청하세요");

dplanner/lib/pages/club_manager_list_page.dart

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ class _ClubManagerListPageState extends State<ClubManagerListPage> {
168168
bool isChecked2 = manager.authorities.contains("POST_ALL") ? true : false;
169169
bool isChecked3 = manager.authorities.contains("MEMBER_ALL") ? true : false;
170170
bool isChecked4 = manager.authorities.contains("RESOURCE_ALL") ? true : false;
171+
bool isChecked5 = manager.authorities.contains("RETURN_MSG_READ") ? true : false;
171172

172173
Get.bottomSheet(
173174
isScrollControlled: true,
@@ -380,6 +381,34 @@ class _ClubManagerListPageState extends State<ClubManagerListPage> {
380381
),
381382
],
382383
),
384+
Row(
385+
mainAxisAlignment: MainAxisAlignment.start,
386+
children: [
387+
IconButton(
388+
onPressed: () {
389+
if (types == 1) {
390+
return;
391+
}
392+
setState(() {
393+
isChecked5 = !isChecked5;
394+
});
395+
},
396+
icon: const Icon(SFSymbols.square),
397+
selectedIcon: Icon(
398+
SFSymbols.checkmark_square_fill,
399+
color: types == 1 ? AppColor.subColor5 : AppColor.objectColor,
400+
),
401+
isSelected: isChecked5 ? true : false,
402+
),
403+
const Text(
404+
"반납 메시지 열람 권한",
405+
style: TextStyle(
406+
fontSize: 14,
407+
fontWeight: FontWeight.w600,
408+
),
409+
),
410+
],
411+
),
383412
],
384413
),
385414
),
@@ -415,6 +444,9 @@ class _ClubManagerListPageState extends State<ClubManagerListPage> {
415444
if (isChecked4) {
416445
authorities.add("RESOURCE_ALL");
417446
}
447+
if (isChecked5) {
448+
authorities.add("RETURN_MSG_READ");
449+
}
418450
ClubManagerModel temp =
419451
await ClubManagerApiService.postClubManager(
420452
clubId: ClubController.to.club().id,
@@ -481,6 +513,9 @@ class _ClubManagerListPageState extends State<ClubManagerListPage> {
481513
if (isChecked4) {
482514
authorities.add("RESOURCE_ALL");
483515
}
516+
if (isChecked5) {
517+
authorities.add("RETURN_MSG_READ");
518+
}
484519
ClubManagerModel temp =
485520
await ClubManagerApiService.putClubManager(
486521
id: manager.id,

dplanner/lib/pages/club_reservation_list_tab1_page.dart

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22

33
import 'package:dplanner/controllers/club.dart';
4+
import 'package:dplanner/controllers/member.dart';
45
import 'package:dplanner/services/reservation_api_service.dart';
56
import 'package:flutter/material.dart';
67

@@ -95,7 +96,33 @@ class _ClubReservationListTab1PageState
9596
stream: _requestRController.stream,
9697
builder: (BuildContext context,
9798
AsyncSnapshot<List<ReservationModel>> snapshot) {
98-
if (snapshot.data == null && !_isLoading) {
99+
if (!(MemberController.to.clubMember().role == "ADMIN"
100+
|| (MemberController.to.clubMember().clubAuthorityTypes != null
101+
&& MemberController.to.clubMember().clubAuthorityTypes!.contains("SCHEDULE_ALL")))
102+
) {
103+
return Column(
104+
children: [
105+
const BannerAdWidget(),
106+
ConstrainedBox(
107+
constraints: BoxConstraints(
108+
minHeight: constraints.maxHeight - 50),
109+
child: const Column(
110+
mainAxisAlignment: MainAxisAlignment.center,
111+
children: [
112+
Center(
113+
child: Text(
114+
"권한이 없습니다",
115+
style: TextStyle(
116+
fontWeight: FontWeight.w600,
117+
fontSize: 16),
118+
),
119+
),
120+
],
121+
),
122+
),
123+
],
124+
);
125+
} else if (snapshot.data == null && !_isLoading) {
99126
return Column(
100127
children: [
101128
const BannerAdWidget(),

dplanner/lib/pages/club_reservation_list_tab2_page.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:flutter/cupertino.dart';
77
import 'package:flutter/material.dart';
88
import 'package:flutter_sfsymbols/flutter_sfsymbols.dart';
99

10+
import '../controllers/member.dart';
1011
import '../models/reservation_model.dart';
1112
import '../const/style.dart';
1213
import '../widgets/banner_ad_widget.dart';
@@ -154,9 +155,9 @@ class _ClubReservationListTab2PageState
154155
},
155156
),
156157
),
157-
if (DateTime.parse(
158-
snapshot.data![index].endDateTime)
159-
.isBefore(DateTime.now()))
158+
if (MemberController.to.clubMember().clubAuthorityTypes != null
159+
&& MemberController.to.clubMember().clubAuthorityTypes!.contains("RETURN_MSG_READ")
160+
&& DateTime.parse(snapshot.data![index].endDateTime).isBefore(DateTime.now()))
160161
Padding(
161162
padding: const EdgeInsets.only(
162163
bottom: 12.0),

dplanner/lib/pages/club_reservation_list_tab3_page.dart

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:dplanner/controllers/club.dart';
44
import 'package:dplanner/services/reservation_api_service.dart';
55
import 'package:flutter/material.dart';
66

7+
import '../controllers/member.dart';
78
import '../models/reservation_model.dart';
89
import '../widgets/banner_ad_widget.dart';
910
import '../widgets/reservation_admin_card.dart';
@@ -95,7 +96,33 @@ class _ClubReservationListTab3PageState
9596
stream: _rejectedRController.stream,
9697
builder: (BuildContext context,
9798
AsyncSnapshot<List<ReservationModel>> snapshot) {
98-
if (snapshot.data == null && !_isLoading) {
99+
if (!(MemberController.to.clubMember().role == "ADMIN"
100+
|| (MemberController.to.clubMember().clubAuthorityTypes != null
101+
&& MemberController.to.clubMember().clubAuthorityTypes!.contains("SCHEDULE_ALL")))
102+
) {
103+
return Column(
104+
children: [
105+
const BannerAdWidget(),
106+
ConstrainedBox(
107+
constraints: BoxConstraints(
108+
minHeight: constraints.maxHeight - 50),
109+
child: const Column(
110+
mainAxisAlignment: MainAxisAlignment.center,
111+
children: [
112+
Center(
113+
child: Text(
114+
"권한이 없습니다",
115+
style: TextStyle(
116+
fontWeight: FontWeight.w600,
117+
fontSize: 16),
118+
),
119+
),
120+
],
121+
),
122+
),
123+
],
124+
);
125+
} else if (snapshot.data == null && !_isLoading) {
99126
return Column(
100127
children: [
101128
const BannerAdWidget(),

dplanner/lib/pages/club_timetable_page.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1812,7 +1812,7 @@ class _ClubTimetablePageState extends State<ClubTimetablePage> {
18121812
.clubMember()
18131813
.clubAuthorityTypes!
18141814
.contains(
1815-
"SCHEDULE_ALL")) ||
1815+
"RETURN_MSG_READ")) ||
18161816
reservation.clubMemberId ==
18171817
MemberController.to
18181818
.clubMember()

dplanner/lib/services/reservation_api_service.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ class ReservationApiService {
221221

222222
// 예외 처리; 메시지를 포함한 예외를 던짐
223223
String errorMessage = jsonDecode(response.body)['message'] ?? 'Error';
224-
print(errorMessage);
224+
print(response.statusCode);
225225
throw ErrorDescription(errorMessage);
226226
}
227227

dplanner/lib/widgets/notification_card.dart

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,6 @@ class _NotificationCardState extends State<NotificationCard> {
130130
|| (user.clubAuthorityTypes != null && user.clubAuthorityTypes!.contains(authority));
131131
}
132132

133-
Future<bool> _isReservationRequest(String reservationId) async {
134-
ReservationModel reservation = await ReservationApiService.getReservation(reservationId: int.parse(reservationId));
135-
136-
// 승인된 예약(status = CONFIRMED)인데 내 예약이 아닌 경우
137-
if (reservation.status == "REQUEST"
138-
|| reservation.clubMemberId != MemberController.to.clubMember().id) {
139-
return true;
140-
}
141-
142-
return false;
143-
}
144-
145133
Future<bool> _isPastReservation(String reservationId) async {
146134
ReservationModel reservation = await ReservationApiService.getReservation(reservationId: int.parse(reservationId));
147135

@@ -200,13 +188,11 @@ class _NotificationCardState extends State<NotificationCard> {
200188
}
201189

202190
Future<void> _handleReservationRequestNotification() async {
203-
String reservationId = widget.info!;
204-
205191
if (hasAuthority("SCHEDULE_ALL")) { // 권한 변경 후에도 들어가는거 방지
206192
// 예약 요청 -> 예약 관리 - 승인된 이후에도 동일하게
193+
String reservationId = widget.info!;
207194
_toReservationManagePage(reservationId: reservationId, isReturned: null);
208195
}
209-
210196
}
211197

212198
void _handleReservationRejectNotification() {
@@ -241,9 +227,11 @@ class _NotificationCardState extends State<NotificationCard> {
241227
}
242228

243229
Future<void> _handleReturnInfoNotification() async {
244-
// 반납 메시지 도착 -> 예약 요청 > 승인한 예약
245-
String reservationId = widget.info!;
246-
_toReservationManagePage(reservationId: reservationId, isReturned: true);
230+
if(hasAuthority("RETURN_MSG_READ")) {
231+
// 반납 메시지 도착 -> 예약 요청 > 승인한 예약
232+
String reservationId = widget.info!;
233+
_toReservationManagePage(reservationId: reservationId, isReturned: true);
234+
}
247235
}
248236

249237
Future<void> _toReservationManagePage({required String reservationId, required bool? isReturned}) async {

dplanner/lib/widgets/reservation_big_card.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -777,9 +777,7 @@ class ReservationBigCard extends StatelessWidget {
777777
],
778778
),
779779
),
780-
if (reservation.returned &&
781-
MemberController.to.clubMember().role ==
782-
"ADMIN")
780+
if (reservation.returned)
783781
Column(
784782
crossAxisAlignment:
785783
CrossAxisAlignment.start,

0 commit comments

Comments
 (0)