/// <summary> /// Initialises an instance of the <see cref="MobileDataExporter" /> class. /// </summary> public MobileDataExporter([NotNull] LedgerCalculation calculator, IReaderWriterSelector readerWriterSelector, IEnvironmentFolders environmentFolders) { if (calculator == null) { throw new ArgumentNullException(nameof(calculator)); } this.calculator = calculator; this.readerWriterSelector = readerWriterSelector; this.environmentFolders = environmentFolders; }
/// <summary> /// Updates the widget with new input. /// </summary> /// <exception cref="System.ArgumentNullException"></exception> public override void Update([NotNull] params object[] input) { if (input == null) { throw new ArgumentNullException(nameof(input)); } if (!ValidateUpdateInput(input)) { Enabled = false; return; } this.statement = (StatementModel)input[0]; this.filter = (GlobalFilterCriteria)input[1]; this.ledgerBook = (LedgerBook)input[2]; this.ledgerCalculator = (LedgerCalculation)input[3]; if (this.ledgerBook == null || this.statement == null || this.filter == null || this.filter.Cleared || this.filter.BeginDate == null || this.filter.EndDate == null) { Enabled = false; return; } if (this.filter.BeginDate.Value.DurationInMonths(this.filter.EndDate.Value) != 1) { ToolTip = DesignedForOneMonthOnly; Enabled = false; return; } Enabled = true; var openingBalance = CalculateOpeningBalance(); var remainingBalance = this.ledgerCalculator.CalculateCurrentMonthSurplusBalance(this.ledgerBook, this.filter, this.statement); Maximum = Convert.ToDouble(openingBalance); Value = Convert.ToDouble(remainingBalance); Minimum = 0; if (remainingBalance < 0.2M * openingBalance) { ColourStyleName = WidgetWarningStyle; } else { ColourStyleName = this.standardStyle; } ToolTip = string.Format(CultureInfo.CurrentCulture, "Remaining Surplus for period is {0:C} of {1:C}", remainingBalance, openingBalance); }
/// <summary> /// Initializes a new instance of the <see cref="BurnDownChartAnalyser" /> class. /// </summary> /// <param name="ledgerCalculator">The ledger calculator.</param> /// <param name="logger">The logger.</param> /// <exception cref="System.ArgumentNullException"> /// </exception> public BurnDownChartAnalyser([NotNull] LedgerCalculation ledgerCalculator, [NotNull] ILogger logger) { if (ledgerCalculator == null) { throw new ArgumentNullException(nameof(ledgerCalculator)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } this.ledgerCalculator = ledgerCalculator; this.logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="MonitorableDependencies" /> class. /// </summary> public MonitorableDependencies(LedgerCalculation ledgerCalculator) { this.availableDependencies = new Dictionary <Type, object> { [typeof(StatementModel)] = null, [typeof(BudgetCollection)] = null, [typeof(IBudgetCurrencyContext)] = null, [typeof(LedgerBook)] = null, [typeof(IBudgetBucketRepository)] = null, [typeof(GlobalFilterCriteria)] = null, [typeof(LedgerCalculation)] = ledgerCalculator, [typeof(ApplicationDatabase)] = null, [typeof(ITransactionRuleService)] = null, [typeof(IApplicationDatabaseService)] = null }; }
/// <summary> /// Calculates the monthly budget amount. /// </summary> protected virtual decimal MonthlyBudgetAmount() { Debug.Assert(Filter.BeginDate != null); Debug.Assert(Filter.EndDate != null); var monthlyBudget = Budget.Model.Expenses.Single(b => b.Bucket.Code == BucketCode).Amount; var totalBudgetedAmount = monthlyBudget; var ledgerLine = LedgerCalculation.LocateApplicableLedgerLine(LedgerBook, Filter); if (LedgerBook == null || ledgerLine == null || ledgerLine.Entries.All(e => e.LedgerBucket.BudgetBucket.Code != BucketCode)) { return(totalBudgetedAmount); } return(ledgerLine.Entries.First(e => e.LedgerBucket.BudgetBucket.Code == BucketCode).Balance); }
public void TestInitialise() { this.bucketRepo = new BucketBucketRepoAlwaysFind(); this.subject = new RemainingSurplusWidget(); this.criteriaTestData = new GlobalFilterCriteria { BeginDate = new DateTime(2015, 10, 20), EndDate = new DateTime(2015, 11, 19) }; StatementModelTestDataForThisTest.AccountTypeRepo = new InMemoryAccountTypeRepository(); StatementModelTestDataForThisTest.BudgetBucketRepo = this.bucketRepo; this.statementTestData = StatementModelTestDataForThisTest.TestDataGenerated(); BudgetModel budgetModel = BudgetModelTestData.CreateTestData1(); this.budgetTestData = new BudgetCurrencyContext(new BudgetCollection(budgetModel), budgetModel); this.ledgerBookTestData = new LedgerBookBuilder { StorageKey = "RemainingSurplusWidgetTest.xml", Modified = new DateTime(2015, 11, 23), Name = "Smith Budget 2015" } .IncludeLedger(LedgerBookTestData.PhoneLedger, 130M) .IncludeLedger(LedgerBookTestData.CarMtcLedger, 90M) .IncludeLedger(LedgerBookTestData.PowerLedger) .AppendReconciliation( new DateTime(2015, 10, 20), new BankBalance(LedgerBookTestData.ChequeAccount, 4502.75M)) .WithReconciliationEntries( entryBuilder => { entryBuilder.WithLedger(LedgerBookTestData.PhoneLedger).HasNoTransactions(); entryBuilder.WithLedger(LedgerBookTestData.CarMtcLedger).HasNoTransactions(); entryBuilder.WithLedger(LedgerBookTestData.PowerLedger) .AppendTransactions(txnBuilder => { txnBuilder.WithCredit(3000M, "Oct Savings", new DateTime(2015, 10, 20), "automatchref12"); }); }) .Build(); this.ledgerCalculation = new LedgerCalculation(new FakeLogger()); }
public void TestInitialise() { this.subject = new BudgetBucketMonitorWidget(); this.subject.BucketCode = StatementModelTestData.PhoneBucket.Code; this.bucketRepo = new BucketBucketRepoAlwaysFind(); this.criteriaTestData = new GlobalFilterCriteria { BeginDate = new DateTime(2015, 10, 20), EndDate = new DateTime(2015, 11, 19) }; CreateStatementTestData(); BudgetModel budgetModel = BudgetModelTestData.CreateTestData5(); this.budgetTestData = new BudgetCurrencyContext(new BudgetCollection(budgetModel), budgetModel); CreateLedgerBookTestData(); this.ledgerCalculation = new LedgerCalculation(new FakeLogger()); }
public void TestInitialise() { Subject = new LedgerCalculation(); TestData = LedgerBookTestData.TestData1(); }
/// <summary> /// Updates the widget with new input. /// </summary> /// <exception cref="System.ArgumentNullException"></exception> public override void Update([NotNull] params object[] input) { if (input == null) { throw new ArgumentNullException(nameof(input)); } if (!ValidateUpdateInput(input)) { Enabled = false; return; } Budget = (IBudgetCurrencyContext)input[0]; Statement = (StatementModel)input[1]; Filter = (GlobalFilterCriteria)input[2]; this.bucketRepository = (IBudgetBucketRepository)input[3]; LedgerBook = (LedgerBook)input[4]; LedgerCalculation = (LedgerCalculation)input[5]; SetAdditionalDependencies(input); if (Statement == null || Budget == null || Filter == null || Filter.Cleared || Filter.BeginDate == null || Filter.EndDate == null || LedgerCalculation == null || LedgerBook == null || this.bucketRepository == null) { Enabled = false; return; } if (!this.bucketRepository.IsValidCode(BucketCode)) { Enabled = false; return; } if (Filter.BeginDate.Value.DurationInMonths(Filter.EndDate.Value) != 1) { Enabled = false; ToolTip = DesignedForOneMonthOnly; return; } Enabled = true; var totalBudget = MonthlyBudgetAmount(); Maximum = Convert.ToDouble(totalBudget); var totalSpend = LedgerCalculation.CalculateCurrentMonthBucketSpend(LedgerBook, Filter, Statement, BucketCode); var remainingBalance = totalBudget + totalSpend; if (remainingBalance < 0) { remainingBalance = 0; } Value = Convert.ToDouble(remainingBalance); ToolTip = string.Format(CultureInfo.CurrentCulture, RemainingBudgetToolTip, remainingBalance); if (remainingBalance < 0.2M * totalBudget) { ColourStyleName = WidgetWarningStyle; } else { ColourStyleName = this.standardStyle; } }