コード例 #1
0
        private async Task <bool> ValidateModel(OrderBidningModel model)
        {
            var dbDeliveryInfo = await this.DbContext.DeliverysInfos
                                 .FindAsync(model.DeliveryInfo.Id);

            if (dbDeliveryInfo == null)
            {
                return(false);
            }

            var paymentType = await this.DbContext.PaymentTypes
                              .FindAsync(model.SelectedPaymentTypeId);

            if (paymentType == null)
            {
                return(false);
            }

            var result = await this.ValidateProducts(model.Products);

            if (result == false)
            {
                return(false);
            }

            return(true);
        }
コード例 #2
0
        public async Task <bool> CreateOrder(OrderBidningModel model, ClaimsPrincipal user, ISession session)
        {
            var isModelValid = await this.ValidateModel(model);

            if (isModelValid == false)
            {
                return(false);
            }

            await this.RemoveProductsFromDatabase(model.Products);

            this.RemoveProductsFromSessionCart(session);

            var orderStatus = await this.GetDefaultOrderStatusFromDatabaseAsync();

            var dbOrder = this.MapOrder(model, user, orderStatus);

            await this.DbContext.Orders.AddAsync(dbOrder);

            var dbOrderProducts = this.MapOrderOrderProducts(dbOrder.Id, model.Products);

            await this.DbContext.OrderProducts.AddRangeAsync(dbOrderProducts);

            await this.DbContext.SaveChangesAsync();

            return(true);
        }
コード例 #3
0
        private void MapPaymentTypes(OrderBidningModel model)
        {
            var dbPaymentTypes = this.DbContext.PaymentTypes
                                 .ToList();

            var defaultPaymentType = new SelectListItem()
            {
                Text     = ControllerConstats.SelectListPlaceholderPaymentType,
                Disabled = true,
                Selected = true
            };

            model.PaymentTypes.Add(defaultPaymentType);

            foreach (var paymentType in dbPaymentTypes)
            {
                var selectItem = new SelectListItem()
                {
                    Text  = paymentType.Name,
                    Value = paymentType.Id
                };

                model.PaymentTypes.Add(selectItem);
            }
        }
コード例 #4
0
        private async Task <OrderBidningModel> MapOrderAsync(IEnumerable <ProductSessionModel> products, DeliveryInfo deliveryInfo)
        {
            var model = new OrderBidningModel();

            await this.MapProductsAsync(model, products);

            model.DeliveryInfo = this.mapper.Map <DeliveryInfoBindingModel>(deliveryInfo);

            this.MapPaymentTypes(model);

            return(model);
        }
コード例 #5
0
        private Order MapOrder(OrderBidningModel model, ClaimsPrincipal user, OrderStatus orderStatus)
        {
            var dbOrder = new Order()
            {
                OrderDate            = DateTime.UtcNow,
                TotalPrice           = this.CalculateTotalPrice(model.Products),
                DeliveryExpectedTime = DateTime.UtcNow.AddDays(WebConstants.DeliveryRequiredDays),
                DeliveryPrice        = WebConstants.DeliveryPrice,
                DeliveryInfoId       = model.DeliveryInfo.Id,
                OrderStatusId        = orderStatus.Id,
                PaymentTypeId        = model.SelectedPaymentTypeId,
                UserId = this.userManager.GetUserId(user)
            };

            return(dbOrder);
        }
コード例 #6
0
        private async Task MapProductsAsync(OrderBidningModel model, IEnumerable <ProductSessionModel> products)
        {
            var productsModels = new List <ProductConciseBindingModel>();

            foreach (var sessionProduct in products)
            {
                var productModel = await this.MapProductAsync(sessionProduct);

                if (productModel == null)
                {
                    continue;
                }

                productsModels.Add(productModel);
            }

            model.Products = productsModels;
        }
コード例 #7
0
        public async Task <IActionResult> Order(OrderBidningModel model)
        {
            if (this.ModelState.IsValid == false)
            {
                this.AddStatusMessage(this.ModelState);

                return(this.RedirectToAction("ChooseAddress"));
            }

            var result = await this.userOrderService.CreateOrder(model, this.User, this.HttpContext.Session);

            if (result == false)
            {
                this.AddStatusMessage(ControllerConstats.ErrorMessageUnknownError, ControllerConstats.MessageTypeDanger);

                return(this.RedirectToAction("ChooseAddress"));
            }

            this.AddStatusMessage(ControllerConstats.MessageSuccefullyOrdered, ControllerConstats.MessageTypeSuccess);

            return(this.Redirect("/Identity/Account"));
        }