var query = _context.Plans.Where(x => x.CompanyId == CompanyId && x.PlanRestrictions.States.Contains(State) && x.PlanRestrictions.OfficeTypes.OfficeType == OfficeType && x.PlanTypes.PlanType == PlanType).Include(x => x.PlanRestrictions).Include(x => x.PlanTypes).OrderByDescending(x => x.Cost).ToList();
var healthPlans = (query.Where(x => x.PlanRestrictions.InsuranceTypeId == 1).OrderByDescending(x => x.Cost).ToList());
var wellnessPlans = query.Where(x => (x.PlanRestrictions.InsuranceTypeId == 4 || x.PlanRestrictions.InsuranceTypeId == 7)).OrderByDescending(x => x.Cost).ToList();
var dentalPlans = query.Where(x => (x.PlanRestrictions.InsuranceTypeId == 2 || x.PlanRestrictions.InsuranceTypeId == 6)).OrderByDescending(x => x.Cost).ToList();
var rxPlans = query.Where(x => x.PlanRestrictions.InsuranceTypeId == 3).OrderByDescending(x => x.Cost).ToList();
var visionPlans = query.Where(x => x.PlanRestrictions.InsuranceTypeId == 5).OrderByDescending(x => x.Cost).ToList();
var lastHealth = healthPlans.Last();
var lastDental = dentalPlans.Last();
var lastWellness = wellnessPlans.Last();
var lastRx = rxPlans.Last();
var lastVision = visionPlans.Last();
foreach(var health in healthPlans)
if (vm.HealthPlans.Count > 0)
vm.HealthPlans.RemoveAt(0);
if (vm.WellnessPlans.Count > 0)
vm.WellnessPlans.RemoveAt(0);
if (vm.DentalPlans.Count > 0)
vm.DentalPlans.RemoveAt(0);
if (vm.VisionPlans.Count > 0)
vm.VisionPlans.RemoveAt(0);
decimal runningTotal = 0;
if (vm.HealthPlans.Count > 0 && vm.WellnessPlans.Count > 0 && vm.DentalPlans.Count() > 0 && vm.RxPlans.Count() > 0 && vm.VisionPlans.Count() > 0)
if(health.Equals(lastHealth))
if (vm.HealthPlans.Count > 0)
vm.HealthPlans.RemoveAt(0);
if (vm.WellnessPlans.Count > 0)
vm.WellnessPlans.RemoveAt(0);
if (vm.DentalPlans.Count > 0)
vm.DentalPlans.RemoveAt(0);
if (vm.VisionPlans.Count > 0)
vm.VisionPlans.RemoveAt(0);
if (runningTotal <= affordability)
vm.HealthPlans.Add(health);
runningTotal = runningTotal + health.Cost;
if (vm.RxPlans.Count > 0)
foreach (var wellness in wellnessPlans)
if (runningTotal + wellness.Cost <= affordability && vm.WellnessPlans.Count() == 0)
vm.WellnessPlans.Add(wellness);
runningTotal = runningTotal + wellness.Cost;
foreach (var dental in dentalPlans)
if (runningTotal + dental.Cost <= affordability && vm.DentalPlans.Count() == 0)
vm.DentalPlans.Add(dental);
runningTotal = runningTotal + dental.Cost;
foreach (var rx in rxPlans)
if (runningTotal + rx.Cost <= affordability && vm.RxPlans.Count() == 0)
runningTotal = runningTotal + rx.Cost;
foreach (var vision in visionPlans)
if (runningTotal + vision.Cost <= affordability && vm.VisionPlans.Count() == 0)
vm.VisionPlans.Add(vision);
runningTotal = runningTotal + vision.Cost;
if (runningTotal + health.Cost <= affordability && vm.HealthPlans.Count() == 0)
vm.HealthPlans.Add(health);
runningTotal = runningTotal + health.Cost;
foreach(var wellness in wellnessPlans)
if (runningTotal + wellness.Cost <= affordability && vm.WellnessPlans.Count() == 0)
vm.WellnessPlans.Add(wellness);
runningTotal = runningTotal + wellness.Cost;
foreach(var dental in dentalPlans)
if (runningTotal + dental.Cost <= affordability && vm.DentalPlans.Count() == 0)
vm.DentalPlans.Add(dental);
runningTotal = runningTotal + dental.Cost;
foreach(var rx in rxPlans)
if (runningTotal + rx.Cost <= affordability && vm.RxPlans.Count() == 0)
runningTotal = runningTotal + rx.Cost;
foreach(var vision in visionPlans)
if (runningTotal + vision.Cost <= affordability && vm.VisionPlans.Count() == 0)
vm.VisionPlans.Add(vision);
runningTotal = runningTotal + vision.Cost;