コード例 #1
0
ファイル: DateTimeBinder.cs プロジェクト: kosist/crudmvctable
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }

            var modelName = bindingContext.ModelName;

            // Try to fetch the value of the argument by name
            var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);

            if (valueProviderResult == ValueProviderResult.None)
            {
                return(Task.CompletedTask);
            }

            bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);

            var value = valueProviderResult.FirstValue;

            try
            {
                bindingContext.Result = ModelBindingResult.Success(DateTimeContext.Parse(value));
            }
            catch (ArgumentException e)
            {
                bindingContext.ModelState.TryAddModelError(modelName, e.Message);
            }

            return(Task.CompletedTask);
        }
コード例 #2
0
        public EndBalance Calculate(List <Filter> filters)
        {
            if (filters == null)
            {
                return(null);
            }

            var startFilter = filters.FindStartDateFilter(nameof(TransactionDisplay.CreatedTime));
            var endFilter   = filters.FindEndDateFilter(nameof(TransactionDisplay.CreatedTime));

            if (startFilter == null || endFilter == null)
            {
                return(null);
            }

            var transactionsAmount = Context.Transactions
                                     .ApplyTableRequestIQueryable <Transaction, TransactionDisplay, long>(CreateTableRequest(filters))
                                     .Select(x => x.Amount)
                                     .ToList();

            var startDate = DateTimeContext.Parse(startFilter.Value.ToString());
            var endDate   = DateTimeContext.Parse(endFilter.Value.ToString());

            var totalExpenses      = transactionsAmount.Where(x => x < 0).Sum();
            var totalIncome        = transactionsAmount.Where(x => x > 0).Sum();
            var balanceOnStartDate = Context.Transactions.Where(x => x.CreatedTime <= startDate).Sum(x => x.Amount);
            var balanceOnEndDate   = Context.Transactions.Where(x => x.CreatedTime <= endDate).Sum(x => x.Amount);
            var availableBalance   = Context.Transactions.Sum(x => x.Amount);

            var filterByProjectStr = filters.SingleFilterOrDefault(nameof(TransactionDisplay.ProjectId))?.Value?.ToString();

            var filterByProject = filterByProjectStr != null?long.Parse(filterByProjectStr) as long? : null;

            return(new EndBalance
            {
                BalanceOnStartDate = balanceOnStartDate,
                BalanceOnEndDate = balanceOnEndDate,
                AvailableBalance = availableBalance,
                TotalExpenses = totalExpenses,
                TotalIncome = totalIncome,
                TotalAmount = totalExpenses + totalIncome,
                StartDate = startDate,
                EndDate = endDate,
                ProjectsBalances = CalculateProjectsBalances(startDate, endDate, filterByProject)
            });
        }
コード例 #3
0
        protected override Expression GetFilterExpression(ParameterExpression param, Filter filter)
        {
            var field = filter.Path.CreatePropertyExpression(param);

            ConstantExpression value = Expression.Constant(DateTimeContext.Parse(filter.Value.ToString()));

            DateTime?date = value.Value as DateTime?;

            if (date == null)
            {
                return(null);
            }

            DateTime currentDate = ((DateTime)date).Date;
            DateTime nextDate    = currentDate.AddDays(1);

            switch (filter.Operator)
            {
            case FilterOperator.Equal:
            case FilterOperator.Contains:
                return(Expression.AndAlso(
                           Expression.GreaterThanOrEqual(field, Expression.Constant(currentDate)),
                           Expression.LessThan(field, Expression.Constant(nextDate))));

            case FilterOperator.GreaterThan:
                return(Expression.GreaterThan(field, Expression.Constant(currentDate)));

            case FilterOperator.GreaterThanOrEqual:
                return(Expression.GreaterThanOrEqual(field, Expression.Constant(currentDate)));

            case FilterOperator.LessThan:
                return(Expression.LessThan(field, Expression.Constant(nextDate)));

            case FilterOperator.LessThanOrEqual:
                return(Expression.LessThanOrEqual(field, Expression.Constant(nextDate)));

            default:
                throw new SwitchExpressionValueException(filter.Operator);
            }
        }