public async Task <ActionResult> Flows()
        {
            var lContext  = new IRRContext();
            var filter    = new BsonDocument();
            var sortFlows = Builders <Flow> .Sort.Descending(p => p.Date);

            var lFlows = await lContext.Flows.Find(filter).Sort(sortFlows).ToListAsync();

            var model = new FlowsModel
            {
                Flows = lFlows
            };

            return(View(model));
        }
Example #2
0
        protected override void OnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
        {
            BalanceModel.Series.Clear();
            FlowsModel.Series.Clear();
            YearBalanceModel.Series.Clear();

            if (MatchingTransactions.Any())
            {
                var minDate = MatchingTransactions.Min(x => x.BookDate);
                var maxDate = MatchingTransactions.Max(x => x.BookDate);

                var balances = GetTransactions(TimeGroupingType.Month, minDate, maxDate, TransactionTypeSelection.Balance);
                SetTwoColorArea(balances, BalanceModel, OxyColors.Green, TimeGroupingType.Month);
                //SetColumns(values, BalanceModel); //todo: make switchable

                var incomes  = GetTransactions(TimeGroupingType.Month, minDate, maxDate, TransactionTypeSelection.Income);
                var outcomes = GetTransactions(TimeGroupingType.Month, minDate, maxDate, TransactionTypeSelection.Outcome);

                SetTwoColorArea(incomes, FlowsModel, OxyColors.Green, TimeGroupingType.Month);
                SetTwoColorArea(outcomes, FlowsModel, OxyColors.Red, TimeGroupingType.Month);

                SetTwoColorArea(GetTransactions(TimeGroupingType.Year, minDate, maxDate, TransactionTypeSelection.Balance), YearBalanceModel, OxyColors.Green, TimeGroupingType.Year);

                var incomesDict  = incomes.ToDictionary(x => x.BookDate, x => x.Value);
                var outcomesDict = outcomes.ToDictionary(x => x.BookDate, x => x.Value);
                var summaries    = new List <TransactionsSummary>();
                foreach (var date in incomes.Select(x => x.BookDate).Concat(outcomes.Select(x => x.BookDate)).Distinct().OrderByDescending(x => x).ToArray())
                {
                    incomesDict.TryGetValue(date, out decimal income);
                    outcomesDict.TryGetValue(date, out decimal outcome);
                    summaries.Add(new TransactionsSummary
                    {
                        GrossIncome  = income,
                        GrossOutcome = -outcome,
                        Name         = date.ToString("yyyy.MM")
                    });
                }
                Balances = summaries.ToArray();
                RaisePropertyChanged(nameof(Balances));
            }

            BalanceModel.InvalidatePlot(true); BalanceModel.ResetAllAxes();
            FlowsModel.InvalidatePlot(true); FlowsModel.ResetAllAxes();
            YearBalanceModel.InvalidatePlot(true); YearBalanceModel.ResetAllAxes();
        }
        public async Task <Result> Handle(ListFlowQuery request, CancellationToken cancellationToken)
        {
            Result result;

            try
            {
                int?skip = request.Skip.ToNullableInt();
                int?top  = request.Top.ToNullableInt();

                var flowDomains = await _flowReadRepository.ListAsync(request.Filter, skip, top);

                var flowModels   = _mapper.Map <IEnumerable <FlowModel> >(flowDomains);
                var count        = flowModels.Count();
                var sourcesModel = new FlowsModel {
                    Value = flowModels, Count = count, NextLink = null
                };

                result = Result.Ok(sourcesModel);
            }
            catch (FilterODataException)
            {
                result = Result.Fail(new System.Collections.Generic.List <Failure>()
                {
                    new HandlerFault()
                    {
                        Code    = HandlerFaultCode.InvalidQueryFilter.Name,
                        Message = HandlerFailures.InvalidQueryFilter,
                        Target  = "$filter"
                    }
                }
                                     );
            }
            catch
            {
                result = Result.Fail(CustomFailures.ListFlowFailure);
            }
            return(result);
        }