private NonTechVolunteer CreateVolunteer(NonTechVolunteerViewModel model, IEnumerable<int> selectedExpertiseLevels)
        {
            var volunteer = model.MapToNonTechVolunteerModel();
            volunteer.IsOnWaitList = _waitListHelper.SetWaitListStatus();
            foreach (var expertiseId in selectedExpertiseLevels)
            {
                volunteer.AreasOfExpertise.Add(_expertiseRepository.Get(expertiseId));
            }

            return volunteer;
        }
        public ActionResult SignUp(NonTechVolunteerViewModel model, FormCollection collection)
        {
            var selectedExpertiseIds = GetSelectedValues(collection, "areaseOfExpertise", true, "Please select at least one area of expertise.");

            if (!ModelState.IsValid)
            {
                InitializeViewBag(model);
                return View();
            }

            if (SaveVolunteer(model, selectedExpertiseIds))
            {
                return RedirectToAction("ThankYou");
            }

            ModelState.AddModelError("SignUpStatus", "Could not sign you up - please try again");
            InitializeViewBag(model);
            return View();
        }
 private bool SaveVolunteer(NonTechVolunteerViewModel model, IEnumerable<int> selectedExpertiseLevels)
 {
     if (ModelState.IsValid)
     {
         var volunteer = CreateVolunteer(model, selectedExpertiseLevels);
         _volunteerRepository.Save(volunteer);
         _notificationService.SendNotification(model.Email,
                                               volunteer.IsOnWaitList
                                                   ? VolunteerNotificationTemplate.WelcomeWaitingVolunteer
                                                   : VolunteerNotificationTemplate.WelcomeVolunteer);
         return true;
     }
     return false;
 }
 private void InitializeViewBag(NonTechVolunteerViewModel model)
 {
     ViewBag.Expertise = _expertiseRepository.FindAll().ToSelectList(j => j.Description, j => j.Id.ToString(), j => model != null && model.NonTechJobRoleIds != null && model.NonTechJobRoleIds.Contains(j.Id));
 }