private void CreateBuilder(IPayDay payDay) { if (PayDays[0].RecordId == payDay.RecordId) { Builders.Add(new PayPeriodBuilder(payDay, null)); return; } int previousItem = PayDays.FindIndex(pd => pd.RecordId == payDay.RecordId) - 1; Builders.Add(new PayPeriodBuilder(payDay, PayDays[previousItem].Date)); }
public DateDecimal[] Construct() { PayDays = PayDays.OrderByDescending(pd => pd.Date).ToList(); PayDays.ForEach(CreateBuilder); Builders.ForEach(b => b.Build()); Balancer balancer = new Balancer(Builders.ToArray()); balancer.BalanceBudget(); Builders.ForEach(GetResult); Result = Result.GroupBy(dd => dd.Date).Select(dd => new DateDecimal(dd.Select(x => x.Date).First(), dd.Sum(y => y.Amount))).ToList(); return(Result.OrderBy(dd => dd.Date).ToArray()); }