コード例 #1
0
 /// <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;
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
 /// <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
     };
 }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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());
        }
コード例 #8
0
 public void TestInitialise()
 {
     Subject  = new LedgerCalculation();
     TestData = LedgerBookTestData.TestData1();
 }
コード例 #9
0
        /// <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;
            }
        }