public static List <DateTime> GetOptionalDaysPerService(int serviceId) { int day = (int)DateTime.Today.DayOfWeek + 1; DateTime date = DateTime.Now; List <activityTime> activityTimes = ActivityTimeDal.GetActivityTimes(serviceId); List <DateTime> optionalDays = new List <DateTime>(); var service = ServiceDal.GetServiceById(serviceId); int limitDays; if (service.kindOfPermission == true) { limitDays = service.limitDays.Value; } else { throw new Exception("בעסק זה לא ניתן לקבוע תורים מראש"); } for (int i = 0; i < limitDays; i++, day++) { if (day == 7) { day = 1; i++; limitDays++; } if (activityTimes.FirstOrDefault(a => a.dayInWeek == day) != null) { optionalDays.Add(date.AddDays(i)); } } return(optionalDays); }
/// <summary> /// get the avg per-day in all services of specific business /// </summary> /// <param name="businessId"></param> /// <returns></returns> public static List <List <double> > GetAvgForBusiness(int businessId) { //todo: check if it is cprrect List <List <double> > avgForService = new List <List <double> >(); var services = DAL.BusinessDal.GetBusinessById(businessId).services; if (services == null) { throw new Exception("there is no services!"); } int cnt = 0; foreach (var item in services) { var activityTimes = ActivityTimeDal.GetActivityTimes(item.serviceId); if (activityTimes == null) { throw new Exception("there is no activityTimes!"); } List <double> days = new List <double>(); for (int i = 0; i < 7; i++) { var dailyAC = activityTimes.Where(a => a.dayInWeek == i + 1); if (dailyAC != null && dailyAC.Count() > 0) { days.Add(dailyAC.Average(a => a.avgWaitings.Value)); } else { days.Add(0); } } avgForService.Add(days); cnt++; } return(avgForService); }
public static ActivityTimeDTO GetNearestActivityTime(TimeSpan time, int serviceId) { List <ActivityTimeDTO> activityTimes = new List <ActivityTimeDTO>(); activityTimes = converters.ActivityTimeConverters.GetListActivityTimesDTO(ActivityTimeDal.GetActivityTimes(serviceId)); activityTimes = activityTimes.Where(a => a.DayInWeek == (int)DateTime.Now.DayOfWeek + 1 && a.StartDate <= DateTime.Now && a.EndDate <= DateTime.Now && a.StartTime >= time).OrderBy(t => t.StartTime).Take(1).ToList(); if (activityTimes.Count() == 0) { return(null); } return(activityTimes[0]); }
/// <summary> /// הפונקציה מקבלת שעה וקוד שירות ומחפשת את המשמרת בשירות הספציפי בהתאם לשעה שקיבלה /// </summary> /// <param name="time">שעה</param> /// <param name="serviceId">קוד שירות</param> /// <returns>קוד משמרת </returns> public static ActivityTimeDTO GetActivityTime(DateTime time, int serviceId) { List <ActivityTimeDTO> activityTimes = new List <ActivityTimeDTO>(); activityTimes = converters.ActivityTimeConverters.GetListActivityTimesDTO(ActivityTimeDal.GetActivityTimes(serviceId)); ActivityTimeDTO activityTime = activityTimes.FirstOrDefault(a => a.DayInWeek == ((int)time.DayOfWeek + 1) && a.StartTime <= time.TimeOfDay && a.EndTime > time.TimeOfDay && a.StartDate <= time && (a.EndDate == null || a.EndDate >= time)); if (activityTime == null) { activityTime = ActivityTimeBL.GetNearestActivityTime(time.TimeOfDay, serviceId); } return(activityTime); }