private RewardBand GetRewardBand(int agentEnrolment, List <RewardBand> rewards) { var result = new RewardBand(); for (int i = 0; i < rewards.Count; i++) { var currentRewardBand = rewards.Where(x => x.Rank.Equals(i + 1)).FirstOrDefault(); //if it is the last rank then return it. if (i.Equals(rewards.Count - 1)) { result = currentRewardBand; break; } // MIND THE ORDER OF THIS CHECKS AS IT HAS ALOT TO DO WITH THE RESULT //if agentEnrolement is greater than current Band check next if (agentEnrolment > currentRewardBand.Max) { continue; } var nextRank = new RewardBand(); nextRank = rewards.Where(x => x.Rank.Equals(currentRewardBand.Rank + 1)).FirstOrDefault(); if ((currentRewardBand.Max >= agentEnrolment) && (nextRank == null)) { //has no lowerBand so it is the band result = currentRewardBand; break; } if ((agentEnrolment <= currentRewardBand.Max) && (agentEnrolment < nextRank.Min)) { //the lower val of the higher band is more than the enrolment result = currentRewardBand; break; } } return(result); }
public IList <AgntRewardDetail> GetComputationDetail(int agentEnrolment) { var result = new List <AgntRewardDetail>(); var sum = 0m; var firstElement = new AgntRewardDetail() { Count = agentEnrolment, DateRange = string.Format("{0}-{1}", DateTime.Now.AddDays(-7).ToString("dd/MM/yy"), DateTime.Now.ToString("dd/MM/yy")) }; if (agentEnrolment.Equals(0) || rewardBands.Count <= 0) { return(result); } var band = GetRewardBand(agentEnrolment, rewardBands); var affectedBands = rewardBands.Where(x => x.Rank < band.Rank).ToList(); int rem = agentEnrolment; var currentBand = new RewardBand(); foreach (var itm in affectedBands) { currentBand = itm; if (itm.Rank.Equals(1)) { firstElement.Band = string.Format("{0}-{1}", itm.Min, itm.Max); sum = sum + (itm.BandWith * itm.Reward); firstElement.Amount = sum; firstElement.Price = itm.Reward; firstElement.Count = itm.BandWith; firstElement.TotalCount = agentEnrolment.ToString(); rem = rem - itm.BandWith; result.Add(firstElement); } else { var newResultItem = new AgntRewardDetail { Price = itm.Reward, TotalCount = string.Empty, Amount = (itm.BandWith * itm.Reward), Band = string.Format("{0}-{1}", itm.Min, itm.Max), Count = itm.BandWith }; sum = sum + (itm.BandWith * itm.Reward); rem = rem - itm.BandWith; result.Add(newResultItem); } } if (rem > 0) { currentBand = rewardBands.Where(x => x.Rank.Equals(currentBand.Rank + 1)).FirstOrDefault <RewardBand>(); //set the current Band var newResultItem = new AgntRewardDetail { Price = currentBand.Reward, Amount = (rem * currentBand.Reward), Band = string.Format("{0}-{1}", currentBand.Min, currentBand.Max), Count = rem, TotalCount = string.Empty }; if (currentBand.Rank.Equals(1)) { newResultItem.DateRange = string.Format("{0}-{1}", DateTime.Now.AddDays(-7).ToString("dd/MM/yy"), DateTime.Now.ToString("dd/MM/yy")); newResultItem.TotalCount = agentEnrolment.ToString(); } sum = sum + (rem * currentBand.Reward); result.Add(newResultItem); //set the total Band result.Add(new AgntRewardDetail { Amount = sum, Count = agentEnrolment }); } else { //set the total Band result.Add(new AgntRewardDetail { Amount = sum, Count = agentEnrolment }); } return(result); }