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);
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        /// <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;
 }