public async Task <ActionResult> AddChildren(int id)
        {
            if (id == default(int))
            {
                RedirectToAction("New");
            }

            AddChildrenViewModel viewModel = new AddChildrenViewModel();

            viewModel.AddChildrenModel = new AddChildrenModel();

            Person person = await ArenaAPIHelper.GetPerson(id);

            viewModel.ExistingFamilyMembers = await ArenaAPIHelper.GetFamily(person.FamilyId);

            viewModel.AddChildrenModel.Adult    = person;
            viewModel.AddChildrenModel.Children = new List <Member>();
            viewModel.AddChildrenModel.Children.Add(new Member());

            return(View(viewModel));
        }
        public async Task <ActionResult> AddChildren(AddChildrenModel AddChildrenModel)
        {
            RegistrationCompleteViewModel viewModel = new RegistrationCompleteViewModel();

            viewModel.ChildrenAdded = AddChildrenModel.Children;
            viewModel.Adult         = AddChildrenModel.Adult;

            if (AddChildrenModel.Children == null || AddChildrenModel.Children.Count == 0)
            {
                //family opted to not add any children
                return(View("RegistrationComplete", viewModel));
            }

            //we need to validate the data server side
            if (AddChildrenModel.Children.Any(x => !x.ChildIsValid))
            {
                ModelState.AddModelError("", "Every child family member requires a valid first name, last name, birthdate and gender.");
            }

            if (!ModelState.IsValid)
            {
                AddChildrenViewModel addChildviewModel = new AddChildrenViewModel();
                addChildviewModel.AddChildrenModel.Adult = AddChildrenModel.Adult;
                addChildviewModel.AddChildrenModel       = AddChildrenModel;
                return(View(viewModel));
            }

            Person adult = await ArenaAPIHelper.GetPerson(AddChildrenModel.Adult.PersonId);

            viewModel.Adult = adult;

            //everything looks good, lets add the kids to the family
            foreach (var child in AddChildrenModel.Children)
            {
                Person familyChild = MemberHelper.GetChildPersonFromMember(child, (Campus)adult.CampusId);
                familyChild.Addresses  = adult.Addresses;
                familyChild.FamilyId   = adult.FamilyId;
                familyChild.FamilyName = adult.FamilyName;
                familyChild.Phones     = adult.Phones;
                ArenaPostResult result = await ArenaAPIHelper.AddPerson(familyChild);

                if (!result.WasSuccessful)
                {
                    //stop processing and report error
                    return(View("Error", new HandleErrorInfo(new Exception("API request to add child failed."), "Home", "AddChildren")));
                }

                int newPersonId = result.ObjectId;

                //add to group
                result = await ArenaAPIHelper.AddPersonToGroup(newPersonId, ((Campus)adult.CampusId == Campus.Brownsboro)?(int)VisitorGroups.BrownsboroVisitors : (int)VisitorGroups.CliftonVisitors);

                if (!result.WasSuccessful)
                {
                    //stop processing and report error
                    return(View("Error", new HandleErrorInfo(new Exception("API request to add child to group failed."), "Home", "AddChildren")));
                }

                //add grade note
                result = await ArenaAPIHelper.AddPersonNote(newPersonId, child.Grade);

                if (!result.WasSuccessful)
                {
                    //stop processing and report error
                    return(View("Error", new HandleErrorInfo(new Exception("API request to add grade to child failed."), "Home", "AddChildren")));
                }
            }

            return(View("RegistrationComplete", viewModel));
        }