public async Task <IActionResult> Edit(long id, [Bind("ApplicationId,UniqueAppId,LiveStreetAddress,LiveCity,LiveState,LiveZipCode,MailingAddress,MailingCity,MailingState,MailingZipCode,Email,PhoneNumber,MessagePhone,DurationYears,DurationMonth,HousingStatus,CostMonthly,HousingType,NumberBedrooms,TotalPeople,HouseholdIncome,TargetGroup1,TargetGroup2,HeatSource,AnnualHeatCost,BackupHeatCost,UsedSurrogate,TotalEnergyCost,TotalAnnualElectricCosts,HifJsonData")] HifApplication hifApplication)
        {
            if (id != hifApplication.ApplicationId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(hifApplication);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!HifApplicationExists(hifApplication.ApplicationId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(hifApplication));
        }
        public async Task <IActionResult> Create([Bind("ApplicationId,UniqueAppId,LiveStreetAddress,LiveCity,LiveState,LiveZipCode,MailingAddress,MailingCity,MailingState,MailingZipCode,Email,PhoneNumber,MessagePhone,DurationYears,DurationMonth,HousingStatus,CostMonthly,HousingType,NumberBedrooms,TotalPeople,HouseholdIncome,TargetGroup1,TargetGroup2,HeatSource,AnnualHeatCost,BackupHeatCost,UsedSurrogate,TotalEnergyCost,TotalAnnualElectricCosts,HifJsonData")] HifApplication hifApplication)
        {
            if (ModelState.IsValid)
            {
                _context.Add(hifApplication);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(hifApplication));
        }
        public void SubmitApplication([FromBody] Centerstone.Models.HIF hif)
        {
            if (hif != null && ModelState.IsValid)
            {
                bool success = false;

                using (var transaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        HifApplication hifEntity = new HifApplication()
                        {
                            UniqueAppId    = hif.UniqueApplicationId.ToString(),
                            MailingZipCode = hif.Zip,
                            //TODO: hif.HeatSourcesTypes
                            //TODO: hif.HeatSourcess
                            PhoneNumber     = hif.ContactPhone,
                            Email           = hif.ContactEmail,
                            HouseholdIncome = hif.MonthlyHouseholdIncome,
                            HousingStatus   = hif.HouseholdStatus,
                            HousingType     = hif.HouseholdType,

                            HeatSources = hif.HeatSourcesTypes.Where(x => x.Value)?.Select(x => x.Name).Aggregate((current, next) => current + ", " + next),
                            //HeatSource = hif.HeatSources?.Aggregate((current, next) => current + ", " + next),
                            //TODO: HeatImages
                            //TODO: LeaseImages
                            //TODO: TipsSignatuure
                        };

                        //TODO: Adults ???
                        //TODO: Children ???

                        foreach (Person person in hif.People)
                        {
                            if (person.SocialSecurityNumber != null)
                            {
                                _hifRepository.AddPerson(new HouseholdMembers()
                                {
                                    IsPrimary   = person.IsPrimary,
                                    FullName    = person.FullName,
                                    DateOfBirth = person.DateOfBirth,
                                    Ssn         = person.SocialSecurityNumber,
                                    PaidAdult   = person.IsDesignatedAdult,
                                    //TODO: person.SocialSecurityImage -  these are just a list of GUIDs for images.
                                    //TODO: IncomeTypes = person.IncomeSources.Select(new IncomeTypes() {  } })
                                    //TODO: person.CensusData
                                });
                            }
                        }

                        using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
                            hifEntity.HifJsonData = reader.ReadToEnd();

                        _hifRepository.AddApplication(hifEntity);

                        transaction.Commit();
                        success = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                    }
                }
            }
        }