private void ToggleMode() { string periodGroup = selectedCashflowProjectionItem.PeriodGroup; if (periodGroup == null) { return; } // remember items belonging to period group var toggleItems = new List <CashflowProjectionItem>(); int i = 0, startingIndex = -1; foreach (var item in CashflowProjectionItems) { if (item.PeriodGroup == periodGroup) { toggleItems.Add(item); if (startingIndex <= 0) { startingIndex = i; } } i++; } // remove old items foreach (var item in toggleItems) { CashflowProjectionItems.Remove(item); } //toggle mode this.cashflowProjectionGroup.SwitchMode(periodGroup); // add new items foreach (var item in this.cashflowProjectionGroup.GetActiveItems(periodGroup)) { CashflowProjectionItems.Insert(startingIndex++, item); if (SelectedCashflowProjectionItem == null) { SelectedCashflowProjectionItem = item; } } }
List <CashflowProjectionItem> ApplyBalancesAndThreshold(List <CashflowProjectionItem> cashflowProjectionItems, DateTime startDate, decimal openingBalance, decimal threshold) { cashflowProjectionItems.Insert(0, new CashflowProjectionItem() { Period = startDate.ToString("yyyy-MM-dd"), Item = "Opening Balance", In = null, Out = null, Balance = openingBalance }); // calculate the running balances CashflowProjectionItem previousCpi = null; decimal runningBalance = openingBalance; foreach (var cpi in cashflowProjectionItems.Skip(1)) { if (previousCpi != null && previousCpi.Period != cpi.Period) { previousCpi.Balance = runningBalance; } runningBalance += (cpi.In ?? 0M) - (cpi.Out ?? 0M); previousCpi = cpi; } if (previousCpi != null) { previousCpi.Balance = runningBalance; } // set the BalanceState for threshold foreach (var cpi in cashflowProjectionItems) { if (cpi.Balance.HasValue) { cpi.BalanceState = GetBalanceState(cpi.Balance, threshold); } } return(cashflowProjectionItems); }
public List <CashflowProjectionItem> GenerateAggregatedProjectionItems(List <CashflowProjectionTransfer> cashflowProjectionTransfers) { var cpis = new List <CashflowProjectionItem>(); foreach (var cpt in cashflowProjectionTransfers.OrderBy(c => c.Date)) { var cpi = new CashflowProjectionItem() { PeriodGroup = cpt.Date.ToString("yyyy-MM"), Period = cpt.Date.ToString("yyyy-MM-dd"), PeriodStartDate = cpt.Date, PeriodEndDate = cpt.Date, Item = (cpt.TransferDirection.Transfer.Category.Code == "NONE" ? "" : cpt.TransferDirection.Transfer.Category.Name + " -> ") + cpt.TransferDirection.Transfer.Name, In = cpt.TransferDirection.IsInbound ? cpt.TransferDirection.Transfer.Amount : (decimal?)null, Out = cpt.TransferDirection.IsOutbound ? cpt.TransferDirection.Transfer.Amount : (decimal?)null, CashflowProjectionMode = this }; cpis.Add(cpi); } return(cpis); }
public List<CashflowProjectionItem> GenerateAggregatedProjectionItems(List<CashflowProjectionTransfer> cashflowProjectionTransfers) { var cpis = new List<CashflowProjectionItem>(); foreach (var cpt in cashflowProjectionTransfers.OrderBy(c => c.Date)) { var cpi = new CashflowProjectionItem() { PeriodGroup = cpt.Date.ToString("yyyy-MM"), Period = cpt.Date.ToString("yyyy-MM-dd"), PeriodStartDate = cpt.Date, PeriodEndDate = cpt.Date, Item = (cpt.TransferDirection.Transfer.Category.Code == "NONE" ? "" : cpt.TransferDirection.Transfer.Category.Name + " -> ") + cpt.TransferDirection.Transfer.Name, In = cpt.TransferDirection.IsInbound ? cpt.TransferDirection.Transfer.Amount : (decimal?)null, Out = cpt.TransferDirection.IsOutbound ? cpt.TransferDirection.Transfer.Amount : (decimal?)null, CashflowProjectionMode = this }; cpis.Add(cpi); } return cpis; }