private ConfigDaysOffViewModel GetDaysOffViewModel(bool showPast) { var currentDate = this.GetPracticeLocalNow().Date; var daysOffQuery = this.db.CFG_DayOff .Where(df => df.DoctorId == this.Doctor.Id); if (!showPast) { daysOffQuery = daysOffQuery .Where(df => df.Date >= currentDate); } var daysOff = daysOffQuery .OrderBy(x => x.Date).ToArray(); var viewModel = new ConfigDaysOffViewModel(); ConfigDaysOffViewModel.DayOff prevDayOff = null; ConfigDaysOffViewModel.DayOff groupDayOff = null; foreach (var eachDayOff in daysOff) { var dayOffViewModel = new ConfigDaysOffViewModel.DayOff { Date = eachDayOff.Date, Description = eachDayOff.Description, Id = eachDayOff.Id, }; bool isNewGroup = prevDayOff == null || dayOffViewModel.Date != prevDayOff.Date.AddDays(1.0) || dayOffViewModel.Description != prevDayOff.Description; if (isNewGroup) { groupDayOff = dayOffViewModel; viewModel.DaysOff.Add(dayOffViewModel); } else { if (groupDayOff.GroupItems == null) { groupDayOff.GroupItems = new List <ConfigDaysOffViewModel.DayOff>(); } groupDayOff.GroupItems.Add(dayOffViewModel); } prevDayOff = dayOffViewModel; } return(viewModel); }
public ActionResult DaysOff(ConfigDaysOffViewModel formModel, bool?showPast, string returnUrl) { var start = formModel.Start.Date; var end = (formModel.End ?? start).Date; // Validando o intervalo: // - verifica se algum dos dias já está sendo usado; // - verifica se a data de início é menor ou igual a de fim. if (start > end) { this.ModelState.AddModelError(() => formModel.End, "Data de fim deve ser maior ou igual a de início."); } if (this.db.CFG_DayOff .Where(df => df.DoctorId == this.Doctor.Id) .Where(df => df.Date >= start && df.Date <= end) .Any()) { this.ModelState.AddModelError(() => formModel.Start, "Já existe um dia marcado neste intervalo."); } // Salvando alterações caso esteja tudo certo. if (this.ModelState.IsValid) { // Adding each day in the date range, to the CFG_DayOff table. for (DateTime i = start; i <= end; i = i.AddDays(1.0)) { this.db.CFG_DayOff.AddObject(new CFG_DayOff { Date = i, Description = formModel.Description, Doctor = this.Doctor, PracticeId = this.DbUser.PracticeId, }); } this.db.SaveChanges(); } // Returning the view with the new elements. var viewModel = GetDaysOffViewModel(showPast ?? false); this.ViewBag.ReturnUrl = returnUrl; this.ViewBag.ShowPast = showPast; return(this.View(viewModel)); }