/// <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; }
/// <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."); }
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 }; }