Skip to content

Commit

Permalink
feat: reset coupons on checkout
Browse files Browse the repository at this point in the history
  • Loading branch information
NanoNish committed Sep 28, 2023
1 parent c9ce960 commit 52deb4b
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 5 deletions.
27 changes: 24 additions & 3 deletions lib/presentation/week_menu/bloc/week_menu_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class WeekMenuBlocBloc extends Bloc<WeekMenuBlocEvent, WeekMenuBlocState> {
on<DateChangeEvent>(_onDateChangeEvent);
on<MealLeaveEvent>(_onMealLeaveEvent);
on<MealCouponEvent>(_onMealCouponEvent);
on<CheckoutEvent>(_onCheckout);
}

void _onDayChangeEvent(
Expand Down Expand Up @@ -111,20 +112,24 @@ class WeekMenuBlocBloc extends Bloc<WeekMenuBlocEvent, WeekMenuBlocState> {
_onMealLeaveEvent(
MealLeaveEvent event, Emitter<WeekMenuBlocState> emit) async {
try {
late LeaveStatusEnum newLeaveStatus;
late LeaveStatusEnum newLeaveStatus = event.meal.leaveStatus.status;
late CouponStatus newCouponStatus = event.meal.couponStatus;
if (event.meal.leaveStatus.status == LeaveStatusEnum.P) {
try {
await leaveRepository.cancelLeave(event.meal);
newLeaveStatus = LeaveStatusEnum.N;
} catch (e) {
newLeaveStatus = LeaveStatusEnum.P;
emit((state as WeekMenuBlocDisplayState)
.copyWith(error: 'Something went wrong!'));
}
} else {
try {
await leaveRepository.applyLeave(event.meal);
newLeaveStatus = LeaveStatusEnum.P;
newCouponStatus = CouponStatus(status: CouponStatusEnum.N);
} catch (e) {
newLeaveStatus = LeaveStatusEnum.N;
emit((state as WeekMenuBlocDisplayState)
.copyWith(error: 'Something went wrong!'));
}
}
WeekMenu weekMenu = (state as WeekMenuBlocDisplayState).weekMenu;
Expand All @@ -135,6 +140,7 @@ class WeekMenuBlocBloc extends Bloc<WeekMenuBlocEvent, WeekMenuBlocState> {
if (meal.id == event.meal.id) {
weekMenu.dayMenus[dayNumber].meals[index] = meal.copyWith(
leaveStatus: LeaveStatus(status: newLeaveStatus),
couponStatus: newCouponStatus,
);
}
}
Expand Down Expand Up @@ -177,6 +183,21 @@ class WeekMenuBlocBloc extends Bloc<WeekMenuBlocEvent, WeekMenuBlocState> {
}
}

void _onCheckout(event, Emitter<WeekMenuBlocState> emit) {
if (state is WeekMenuBlocDisplayState) {
WeekMenu weekMenu = (state as WeekMenuBlocDisplayState).weekMenu;
for (DayMenu menu in weekMenu.dayMenus) {
for (Meal meal in menu.meals) {
if (!meal.isLeaveToggleOutdated) {
meal.couponStatus = CouponStatus(status: CouponStatusEnum.N);
}
}
}
emit((state as WeekMenuBlocDisplayState).copyWith(weekMenu: weekMenu));
}
emit(state);
}

int getDayNumber(WeekMenu weekMenu, int dayIndex) {
for (int i = 0; i < weekMenu.dayMenus.length; i++) {
if (weekMenu.dayMenus[i].date.weekday == dayIndex + 1) {
Expand Down
4 changes: 4 additions & 0 deletions lib/presentation/week_menu/bloc/week_menu_event.dart
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,7 @@ class MealLeaveEvent extends WeekMenuBlocEvent {
@override
List<Object> get props => [meal];
}

class CheckoutEvent extends WeekMenuBlocEvent {
const CheckoutEvent();
}
7 changes: 5 additions & 2 deletions lib/presentation/week_menu/bloc/week_menu_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,28 @@ class WeekMenuBlocDisplayState extends WeekMenuBlocState {
required this.currDayIndex,
required this.dayNumber,
required this.jugaad,
this.error = '',
});

final WeekMenu weekMenu;
final int currDayIndex;
final int dayNumber;
final bool jugaad;
final String error;

WeekMenuBlocDisplayState copyWith(
{WeekMenu? weekMenu, int? currDayIndex, int? dayNumber}) {
{WeekMenu? weekMenu, int? currDayIndex, int? dayNumber, String? error}) {
return WeekMenuBlocDisplayState(
weekMenu: weekMenu ?? this.weekMenu,
currDayIndex: currDayIndex ?? this.currDayIndex,
dayNumber: dayNumber ?? this.dayNumber,
jugaad: !jugaad,
error: error ?? '',
);
}

@override
List<Object> get props => [weekMenu, currDayIndex, dayNumber, jugaad];
List<Object> get props => [weekMenu, currDayIndex, dayNumber, jugaad, error];
}

class WeekMenuBlocLoadingState extends WeekMenuBlocState {
Expand Down
8 changes: 8 additions & 0 deletions lib/presentation/week_menu/menu_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ class WeekMenuScreen extends StatelessWidget {
context
.read<AppBloc>()
.add(const ToggleCheckOutStatusEvent());
final bool isCheckout =
context.read<AppBloc>().state.user!.isCheckedOut;
// Triggers when clicked on check-in button to avoid false triggers on failed checkouts
if (isCheckout) {
context
.read<WeekMenuBlocBloc>()
.add(const CheckoutEvent());
}
},
child:
const RoundEdgeTextOnlyContainer(text: "CHECK IN"),
Expand Down

0 comments on commit 52deb4b

Please sign in to comment.