private void BindCampusSchedulesGrid()
 {
     gCampusSchedules.DataSource = CampusSchedulesState
                                   .OrderBy(s => s.Order)
                                   .ThenBy(s => s.Schedule)
                                   .ToList();
     gCampusSchedules.DataBind();
 }
        /// <summary>
        /// Removes the schedule.
        /// </summary>
        /// <param name="campusScheduleGuid">The CampusSchedule guid.</param>
        private void RemoveScheduleState(Guid campusScheduleGuid)
        {
            var item = CampusSchedulesState.FirstOrDefault(a => a.Guid.Equals(campusScheduleGuid));

            if (item != null)
            {
                CampusSchedulesState.Remove(item);
            }
        }
        /// <summary>
        /// Handles the SaveClick event of the dlgSchedule control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void dlgSchedule_SaveClick(object sender, EventArgs e)
        {
            var campusScheduleGuid = hfCampusScheduleGuid.Value.AsGuidOrNull();

            CampusScheduleDTO campusSchedule;
            int          scheduleId     = spCampusSchedule.SelectedValueAsId().Value;
            int          scheduleTypeId = dvpScheduleType.SelectedValueAsId().Value;
            Schedule     schedule;
            DefinedValue scheduleType;

            using (var rockContext = new RockContext())
            {
                schedule     = new ScheduleService(rockContext).Get(scheduleId);
                scheduleType = new DefinedValueService(rockContext).Get(scheduleTypeId);
            }

            if (campusScheduleGuid == null || campusScheduleGuid == Guid.Empty)
            {
                campusSchedule = new CampusScheduleDTO()
                {
                    Guid  = Guid.NewGuid(),
                    Order = CampusSchedulesState.Any() ? CampusSchedulesState.Max(s => s.Order) + 1 : 0
                };

                CampusSchedulesState.Add(campusSchedule);
            }
            else
            {
                campusSchedule = CampusSchedulesState.FirstOrDefault(s => s.Guid.Equals(campusScheduleGuid));
            }

            campusSchedule.ScheduleId     = scheduleId;
            campusSchedule.Schedule       = schedule.Name;
            campusSchedule.ScheduleTypeId = scheduleTypeId;
            campusSchedule.ScheduleType   = scheduleType.Value;

            dlgSchedule.Hide();
            BindCampusSchedulesGrid();
        }
 /// <summary>
 /// Gets the CampusSchedule.
 /// </summary>
 /// <param name="campusScheduleGuid">The CampusSchedule guid.</param>
 private CampusScheduleDTO GetCampusSchedule(Guid campusScheduleGuid)
 {
     return(CampusSchedulesState.Where(s => s.Guid == campusScheduleGuid).FirstOrDefault());
 }
        /// <summary>
        /// Handles the Click event of the btnSave control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!ValidateCampus())
            {
                // Error messaging handled by ValidateCampus
                return;
            }

            if (!IsFormValid())
            {
                return;
            }

            Campus campus;
            var    rockContext     = new RockContext();
            var    campusService   = new CampusService(rockContext);
            var    locationService = new LocationService(rockContext);

            int campusId = HiddenCampusId;

            if (campusId == 0)
            {
                campus = new Campus();
                campusService.Add(campus);
                var orders = campusService.Queryable()
                             .AsNoTracking()
                             .Select(t => t.Order)
                             .ToList();

                campus.Order = orders.Any() ? orders.Max(t => t) + 1 : 0;
            }
            else
            {
                campus = campusService.Get(campusId);
            }

            campus.Name                = tbCampusName.Text;
            campus.IsActive            = cbIsActive.Checked;
            campus.Description         = tbDescription.Text;
            campus.CampusStatusValueId = dvpCampusStatus.SelectedValueAsInt();
            campus.CampusTypeValueId   = dvpCampusType.SelectedValueAsInt();
            campus.Url         = urlCampus.Text;
            campus.PhoneNumber = pnbPhoneNumber.Number;
            campus.LocationId  = lpLocation.Location.Id;
            campus.ShortCode   = tbCampusCode.Text;
            campus.TimeZoneId  = ddlTimeZone.SelectedValue;

            var personService = new PersonService(rockContext);
            var leaderPerson  = personService.GetNoTracking(ppCampusLeader.SelectedValue ?? 0);

            campus.LeaderPersonAliasId = leaderPerson != null ? leaderPerson.PrimaryAliasId : null;

            campus.ServiceTimes = kvlServiceTimes.Value;


            // Remove any CampusSchedules that were removed in the UI
            var selectedSchedules = CampusSchedulesState.Select(s => s.Guid);
            var locationsToRemove = campus.CampusSchedules.Where(s => !selectedSchedules.Contains(s.Guid)).ToList();
            CampusScheduleService campusScheduleService = null;

            foreach (var campusSchedule in locationsToRemove)
            {
                campusScheduleService = campusScheduleService ?? new CampusScheduleService(rockContext);
                campus.CampusSchedules.Remove(campusSchedule);
                campusScheduleService.Delete(campusSchedule);
            }

            // Add/Update any CampusSchedules that were added or changed in the UI.
            foreach (var campusScheduleState in CampusSchedulesState)
            {
                var campusSchedule = campus.CampusSchedules.Where(s => s.Guid == campusScheduleState.Guid).FirstOrDefault();
                if (campusSchedule == null)
                {
                    campusSchedule = new CampusSchedule()
                    {
                        CampusId            = campus.Id,
                        ScheduleId          = campusScheduleState.ScheduleId,
                        ScheduleTypeValueId = campusScheduleState.ScheduleTypeId,
                        Order = campusScheduleState.Order,
                        Guid  = Guid.NewGuid()
                    };
                    campus.CampusSchedules.Add(campusSchedule);
                }
                else
                {
                    campusSchedule.ScheduleId          = campusScheduleState.ScheduleId;
                    campusSchedule.ScheduleTypeValueId = campusScheduleState.ScheduleTypeId;
                }
            }

            SaveCampusTopics(campus, rockContext);

            avcAttributes.GetEditValues(campus);

            if (!campus.IsValid && campus.Location.IsValid)
            {
                // Controls will render the error messages
                return;
            }

            rockContext.WrapTransaction(() =>
            {
                rockContext.SaveChanges();
                campus.SaveAttributeValues(rockContext);
            });

            NavigateToCurrentPage(new Dictionary <string, string> {
                { "CampusId", campus.Id.ToString() }
            });
        }