Example #1
0
 /// <summary>
 ///     Returns true if the to ledger buckets are refering to the same bucket.
 /// </summary>
 protected bool Equals([CanBeNull] LedgerBucket other)
 {
     if (other == null)
     {
         return(false);
     }
     return(Equals(BudgetBucket, other.BudgetBucket) && Equals(StoredInAccount, other.StoredInAccount));
 }
        public void TestIntialise()
        {
            this.mockBucketRepo = new Mock<IBudgetBucketRepository>();
            this.mockRuleService = new Mock<ITransactionRuleService>();
            this.mockReconciliationConsistency = new Mock<IReconciliationConsistency>();
            this.subject = new ReconciliationManager(this.mockRuleService.Object, this.mockReconciliationConsistency.Object, new FakeLogger());

            this.testDataLedgerBook = LedgerBookTestData.TestData5(() => new LedgerBookTestHarness(new Mock<IReconciliationBuilder>().Object));
            this.testDataEntryLine = this.testDataLedgerBook.Reconciliations.First();
            this.testDataEntryLine.Unlock();

            this.surplusChqLedger = new SurplusLedger { StoredInAccount = StatementModelTestData.ChequeAccount };
            this.insHomeSavLedger = this.testDataLedgerBook.Ledgers.Single(l => l.BudgetBucket == StatementModelTestData.InsHomeBucket);
            this.phNetChqLedger = this.testDataLedgerBook.Ledgers.Single(l => l.BudgetBucket == StatementModelTestData.PhoneBucket);
        }
        public LedgerBookBuilder IncludeLedger(LedgerBucket ledger, decimal openingBalance = 0)
        {
            if (this.ledgerBuckets.Any(b => b.BudgetBucket.Code == ledger.BudgetBucket.Code))
            {
                throw new DuplicateNameException("Ledger Bucket already exists in collection.");
            }

            if (ledger.StoredInAccount == null)
            {
                ledger.StoredInAccount = StatementModelTestData.ChequeAccount;
            }

            this.ledgerBuckets.Add(ledger);
            this.openingBalances.Add(ledger, openingBalance);

            return this;
        }
        public void ShowDialog([NotNull] Engine.Ledger.LedgerBook parentLedgerBook, [NotNull] LedgerBucket ledgerBucket, [NotNull] BudgetModel budgetModel)
        {
            if (parentLedgerBook == null)
            {
                throw new ArgumentNullException(nameof(parentLedgerBook));
            }

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

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

            if (LedgerBucketHistoryAnalysis == null)
            {
                LedgerBucketHistoryAnalysis = CreateBucketHistoryAnalyser();
            }
            LedgerBucketHistoryAnalysis.Analyse(ledgerBucket, parentLedgerBook);
            this.ledger = ledgerBucket;
            BankAccounts = new ObservableCollection<Account>(this.accountRepo.ListCurrentlyUsedAccountTypes());
            BucketBeingTracked = ledgerBucket.BudgetBucket;
            StoredInAccount = ledgerBucket.StoredInAccount;
            MonthlyBudgetAmount = budgetModel.Expenses.Single(e => e.Bucket == BucketBeingTracked).Amount;
            this.correlationId = Guid.NewGuid();

            var dialogRequest = new ShellDialogRequestMessage(BudgetAnalyserFeature.LedgerBook, this, ShellDialogType.OkCancel)
            {
                CorrelationId = this.correlationId,
                Title = "Ledger - " + BucketBeingTracked,
                HelpAvailable = true
            };

            MessengerInstance.Send(dialogRequest);
        }
        private static Brush StripColour(LedgerBucket ledger)
        {
            if (ledger.BudgetBucket is SpentMonthlyExpenseBucket)
            {
                return ConverterHelper.SpentMonthlyBucketBrush;
            }

            if (ledger.BudgetBucket is SavedUpForExpenseBucket)
            {
                return ConverterHelper.AccumulatedBucketBrush;
            }

            if (ledger.BudgetBucket is SavingsCommitmentBucket)
            {
                return ConverterHelper.SavingsCommitmentBucketBrush;
            }

            return ConverterHelper.TileBackgroundBrush;
        }
Example #6
0
        /// <summary>
        ///     Used to allow the UI to set a ledger's account, but only if it is an instance in the <see cref="Ledgers" />
        ///     collection.
        /// </summary>
        /// <param name="ledger"></param>
        /// <param name="storedInAccount"></param>
        internal void SetLedgerAccount(LedgerBucket ledger, Account storedInAccount)
        {
            if (Ledgers.Any(l => l == ledger))
            {
                ledger.StoredInAccount = storedInAccount;
                return;
            }

            throw new InvalidOperationException(
                "You cannot change the account in a ledger that is not in the Ledgers collection.");
        }
Example #7
0
        internal LedgerBucket AddLedger(LedgerBucket newLedger)
        {
            if (this.ledgersColumns.Any(l => l.BudgetBucket == newLedger.BudgetBucket))
            {
                // Ledger already exists in this ledger book.
                return null;
            }

            this.ledgersColumns.Add(newLedger);
            return newLedger;
        }
        private List<LedgerTransaction> IncludeBudgetedAmount(BudgetModel currentBudget, LedgerBucket ledgerBucket, DateTime reconciliationDate)
        {
            var budgetedExpense =
                currentBudget.Expenses.FirstOrDefault(e => e.Bucket.Code == ledgerBucket.BudgetBucket.Code);
            var transactions = new List<LedgerTransaction>();
            if (budgetedExpense != null)
            {
                BudgetCreditLedgerTransaction budgetedAmount;
                if (ledgerBucket.StoredInAccount.IsSalaryAccount)
                {
                    budgetedAmount = new BudgetCreditLedgerTransaction
                    {
                        Amount = budgetedExpense.Bucket.Active ? budgetedExpense.Amount : 0,
                        Narrative =
                            budgetedExpense.Bucket.Active ? "Budgeted Amount" : "Warning! Bucket has been disabled."
                    };
                }
                else
                {
                    budgetedAmount = new BudgetCreditLedgerTransaction
                    {
                        Amount = budgetedExpense.Bucket.Active ? budgetedExpense.Amount : 0,
                        Narrative =
                            budgetedExpense.Bucket.Active
                                ? "Budget amount must be transferred into this account with a bank transfer, use the reference number for the transfer."
                                : "Warning! Bucket has been disabled.",
                        AutoMatchingReference = ReferenceNumberGenerator.IssueTransactionReferenceNumber()
                    };
                    // TODO Maybe the budget should know which account the incomes go into, perhaps mapped against each income?
                    var salaryAccount =
                        this.newReconciliationLine.BankBalances.Single(b => b.Account.IsSalaryAccount).Account;
                    this.toDoList.Add(
                        new TransferTask(
                            string.Format(
                                CultureInfo.CurrentCulture,
                                "Budgeted Amount for {0} transfer {1:C} from Salary Account to {2} with auto-matching reference: {3}",
                                budgetedExpense.Bucket.Code,
                                budgetedAmount.Amount,
                                ledgerBucket.StoredInAccount,
                                budgetedAmount.AutoMatchingReference),
                            true)
                        {
                            Amount = budgetedAmount.Amount,
                            SourceAccount = salaryAccount,
                            DestinationAccount = ledgerBucket.StoredInAccount,
                            BucketCode = budgetedExpense.Bucket.Code,
                            Reference = budgetedAmount.AutoMatchingReference
                        });
                }

                budgetedAmount.Date = reconciliationDate;
                transactions.Add(budgetedAmount);
            }

            return transactions;
        }
 private void Reset()
 {
     this.ledger = null;
     MonthlyBudgetAmount = 0;
     BankAccounts.Clear();
     StoredInAccount = null;
 }
 public SpecificLedgerEntryTestDataBuilder WithLedger(LedgerBucket ledger)
 {
     return this.ledgers[ledger];
 }
 private static LedgerEntry CreateLedgerEntry(LedgerBucket ledger, decimal balance = 0)
 {
     return new LedgerEntry { LedgerBucket = ledger, Balance = balance };
 }