Beispiel #1
0
        List<BookingStatus> IBookingRule.RemoveInvalidBookingStatus(StudentBookingContext studentBookingContext, ClassBookingContext classBookingContext)
        {
            List<BookingStatus> result = null;

            switch ((ClassCategory)classBookingContext.ScheduledClassInfo.ClassCategory_id)
            {
                case ClassCategory.F2F:
                    break;
                case ClassCategory.WS:
                    break;
                case ClassCategory.LC:
                case ClassCategory.CW:
                    //if (studentBookingContext.StuentProductInfo.ProductID == ProductPackage_Ids.AlumniClub)
                    //{
                    //    if (studentBookingContext.BookingSummary.LCCWQtyPerMonth >= studentBookingContext.StuentProductInfo.LCCW_PerMonth
                    //    || studentBookingContext.BookingSummary.LCCWQtyPerWeek >= studentBookingContext.StuentProductInfo.LCCW_PerWeek)
                    //    {
                    //        result = new List<BookingStatus>() { BookingStatus.All };
                    //    }
                    //    else if (studentBookingContext.BookingSummary.LGQtyPerOpen >= studentBookingContext.StuentProductInfo.LG_PerTime)
                    //    {
                    //        result = new List<BookingStatus>() { BookingStatus.Booked, BookingStatus.Waiting };
                    //    }
                    //}

                    break;
                default:
                    break;
            }

            return result;
        }
Beispiel #2
0
        public List<BookingStatus> RemoveInvalidBookingStatus(StudentBookingContext studentBookingContext, ClassBookingContext classBookingContext)
        {
            List<BookingStatus> result = null;

            ClassCategory classCategory = (ClassCategory)classBookingContext.ScheduledClassInfo.ClassCategory_id;

            //predefined class category group info list
            var groupInfoList = ClassCategoryGroupCacheSvc.Instance.GetClassCategoryGroupInfoByClassCategory(classCategory);

            foreach (var groupInfo in groupInfoList)
            {
                var bookingLimitLkpList = BookingLimitLkpList.LoadBookingLimitLkp(groupInfo.ClassCategoryGroup_id, studentBookingContext.Student.Product_id.GetValueOrDefault());

                if (bookingLimitLkpList != null && bookingLimitLkpList.Count > 0)
                {
                    //check booking limit

                    var bookingLimitLkp = bookingLimitLkpList.First();

                    // PremiumV1's weekcount doesn't include no F2F standby classes
                    int weekCount = studentBookingContext.StudentSelectedWeekBooking.BookingInfoList.Count(
                        info => groupInfo.ClassCategory_ids.Any(id => id == ScheduledClassCacheSvc.Instance.LoadByScheduledClass_id(info.ScheduledClass_id).ClassCategory_id)
                        && (info.BookingStatus_id == (short)BookingStatus.Booked
                            || (info.BookingStatus_id == (short)BookingStatus.Standby
                                && (classCategory == ClassCategory.F2F
                                    || studentBookingContext.Student.Product_id.Value != (short)ProductPackage_Ids.PremiumV1
                                    )
                                )
                            || info.BookingStatus_id == (short)BookingStatus.Checkin
                            || info.BookingStatus_id == (short)BookingStatus.NoShow
                            || info.BookingStatus_id == (short)BookingStatus.Waiting
                            || info.BookingStatus_id == (short)BookingStatus.TentativelyBooked
                        )
                        );

                    int monthCount = studentBookingContext.StudentSelectedMonthBooking.BookingInfoList.Count(
                        info => groupInfo.ClassCategory_ids.Any(id => id == ScheduledClassCacheSvc.Instance.LoadByScheduledClass_id(info.ScheduledClass_id).ClassCategory_id)
                        && (info.BookingStatus_id == (short)BookingStatus.Booked
                            || info.BookingStatus_id == (short)BookingStatus.Standby
                            || info.BookingStatus_id == (short)BookingStatus.Checkin
                            || info.BookingStatus_id == (short)BookingStatus.NoShow
                            || info.BookingStatus_id == (short)BookingStatus.Waiting
                            || info.BookingStatus_id == (short)BookingStatus.TentativelyBooked
                        )
                        );

                    int openCount = studentBookingContext.StudentBookingInfo.BookingInfoList.Count(
                        info => groupInfo.ClassCategory_ids.Any(id => id == ScheduledClassCacheSvc.Instance.LoadByScheduledClass_id(info.ScheduledClass_id).ClassCategory_id)
                        && (info.BookingStatus_id == (short)BookingStatus.Booked
                            || info.BookingStatus_id == (short)BookingStatus.Waiting
                            || info.BookingStatus_id == (short)BookingStatus.TentativelyBooked
                            || info.BookingStatus_id == (short)BookingStatus.Standby
                        )
                        );

                    if (bookingLimitLkp.WeekLimit.HasValue && 0 <= bookingLimitLkp.WeekLimit.Value && bookingLimitLkp.WeekLimit.Value <= weekCount)
                    {
                        // PremiumV1 can standy WS,LC,CW class when reach weeklimit.
                        if (studentBookingContext.Student.Product_id.Value == (short)ProductPackage_Ids.PremiumV1
                            && classCategory != ClassCategory.F2F)
                        {
                            return new List<BookingStatus>() { BookingStatus.Booked, BookingStatus.Waiting, BookingStatus.TentativelyBooked };
                        }
                        else
                        {
                            return new List<BookingStatus>() { BookingStatus.All };
                        }
                    }

                    if (bookingLimitLkp.MonthLimit.HasValue && 0 <= bookingLimitLkp.MonthLimit.Value && bookingLimitLkp.MonthLimit.Value <= monthCount)
                    {
                        return new List<BookingStatus>() { BookingStatus.All };
                    }

                    if (bookingLimitLkp.OpenLimit.HasValue && 0 <= bookingLimitLkp.OpenLimit.Value && bookingLimitLkp.OpenLimit.Value <= openCount)
                    {
                        return new List<BookingStatus>() { BookingStatus.All };
                    }
                }
            }

            return result;
        }