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); }
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); }
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); } }
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); }
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); }
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; }
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")); }