public async Task <IActionResult> AddOrder([FromBody] OrderUserViewModel model) { if (ModelState.IsValid) { string userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; WebshopUser user = await UserManager.FindByIdAsync(userId); if (user != null) { decimal totalPriceOrder = CalculateOrderPrice(model.Products); List <ProductOrder> productOrders = GetOrderProducts(model.Products); decimal finalPrice = totalPriceOrder; decimal discount = 0; if (model.Coupon != null) { var discountValidation = ValidateCouponCode(model.Coupon, totalPriceOrder); if (discountValidation != null) { model.Coupon = discountValidation.Item1; discount = discountValidation.Item2; finalPrice = discountValidation.Item3; } } Order newOrder = new Order { Guid = Guid.NewGuid(), Paid = false, Shipped = false, OrderCreated = DateTime.Now, TotalPrice = totalPriceOrder, Discount = discount, FinalPrice = finalPrice, CouponCode = model.Coupon, OrderedProducts = productOrders, AssociatedUserGuid = user.UserGuid, OrderedFromGuestAccount = false, EmailConfirmationSent = false, OrderStatus = OrderStatus.Received }; OrderRepository.AddOrder(newOrder); return(Ok(newOrder.Guid)); } } return(BadRequest()); }
public async Task <IActionResult> Create(CartModel cart, OrderUserViewModel model, string OrderNotes) { DoneModelView done = new DoneModelView(); if (ModelState.IsValid) { var validate = _userService.Validate("Email", model.Email); if (validate.Success) { ModelState.AddModelError("", "Email \"" + model.Email + "\" is already taken"); } UserModel user = new UserModel(); user.Email = model.Email; user.LastName = model.LastName; user.Name = model.Name; user.Phone = model.Phone; user.Address = model.Address; user.Created = DateTime.Now; if (model.CreateAccount == true) { if (string.IsNullOrWhiteSpace(model.Password)) { ModelState.AddModelError("", "Password is required"); } if (model.Password != model.ConfirmPassword) { ModelState.AddModelError("", "Enter the right password"); } _userService.SignUp(user, "email", user.Email, model.Password); _userService.AddToRole(user, "user"); } var order = await _orderService.Create(cart, user, OrderNotes); var products = await _productService.GetProductsByIdList(order.Cart.ItemList.Select(id => id.ProductId).ToList()); done.order = order; done.products = products; } var categories = await _categoryService.GetAll(); ViewData["Categories"] = categories; var contact = _contactService.Get(); ViewData["contact"] = contact; return(View("Done", done)); }