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;
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }