public async Task <ActionResult> ScheduleWeekly(int userId) { var result = new List <ScheduleDayDTO>(); var sDay = new ScheduleDayDTO(); // { SelectableHours = new List<HoursData>() }; try { /* * // Day debe de estar enformato YYYYMMDD * if (day.Length != 8) * return BadRequest("Formato de Fecha Incorrecto. (YYYYMMDD)"); * * var y = Convert.ToInt32(day.Substring(0, 4)); * var m = Convert.ToInt32(day.Substring(4, 2)); * var d = Convert.ToInt32(day.Substring(6)); * * if (y < 2020 || m > 12 || d > 31) * return BadRequest("Fecha incorrecta."); */ //var date = new DateTime(y, m, d); var memberDb = await this._repo.GetMember(null, null, userId); if (memberDb == null) { return(BadRequest("Socio no encontrado.")); } if (!memberDb.User.IsActive) { return(BadRequest("Socio Bloqueado.")); } //var result = new List<DateTime>(); var count = 0; //var settings = await this._repo.GetGeneralSettings(); //var scheduleSettings = JsonConvert.DeserializeObject<List<ScheduleDaySettings>>(settings.ScheduledWeek); var settings = await this._repo.GetGeneralSettings(); var scheduleSettings = JsonConvert.DeserializeObject <List <ScheduleDaySettings> >(settings.ScheduledWeek); //resutl.Date = date; //var ss = scheduleSettings.First(stt => stt.Day.ToLower() == date.ToString("dddd").ToLower()); do { sDay = new ScheduleDayDTO() { Date = DateTime.Today.AddDays(count), SelectableHours = new List <HoursData>() }; var ss = scheduleSettings.FirstOrDefault(stt => stt.Day.ToLower() == sDay.Date.ToString("dddd").ToLower()); if (ss != null) { var userBookedDay = this._repo.GetUserBookedDay(memberDb.User.Id, sDay.Date); var scheduledDay = this._repo.GetBookedDay(sDay.Date); var currentAuthorizedCapacity = await this._repo.GetCurrentAuthorizedCapacity(sDay.Date); foreach (HoursRange hr in ss.RangeDates) { var hd = new HoursData(); hd.Range = string.Format("{0} - {1}", hr.StarHour, hr.EndHour); var time = hr.StarHour.Split(':'); var bookedTime = new DateTime(sDay.Date.Year, sDay.Date.Month, sDay.Date.Day, Convert.ToInt32(time[0]), Convert.ToInt32(time[1]), 0); var sdh = scheduledDay.FirstOrDefault(d => d.Schedule == bookedTime); if (sdh != null) { var availability = currentAuthorizedCapacity - sdh.Count; if (availability < settings.NotificationCapacity) { hd.Capacity = availability.ToString(); } if (userBookedDay != null && hr.StarHour == userBookedDay.Schedule.ToString("HH:mm")) { hd.Booked = true; } } sDay.SelectableHours.Add(hd); } result.Add(sDay); } count++; } while (result.Count < 7); return(Ok(result)); } catch (Exception ex) { new FileManagerHelper().RecordLogFile(MethodBase.GetCurrentMethod().ReflectedType.FullName, "UserId: " + userId.ToString(), ex); return(BadRequest(this._appSettings.Value.ServerError)); } }
public async Task <ActionResult> ScheduleDay(string day) { var resutl = new ScheduleDayDTO() { SelectableHours = new List <HoursData>() }; try { // Day debe de estar enformato YYYYMMDD if (day.Length != 8) { return(BadRequest("Formato de Fecha Incorrecto. (YYYYMMDD)")); } var y = Convert.ToInt32(day.Substring(0, 4)); var m = Convert.ToInt32(day.Substring(4, 2)); var d = Convert.ToInt32(day.Substring(6)); if (y < 2020 || m > 12 || d > 31) { return(BadRequest("Fecha incorrecta.")); } var date = new DateTime(y, m, d); var settings = await this._repo.GetGeneralSettings(); var scheduleSettings = JsonConvert.DeserializeObject <List <ScheduleDaySettings> >(settings.ScheduledWeek); var scheduledDay = this._repo.GetBookedDay(date); var currentAuthorizedCapacity = await this._repo.GetCurrentAuthorizedCapacity(date); resutl.Date = date; var ss = scheduleSettings.First(stt => stt.Day.ToLower() == date.ToString("dddd").ToLower()); foreach (HoursRange hr in ss.RangeDates) { var hd = new HoursData(); hd.Range = string.Format("{0} - {1}", hr.StarHour, hr.EndHour); var time = hr.StarHour.Split(':'); var bookedTime = new DateTime(date.Year, date.Month, date.Day, Convert.ToInt32(time[0]), Convert.ToInt32(time[1]), 0); var sdh = scheduledDay.FirstOrDefault(d => d.Schedule == bookedTime); var availability = currentAuthorizedCapacity - (sdh != null ? sdh.Count : 0); var p = (availability * 100) / currentAuthorizedCapacity; //hd.Capacity = string.Format("{0}%/{1}", p, availability.ToString()); hd.Capacity = currentAuthorizedCapacity.ToString(); hd.capPercentaje = p; hd.capPeople = availability; resutl.SelectableHours.Add(hd); } return(Ok(resutl)); } catch (Exception ex) { new FileManagerHelper().RecordLogFile(MethodBase.GetCurrentMethod().ReflectedType.FullName, day, ex); return(BadRequest(this._appSettings.Value.ServerError)); } }