public List<MemberViewModel> MemberSave(MemberViewModel mvm)
        {
            TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;

            List<MemberViewModel> cvmList = new List<MemberViewModel>();
            using (SlpContext context = new SlpContext())
            {
                SlpApplication slpApp = context.SlpApplication.Find(mvm.AppId);
                if (slpApp == null)
                {
                    context.SlpApplication.Add(new SlpApplication { Id = mvm.AppId, CreateDate = DateTime.Now });
                }                

                if (mvm.Id == new Guid()) //add child
                {
                    mvm.Id = Guid.NewGuid();
                    context.Members.Add(new Member {
                        Id = mvm.Id,
                        SlpApplicationId = mvm.AppId,
                        FirstName = textInfo.ToTitleCase(mvm.FirstName.ToLower()),
                        LastName = textInfo.ToTitleCase(mvm.LastName.ToLower()),
                        MiddleInitial = mvm.MiddleInitial == "" || mvm.MiddleInitial == null ? "" : mvm.MiddleInitial.ToUpper(),
                        IsChild = mvm.IsChild,
                        CreatedDate = DateTime.Now });                    
                }
                else //update child
                {
                    Member child = context.Members.Where(a => a.Id == mvm.Id).FirstOrDefault();
                    child.FirstName = textInfo.ToTitleCase(mvm.FirstName.ToLower());                    
                    child.LastName = textInfo.ToTitleCase(mvm.LastName.ToLower());
                    child.MiddleInitial = mvm.MiddleInitial == "" || mvm.MiddleInitial == null ? "" : mvm.MiddleInitial.ToUpper();             
                }
                
                if (mvm.IsChild)
                {
                    context.MemberChildAttributes.RemoveRange(context.MemberChildAttributes.Where(a => a.MemberId == mvm.Id));
                    foreach (NameValueViewModel vm in mvm.ChildAttributes)
                    {
                        context.MemberChildAttributes.Add(new MemberChildAttribute { MemberId = mvm.Id, AttributeTypeId = vm.Value, IsSelected = vm.SelectedItem });
                    }
                }
                context.SaveChanges();
            }

            cvmList = GetMembers(mvm.AppId).Where(a => a.IsChild ==  mvm.IsChild).ToList();
            
            return cvmList;
        }
        public void SaveListViewModel(ListViewModel lvm)
        {
            using (SlpContext context = new SlpContext())
            {
                if (lvm.ListId == (int)ListEnum.AssistancePrograms)
                {
                    foreach (NameValueViewModel item in lvm.TableValues)
                    {
                        if (item.Value == 0 && item.Name != null && item.Name.Trim()!= "")
                        {
                            context.AssistanceProgram.Add(new AssistanceProgram { Name = item.Name, Visible = item.SelectedItem });
                        }
                        else {
                            var dbitem = context.AssistanceProgram.Find(item.Value);
                            dbitem.Name = item.Name;
                            dbitem.Visible = item.SelectedItem;
                        }
                    }
                }
                else if (lvm.ListId == (int)ListEnum.ChildCategories)
                {
                    foreach (NameValueViewModel item in lvm.TableValues)
                    {
                        if (item.Value == 0 && item.Name != null && item.Name.Trim() != "")
                        {
                            context.ChildAttributeTypes.Add(new ChildAttributeType { Name = item.Name, Visible = item.SelectedItem });
                        }
                        else
                        {
                            var dbitem = context.ChildAttributeTypes.Find(item.Value);
                            dbitem.Name = item.Name;
                            dbitem.Visible = item.SelectedItem;
                        }
                    }
                }
                else if (lvm.ListId == (int)ListEnum.EthnicityList)
                {
                    foreach (NameValueViewModel item in lvm.TableValues)
                    {
                        if (item.Value == 0 && item.Name != null && item.Name.Trim() != "")
                        {
                            context.Ethnicity.Add(new Ethnicity { Name = item.Name, Visible = item.SelectedItem });
                        }
                        else
                        {
                            var dbitem = context.Ethnicity.Find(item.Value);
                            dbitem.Name = item.Name;
                            dbitem.Visible = item.SelectedItem;
                        }
                    }
                }
                else if (lvm.ListId == (int)ListEnum.RaceList)
                {
                    foreach (NameValueViewModel item in lvm.TableValues)
                    {
                        if (item.Value == 0 && item.Name != null && item.Name.Trim() != "")
                        {
                            context.Race.Add(new Race { Name = item.Name, Visible = item.SelectedItem });
                        }
                        else
                        {
                            var dbitem = context.Race.Find(item.Value);
                            dbitem.Name = item.Name;
                            dbitem.Visible = item.SelectedItem;
                        }
                    }
                }
                else if (lvm.ListId == (int)ListEnum.IncomeFrequencies)
                {
                    foreach (NameValueViewModel item in lvm.TableValues)
                    {
                        if (item.Value == 0 && item.Name != null && item.Name.Trim() != "")
                        {
                            context.Frequency.Add(new Frequency { Name = item.Name, Visible = item.SelectedItem });
                        }
                        else
                        {
                            var dbitem = context.Frequency.Find(item.Value);
                            dbitem.Name = item.Name;
                            dbitem.Visible = item.SelectedItem;
                        }
                    }
                }
                else if (lvm.ListId == (int)ListEnum.IncomeQuestionsChild || lvm.ListId == (int)ListEnum.IncomeQuestionsAdult)
                {
                    foreach (NameValueViewModel item in lvm.TableValues)
                    {
                        if (item.Value == 0 && item.Name != null && item.Name.Trim() != "")
                        {
                            context.IncomeQuestions.Add(new IncomeQuestion {
                                Text = item.Name,
                                Visible = item.SelectedItem,
                                IsChild = lvm.ListId == (int)ListEnum.IncomeQuestionsChild,
                                Type = item.Type });
                        }
                        else
                        {
                            var dbitem = context.IncomeQuestions.Find(item.Value);
                            dbitem.Text = item.Name;
                            dbitem.Visible = item.SelectedItem;
                            dbitem.Type = item.Type;
                        }
                    }
                }
               


                context.SaveChanges();
            }

        }
        public List<MemberViewModel> SaveMemberIncome(IncomeViewModel ivm)
        {
            Member member = null;

            using (SlpContext context = new SlpContext())
            {
                member = context.Members.Find(ivm.MemberId);
                
                context.MemberIncomeResponses.RemoveRange(context.MemberIncomeResponses.Where(a => a.MemberId == ivm.MemberId));

                foreach (IncomeResponseViewModel irm in ivm.IncomeResponses)
                {
                    List<MemberIncomeResponseDetail> details = new List<MemberIncomeResponseDetail>();
                    if (irm.ResponseDetails.Count > 0)
                    {
                        details = irm.ResponseDetails.Select(a => new MemberIncomeResponseDetail { Amount = a.Amount.Value, CreatedDate = DateTime.Now, FrequencyId = a.FrequencyId.Value }).ToList();
                    }
                    context.MemberIncomeResponses.Add(new MemberIncomeResponse {
                        IncomeQuestionId = irm.IncomeQuestionId,
                        MemberId = ivm.MemberId,
                        Response = irm.Response.Value,
                        IncomeResponseDetails = details
                    });
                }
                context.SaveChanges();
            }

            return GetMembers(member.SlpApplicationId).Where(a => a.IsChild == member.IsChild).ToList();
        }
        public void SaveContactInformation(ContactViewModel cvm)
        {
            using (SlpContext context = new SlpContext())
            {
                SlpApplication dbApp = context.SlpApplication.Find(cvm.AppId);
                dbApp.StreetAddress = cvm.StreetAddress;
                dbApp.AptNo = cvm.AptNo;
                dbApp.City = cvm.City;
                dbApp.State = cvm.State;
                dbApp.Zip = cvm.Zip;
                dbApp.Email = cvm.Email;
                dbApp.Phone = cvm.Phone;
                dbApp.AdultFilledByName = cvm.AdultFilledByName == null || cvm.AdultFilledByName == "" ? "" : cvm.AdultFilledByName.ToUpper();
                dbApp.EthnicityId = cvm.EthnicityId;
                dbApp.CompletedDate = DateTime.Now;
                dbApp.Steps = string.Join(",", cvm.StepsRequired);

                if (!cvm.StepsRequired.Contains(2))  //if 2 not present, remove data for step 2
                {
                    dbApp.AssistanceProgramId = null;
                    dbApp.AssistanceProgramCaseNumber = "";
                }

                if (!cvm.StepsRequired.Contains(3))  //if 3 not present remove data from step 3, all adults, all income records, total members, ssn field and no ssn field
                {
                    dbApp.TotalMembers = null;
                    dbApp.MemberLastFourSSN = null;
                    dbApp.NoSSN = false;
                    context.Members.RemoveRange(context.Members.Where(a=>a.SlpApplicationId == cvm.AppId && a.IsChild == false)); //remove adults

                    //remove all income responses and income details
                    List<Guid> allmembers = context.Members.Where(a => a.SlpApplicationId == cvm.AppId).Select(a => a.Id).ToList();
                    context.MemberIncomeResponses.RemoveRange(context.MemberIncomeResponses.Where(a=> allmembers.Contains(a.MemberId)));
                }                

                context.SlpApplicationRace.RemoveRange(context.SlpApplicationRace.Where(a => a.SlpApplicationId == cvm.AppId));

                foreach (NameValueViewModel selectedRace in cvm.Races.Where(a=>a.SelectedItem))
                {
                    context.SlpApplicationRace.Add(new SlpApplicationRace { SlpApplicationId = cvm.AppId, RaceId = selectedRace.Value });
                }
                            
                context.SaveChanges();
            }
        }
 public void SaveStep3(Step3ViewModel svm)
 {
     using (SlpContext context = new SlpContext())
     {
         SlpApplication dbApp = context.SlpApplication.Find(svm.AppId);
         dbApp.TotalMembers = svm.TotalMembers;
         dbApp.MemberLastFourSSN = svm.MemberLastFourSSN;
         dbApp.NoSSN = svm.NoSSN;
         context.SaveChanges();
     }
 }
 public void SaveAssistanceProgram(AssistanceProgramViewModel apvm)
 {
     using (SlpContext context = new SlpContext())
     {
         SlpApplication dbApp = context.SlpApplication.Find(apvm.AppId);
         dbApp.AssistanceProgramId = apvm.Id; // apvm.Id == null || apvm.Id ==  ? null : apvm.Id;
         dbApp.AssistanceProgramCaseNumber = apvm.Id == null || apvm.Id == (int)AssistanceProgramsEnum.None  ? "" : apvm.CaseNumber;
         context.SaveChanges();
     }
 }
 public List<MemberViewModel> MemberDelete(MemberViewModel mvm)
 {
     List<MemberViewModel> cvmList = new List<MemberViewModel>();
     using (SlpContext context = new SlpContext())
     {
         Member member = context.Members.Find(mvm.Id);
         context.Members.Remove(member);
         context.SaveChanges();
     }
     cvmList = GetMembers(mvm.AppId).Where(a => a.IsChild == mvm.IsChild).ToList();
     return cvmList;
 }