private void CreateLedgerTransactionsShowingTransfer(IEnumerable <Transaction> wrongAccountPayments, string reference)
        {
            foreach (var transaction in wrongAccountPayments)
            {
                var journal1 = new CreditLedgerTransaction
                {
                    Amount = transaction.Amount, // Amount is already negative/debit
                    AutoMatchingReference = reference,
                    Date      = NewReconLine.Date,
                    Narrative = "Transfer to rectify payment made from wrong account."
                };
                var journal2 = new CreditLedgerTransaction
                {
                    Amount = -transaction.Amount,
                    AutoMatchingReference = reference,
                    Date      = NewReconLine.Date,
                    Narrative = "Transfer to rectify payment made from wrong account."
                };
                var ledger = NewReconLine.Entries.Single(l => l.LedgerBucket.BudgetBucket == transaction.BudgetBucket);
                List <LedgerTransaction> replacementTransactions = ledger.Transactions.ToList();
                replacementTransactions.Add(journal1);
                replacementTransactions.Add(journal2);
                ledger.SetTransactionsForReconciliation(replacementTransactions);

                NewReconLine.BalanceAdjustment(transaction.Amount, $"Decrease balance to show transfer to rectify {ledger.LedgerBucket.BudgetBucket.Code} payment made from wrong account.",
                                               ledger.LedgerBucket.StoredInAccount);
                NewReconLine.BalanceAdjustment(-transaction.Amount, $"Increase balance to show transfer to rectify {ledger.LedgerBucket.BudgetBucket.Code} payment made from wrong account.",
                                               transaction.Account);
            }
        }
        public void ConstructWithGuidShouldSetId()
        {
            Guid id      = Guid.NewGuid();
            var  subject = new CreditLedgerTransaction(id);

            Assert.AreEqual(id, subject.Id);
        }
예제 #3
0
        public LedgerTransaction CreateLedgerTransaction(LedgerBook ledgerBook, LedgerEntryLine reconciliation, LedgerEntry ledgerEntry,
                                                         decimal amount, string narrative)
        {
            if (reconciliation == null)
            {
                throw new ArgumentNullException(nameof(reconciliation));
            }

            if (ledgerEntry == null)
            {
                throw new ArgumentNullException(nameof(ledgerEntry));
            }

            if (narrative == null)
            {
                throw new ArgumentNullException(nameof(narrative));
            }

            LedgerTransaction newTransaction = new CreditLedgerTransaction();

            newTransaction.WithAmount(amount).WithNarrative(narrative);
            newTransaction.Date = reconciliation.Date;

            // ledgerEntry.AddTransactionForPersistenceOnly(newTransaction);
            List <LedgerTransaction> replacementTxns = ledgerEntry.Transactions.ToList();

            replacementTxns.Add(newTransaction);
            ledgerEntry.SetTransactionsForReconciliation(replacementTxns);
            ledgerEntry.RecalculateClosingBalance(ledgerBook);
            return(newTransaction);
        }
예제 #4
0
 public LedgerTransactionToDtoMapperTest()
 {
     TestData = new CreditLedgerTransaction(new Guid("7F921750-4467-4EA4-81E6-3EFD466341C6"))
     {
         Amount    = 123.99M,
         Narrative = "Foo bar."
     };
 }
        public void WithAmountMinus50ShouldCreateADebitOf50()
        {
            var subject = new CreditLedgerTransaction();

            LedgerTransaction result = subject.WithAmount(-50);

            Assert.AreEqual(-50M, result.Amount);
        }
        public void WithAmount50ShouldReturnSameObjectForChaining()
        {
            var subject = new CreditLedgerTransaction();

            LedgerTransaction result = subject.WithAmount(50);

            Assert.AreSame(subject, result);
        }
        public void UsingTestData1_AddTransactionShouldEffectEntryNetAmount()
        {
            var entryLine      = Act(this.subject, this.testDataBudget);
            var newTransaction = new CreditLedgerTransaction {
                Amount = -100
            };
            var entry = entryLine.Reconciliation.Entries.First();

            entry.AddTransactionForPersistenceOnly(newTransaction);

            Assert.AreEqual(-100, entry.NetAmount);
        }
        private void PerformBankTransfer(LedgerBook ledgerBook, TransferFundsCommand transferDetails, LedgerEntryLine ledgerEntryLine)
        {
            var sourceTransaction = new CreditLedgerTransaction
            {
                Amount = -transferDetails.TransferAmount,
                AutoMatchingReference = transferDetails.AutoMatchingReference,
                Date      = ledgerEntryLine.Date,
                Narrative = transferDetails.Narrative
            };

            var destinationTransaction = new CreditLedgerTransaction
            {
                Amount = transferDetails.TransferAmount,
                AutoMatchingReference = transferDetails.AutoMatchingReference,
                Date      = ledgerEntryLine.Date,
                Narrative = transferDetails.Narrative
            };

            if (transferDetails.BankTransferRequired)
            {
                ledgerEntryLine.BalanceAdjustment(-transferDetails.TransferAmount, transferDetails.Narrative,
                                                  transferDetails.FromLedger.StoredInAccount);
                ledgerEntryLine.BalanceAdjustment(transferDetails.TransferAmount, transferDetails.Narrative,
                                                  transferDetails.ToLedger.StoredInAccount);
                this.transactionRuleService.CreateNewSingleUseRule(
                    transferDetails.FromLedger.BudgetBucket.Code,
                    null,
                    new[] { transferDetails.AutoMatchingReference },
                    null,
                    -transferDetails.TransferAmount,
                    true);
                this.transactionRuleService.CreateNewSingleUseRule(
                    transferDetails.ToLedger.BudgetBucket.Code,
                    null,
                    new[] { transferDetails.AutoMatchingReference },
                    null,
                    transferDetails.TransferAmount,
                    true);
            }


            // No need for a source transaction for surplus ledger.
            if (!(transferDetails.FromLedger.BudgetBucket is SurplusBucket))
            {
                var ledgerEntry     = ledgerEntryLine.Entries.Single(e => e.LedgerBucket == transferDetails.FromLedger);
                var replacementTxns = ledgerEntry.Transactions.ToList();
                replacementTxns.Add(sourceTransaction);
                ledgerEntry.SetTransactionsForReconciliation(replacementTxns);
                ledgerEntry.RecalculateClosingBalance(ledgerBook);
            }

            // No need for a destination transaction for surplus ledger.
            if (!(transferDetails.ToLedger.BudgetBucket is SurplusBucket))
            {
                var ledgerEntry     = ledgerEntryLine.Entries.Single(e => e.LedgerBucket == transferDetails.ToLedger);
                var replacementTxns = ledgerEntry.Transactions.ToList();
                replacementTxns.Add(destinationTransaction);
                ledgerEntry.SetTransactionsForReconciliation(replacementTxns);
                ledgerEntry.RecalculateClosingBalance(ledgerBook);
            }
        }