Skip to content

Commit 3d75b9c

Browse files
authored
Merge pull request #359 from intersective/task/av2-292/Event-single-booking-feature
Task/av2 292/event single booking feature
2 parents b338169 + cbc1d34 commit 3d75b9c

4 files changed

Lines changed: 62 additions & 19 deletions

File tree

src/app/event-detail/event-detail.component.ts

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,25 @@ export class EventDetailComponent {
2424
confirmed() {
2525
switch (this.buttonText()) {
2626
case 'Book':
27-
this.eventDetailService.bookEvent(this.event).subscribe(response => {
28-
if (response.success) {
29-
this.notificationService.alert({
30-
message: 'Booked Successfully!',
31-
buttons: [
32-
{
33-
text: 'OK',
34-
role: 'cancel'
27+
if (this.event.singleBooking) {
28+
this.notificationService.alert({
29+
message: 'Booking this event will cancel your booking for other events within the same activity, do you still wanna book?',
30+
buttons: [
31+
{
32+
text: 'OK',
33+
handler: () => {
34+
this._bookEvent();
3535
}
36-
]
37-
});
38-
// update the event list & activity detail page
39-
this.utils.broadcastEvent('update-event', null);
40-
}
41-
});
36+
},
37+
{
38+
text: 'Cancel',
39+
role: 'cancel'
40+
}
41+
]
42+
});
43+
} else {
44+
this._bookEvent();
45+
}
4246
break;
4347

4448
case 'Cancel Booking':
@@ -67,10 +71,39 @@ export class EventDetailComponent {
6771
this.modalController.dismiss();
6872
}
6973

74+
private _bookEvent() {
75+
this.eventDetailService.bookEvent(this.event).subscribe(
76+
response => {
77+
this.notificationService.alert({
78+
message: 'Booked Successfully!',
79+
buttons: [
80+
{
81+
text: 'OK',
82+
role: 'cancel'
83+
}
84+
]
85+
});
86+
// update the event list & activity detail page
87+
this.utils.broadcastEvent('update-event', null);
88+
},
89+
error => {
90+
this.notificationService.alert({
91+
message: 'Booking failed, please try again later!',
92+
buttons: [
93+
{
94+
text: 'OK',
95+
role: 'cancel'
96+
}
97+
]
98+
});
99+
}
100+
);
101+
}
102+
70103
buttonText() {
71104
// for not booked event
72105
if (!this.event.isBooked) {
73-
if (!this.event.isPast && this.event.remainingCapacity > 0) {
106+
if (!this.event.isPast && this.event.remainingCapacity > 0 && this.event.canBook) {
74107
return 'Book';
75108
}
76109
return false;

src/app/event-detail/event-detail.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export class EventDetailService {
2323
bookEvent(event: Event) {
2424
return this.request.post(api.post.book, {
2525
event_id: event.id,
26-
delete_previous: 'no'
26+
delete_previous: event.singleBooking
2727
});
2828
}
2929

src/app/events/events.component.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,9 @@ export class EventsComponent extends RouterEnter {
134134
// group all past events as one group named "Expired"
135135
if (compareDate !== 'Expired') {
136136
compareDate = 'Expired';
137-
events.push(eventGroup);
137+
if (!this.utils.isEmpty(eventGroup.events)) {
138+
events.push(eventGroup);
139+
}
138140
eventGroup = {
139141
date: compareDate,
140142
events: []
@@ -146,7 +148,9 @@ export class EventsComponent extends RouterEnter {
146148
eventGroup.events.push(event);
147149
} else {
148150
// create a new group for this date
149-
events.push(eventGroup);
151+
if (!this.utils.isEmpty(eventGroup.events)) {
152+
events.push(eventGroup);
153+
}
150154
compareDate = this.utils.utcToLocal(event.startTime, 'date');
151155
eventGroup = {
152156
date: compareDate,

src/app/events/events.service.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export interface Event {
3232
capacity: number;
3333
remainingCapacity: number;
3434
isBooked: boolean;
35+
singleBooking: boolean;
36+
canBook: boolean;
3537
isPast?: boolean;
3638
assessment?: {
3739
id: number;
@@ -93,7 +95,9 @@ export class EventsService {
9395
!this.utils.has(event, 'end') ||
9496
!this.utils.has(event, 'capacity') ||
9597
!this.utils.has(event, 'remaining_capacity') ||
96-
!this.utils.has(event, 'is_booked')) {
98+
!this.utils.has(event, 'is_booked') ||
99+
!this.utils.has(event, 'can_book') ||
100+
!this.utils.has(event, 'single_booking')) {
97101
return this.request.apiResponseFormatError('Event object format error');
98102
}
99103
events.push({
@@ -108,6 +112,8 @@ export class EventsService {
108112
capacity: event.capacity,
109113
remainingCapacity: event.remaining_capacity,
110114
isBooked: event.is_booked,
115+
singleBooking: event.single_booking,
116+
canBook: event.can_book,
111117
isPast: this.utils.timeComparer(event.start) < 0,
112118
assessment: this.utils.has(event, 'assessment.id') ? {
113119
id: event.assessment.id,

0 commit comments

Comments
 (0)