public void ShouldMapBankAccount() { TestData = new BankBalanceAdjustmentTransaction(TransactionId) { BankAccount = new ChequeAccount("CHEQUE"), Amount = -101, Narrative = "TEsting 123" }; TestInitialise(); // Re-initialise to use different test data. Assert.AreEqual(StatementModelTestData.ChequeAccount.Name, Result.Account); }
/// <summary> /// Used for persistence only. Don't use during Reconciliation. /// </summary> /// <param name="newTransaction"></param> internal void AddTransactionForPersistenceOnly([NotNull] LedgerTransaction newTransaction) { if (newTransaction == null) { throw new ArgumentNullException(nameof(newTransaction)); } this.transactions.Add(newTransaction); var newBalance = Balance + newTransaction.Amount; Balance = newBalance > 0 ? newBalance : 0; var balanceAdjustmentTransaction = newTransaction as BankBalanceAdjustmentTransaction; if (balanceAdjustmentTransaction != null) { balanceAdjustmentTransaction.BankAccount = LedgerBucket.StoredInAccount; } }
/// <summary> /// Allows ledger bucket specific behaviour during reconciliation. /// </summary> /// <exception cref="System.ArgumentNullException"></exception> public override bool ApplyReconciliationBehaviour(IList <LedgerTransaction> transactions, DateTime reconciliationDate, decimal openingBalance) { if (transactions == null) { throw new ArgumentNullException(nameof(transactions)); } LedgerTransaction zeroingTransaction = null; var netAmount = transactions.Sum(t => t.Amount); // This ledger can accumulate a balance but cannot be negative. var closingBalance = openingBalance + netAmount; var budgetedAmount = transactions.FirstOrDefault(t => t is BudgetCreditLedgerTransaction); if (budgetedAmount != null && closingBalance < budgetedAmount.Amount) { // This ledger has a monthly budgeted amount and the balance has resulted in a balance less than the monthly budgeted amount, supplement from surplus to equal budgeted amount. // While there is a monthly amount the balance should not drop below this amount. zeroingTransaction = new CreditLedgerTransaction { Date = reconciliationDate, Amount = budgetedAmount.Amount - closingBalance, Narrative = closingBalance < 0 ? SupplementOverdrawnText : SupplementLessThanBudgetText }; } else if (closingBalance < 0) { zeroingTransaction = new CreditLedgerTransaction { Date = reconciliationDate, Amount = -closingBalance, Narrative = SupplementOverdrawnText }; } if (zeroingTransaction != null) { transactions.Add(zeroingTransaction); return(true); } return(false); }
private void OnDeleteTransactionCommandExecuted(LedgerTransaction transaction) { if (IsReadOnly) { return; } if (InLedgerEntryMode) { this.wasChanged = true; LedgerEntry.RemoveTransaction(transaction.Id); ShownTransactions.Remove(transaction); } else if (InBalanceAdjustmentMode) { this.wasChanged = true; this.entryLine.CancelBalanceAdjustment(transaction.Id); ShownTransactions.Remove(transaction); } RaisePropertyChanged(() => TransactionsTotal); RaisePropertyChanged(() => LedgerEntry); }
private bool CanExecuteDeleteTransactionCommand(LedgerTransaction arg) { return !IsReadOnly && arg != null; }