BudgetAnalyser.Engine.Widgets.SavingsGoalWidget.CalculateSavingsToDateWithTrackedLedgers C# (CSharp) Метод

CalculateSavingsToDateWithTrackedLedgers() приватный статический Метод

private static CalculateSavingsToDateWithTrackedLedgers ( StatementModel statement, LedgerBook ledger ) : decimal
statement BudgetAnalyser.Engine.Statement.StatementModel
ledger BudgetAnalyser.Engine.Ledger.LedgerBook
Результат decimal
        private static decimal CalculateSavingsToDateWithTrackedLedgers(StatementModel statement, LedgerBook ledger)
        {
            if (ledger == null)
            {
                return 0;
            }

            List<BudgetBucket> trackedSavingsLedgers = ledger.Ledgers
                .Where(l => l.BudgetBucket is SavingsCommitmentBucket)
                .Select(l => l.BudgetBucket)
                .ToList();
            if (!trackedSavingsLedgers.Any())
            {
                return SumDebitSavingsTransactions(statement);
            }

            var savingsToDate = CalculateTrackedSavingLedgersContributions(statement, trackedSavingsLedgers);

            // Other non-ledger-book-tracked savings will appear as debits in the statement so need to be negated.
            IEnumerable<Transaction> otherNontrackedSavings =
                statement.Transactions.Where(
                    t =>
                        t.BudgetBucket is SavingsCommitmentBucket && trackedSavingsLedgers.All(b => b != t.BudgetBucket));
            savingsToDate += otherNontrackedSavings.Sum(t => -t.Amount);
            return savingsToDate;
        }