Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }