/// <summary> /// This method transfers all certification data for later calls /// </summary> /// <param name="externalKey">The external primary key of the family</param> /// <param name="transactionKey">The key for a particular transaction (you may have had several calls against one family)</param> /// <param name="effectiveDate">The date this transaction is effective for, compliance may vary based on this date.</param> /// <returns></returns> public bool TransferDataForEligibilityCall(string externalKey, string transactionKey, DateTime effectiveDate) { bool returnValue = false; try { //get the dt family tcDTFamily tcDTFamily = _uow.DTFamilyRepository.Get(filter: f => f.ExternalKey == externalKey && f.TransactionKey == transactionKey).Single(); //transfer the family tcFamily family = TransferDTFamilyToTCFamily(_uow, tcDTFamily, effectiveDate, externalKey, transactionKey); //get the dtfamilymembers IEnumerable <tcDTFamilyMember> dtFamilyMembers = _uow.DTFamilyMemberRepository.Get(filter: f => f.fkFamily == tcDTFamily.PK); //transfer the family members IEnumerable <tcFamilyMember> tcFamilyMembers = TransferDTFamilyMemberInfoToTCFamilyMemberInfo(_uow, dtFamilyMembers, family, tcDTFamily, transactionKey); _uow.Save(); returnValue = true; return(returnValue); } finally { _uow.Dispose(); } }
public IEnumerable <tcAsset> ReturnTotalEligibleAssetsForFamily(tcFamily familyArg, IAssetRepository assetRepo) { //1. Snag the total asset value for the family IEnumerable <tcAsset> assets = assetRepo.GetAssetsByFamily(familyArg.PK); //2. Filter out inactive assets assets = new AssetFilters().RemoveInactiveAssetsFromCollection(assets); //3. Filter out ineligible family members assets = new AssetFilters().RemoveInEligibleFamilyMemberAssetsFromCollection(assets); return(assets); }
/// <summary> /// This method calcualtes the overall family member size in the standard IRS way. All members who have an eligible status and are currently marked as isactive. It's imporant to realize /// that live in aide's will not be counted in the family size nor eligibility, but should be utilized for bedroom size calculations. /// </summary> /// <param name="familyArg"></param> /// <param name="familyMemberRepo"></param> /// <returns></returns> public int CalculateFamilySize(tcFamily familyArg, IFamilyMemberRepository familyMemberRepo) { int familyMemberCount = 0; var familyMembers = familyMemberRepo.GetFamilyMembersByFamilyID(familyArg.PK); familyMemberCount = (from fm in familyMembers where fm.IsActive == true && fm.tcFamilyMemberStatu != null && fm.tcFamilyMemberStatu.FamilyMemberStatus.Trim().ToLower() != Constants.FamilyMemberStatus.NonEligibleFamilyMember.Trim().ToLower() && //let's ignore non eligible members fm.tcFamilyMemberStatu.FamilyMemberStatus.Trim().ToLower() != Constants.FamilyMemberStatus.LiveInAide.Trim().ToLower() //we also don't utilize the live in aides, select fm).Count(); return(familyMemberCount); }
/// <summary> /// This method is reponsible for transferring the family from data transfer tables to the tax credit tables. Afterwards we'll delete the family /// from the dt tables to keep them clean. The tables are meant to be transactional. /// /// </summary> /// <param name="uow"></param> /// <param name="tcDTFamily"></param> /// <param name="effectiveDate"></param> /// <param name="externalKey"></param> /// <param name="transactionKey"></param> /// <returns></returns> private tcFamily TransferDTFamilyToTCFamily(CertificationTransferUnitOfWork uow, tcDTFamily tcDTFamily, DateTime effectiveDate, string externalKey, string transactionKey) { tcFamily newFamily = new tcFamily { EffectiveDate = effectiveDate, IsActive = true, IsFullTimeResidentialWorker = tcDTFamily.IsFullTimeResidentialWorker, ExternalKey = externalKey, transactionKey = transactionKey }; //insert the family to the tc family uow.FamilyRepository.Insert(newFamily); //remove the family from dt //uow.DTFamilyRepository.Delete(tcDTFamily.PK); return(newFamily); }
public decimal CalculateTotalAssetIncomeAmount( tcFamily familyArg, IAssetRepository assetRepo, ISettingsRepository settingsRepo) { decimal totalAssetIncomeAmount = 0; decimal totalAssetValue = 0; decimal totalAssetIncome = 0; //1. Get total assets for the family IEnumerable <tcAsset> eligibleAssets = new TotalAssetCalculationStandard().ReturnTotalEligibleAssetsForFamily(familyArg, assetRepo); //2. Snag the total asset income totalAssetIncome = eligibleAssets.Sum(asset => (asset.AnnualIncome ?? 0)); //3. Determine if asset value meets the HUD threshold totalAssetIncomeAmount = CalculateTotalAssetAmountConsideringThreshold( totalAssetValue, totalAssetIncome, settingsRepo); return(totalAssetIncomeAmount); }
public decimal CalculateTotalAssetAmount(tcFamily familyArg, IAssetRepository assetRepo) { decimal totalAssetValue = 0; //incremental holding values decimal totalWithDrawlPenalty = 0; //1. Get all eligible assets IEnumerable <tcAsset> eligibleAssets = ReturnTotalEligibleAssetsForFamily(familyArg, assetRepo); //2. Snag the total asset value for the family totalAssetValue = eligibleAssets.Sum(asset => asset.Value); //3. Snag the total withdrawl penalty totalWithDrawlPenalty = eligibleAssets.Sum(asset => (asset.WithdrawlPenalty ?? 0)); //4. Remove the penalty from the total asset value totalAssetValue = totalAssetValue - totalWithDrawlPenalty; return(totalAssetValue); }
public decimal CalculateGrossNonAssetIncomeAmount(tcFamily familyArg, IIncomeRepository incomeRepo) { IncomeFilters incomeFilter = new IncomeFilters(); decimal grossNonAssetIncomeAmount = 0; //1. Pull all the available incomes related to the family IEnumerable <tcIncome> incomes = incomeRepo.GetIncomesByFamily(familyArg.PK); //2. Filter out inactive incomes incomes = RemoveInactiveIncomesFromCollection(incomes); //2. Filter out the incomes of ineligible family members incomes = incomeFilter.RemoveInEligibleFamilyMemberIncomesFromCollection(incomes); //3. Remove earned income of dependents under the age of 18 incomes = incomeFilter.RemoveEarnedIncomesOfDependentsUnder18(incomes); //4. Split full time student earned income over the age of 18 from the group, who are dependents, they have a 480 dollar cap per person IEnumerable <tcIncome> studentIncomes = incomeFilter.RetrieveAdultStudentIncome(incomes); //now calculate the earned income with 480 cap decimal totalStudentEarnedIncome = CalculateEarnedIncomeForAdultStudents(studentIncomes, 480); //TODO: Change 480 to be a setting //5. Gather remaining family member incomes IEnumerable <tcIncome> standardIncomes = incomes.Where( income => !studentIncomes.Select(x => x.PK).Contains(income.PK)); //Calculate total unearned and earned incomes for the remainder of the family decimal totalStandardIncome = standardIncomes.Sum(i => i.YearlyIncomeAmount); //add the two together to get total family grossnonassetincome grossNonAssetIncomeAmount = CalculateGrossNonAssetIncome( totalStudentEarnedIncome, totalStandardIncome); return(grossNonAssetIncomeAmount); }
/// <summary> /// /// </summary> /// <param name="uow"></param> /// <param name="dtFamilyMembers"></param> /// <param name="tcFamily"></param> /// <param name="tcDTFamily"></param> /// <param name="transactionKey"></param> /// <returns></returns> private IEnumerable <tcFamilyMember> TransferDTFamilyMemberInfoToTCFamilyMemberInfo(CertificationTransferUnitOfWork uow, IEnumerable <tcDTFamilyMember> dtFamilyMembers, tcFamily tcFamily, tcDTFamily tcDTFamily, string transactionKey) { tcFamilyMember newMember = null; foreach (tcDTFamilyMember dtMember in dtFamilyMembers) { newMember = new tcFamilyMember { fkFamily = tcFamily.PK, FirstName = dtMember.FirstName.Trim(), LastName = dtMember.LastName.Trim(), SSN = dtMember.SSN.Trim(), MiddleInitial = dtMember.MiddleInitial.Trim(), BirthDate = dtMember.BirthDate, ExternalKey = dtMember.ExternalKey, transactionKey = transactionKey, fkFamilyMemberStatus = uow.FamilyMemberStatusRepository.Get(filter: s => s.FamilyMemberStatus.Trim().ToLower() == dtMember.tcDTFamilyMemberStatu.FamilyMemberStatus.Trim().ToLower() && s.IsActive).Single().PK, fkGender = (dtMember.Gender.ToLower().Trim() == "m" ? uow.GenderRepository.Get(filter: gen => gen.Gender.Trim().ToLower() == "male" && gen.IsActive).Single() : uow.GenderRepository.Get(filter: gen => gen.Gender.Trim().ToLower() != "female" && gen.IsActive).Single()).PK, IsActive = true }; //if they have a student status, let's hunt down the appropriate one and assign it to the family member if (dtMember.tcDTStudentStatu != null) { newMember.fkStudentStatus = uow.StudentStatusRepository.Get(filter: s => s.StudentStatus.Trim().ToLower() == dtMember.tcDTStudentStatu.StudentStatus.Trim().ToLower()).Single().PK; } //apply special status's for the members if (dtMember.tcDTSpecialStatu != null) { newMember.fkSpecialStatus = uow.SpecialStatusRepository.Get(filter: s => s.SpecialStatus.Trim().ToLower() == dtMember.tcDTSpecialStatu.SpecialStatus.Trim().ToLower()).Single().PK; } //transfer this members asset information TransferDTAssetsToTCAssets(uow, dtMember, newMember); //transfer this members income information TransferDTIncomesToTCIncomes(uow, dtMember, newMember); //add the family member to our context for later saving uow.FamilyMemberRepository.Insert(newMember); //remove the family member //uow.DTFamilyMemberRepository.Delete(dtMember.PK); } return(uow.FamilyMemberRepository.InternalCollection); }