public async System.Threading.Tasks.Task <IActionResult> OnPostSaveOrderAsync([FromBody] OrderAddressViewModel model) { if (!ModelState.IsValid) { IEnumerable <ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors); return(new BadRequestObjectResult("Đặt hàng không thành công")); } using (var context = new OnlineStoreDbContext()) { using (var transaction = context.Database.BeginTransaction()) { try { var user = _userManager.GetUserAsync(HttpContext.User).Result; if (user == null) { return(new BadRequestObjectResult("Tất cả sản phẩm trong giỏ không thể đặt. Vui lòng kiểm tra lại giỏ hàng.")); } var cart = _cartRepository.GetCartByCustomerId(user.Id); if (cart == null) { return(new BadRequestObjectResult("Tất cả sản phẩm trong giỏ không thể đặt. Vui lòng kiểm tra lại giỏ hàng.")); } var newAddress = new Address(); if (model.Order.ReceivingTypeId == 3) { newAddress = new Address { CustomerId = user.Id, PhoneNumber = model.Address.PhoneNumber, RecipientName = model.Address.RecipientName, ShowRoomAddressId = model.Address.ShowRoomAddressId, DateCreated = DateTime.Now, DateModified = DateTime.Now }; context.Address.Add(newAddress); context.SaveChanges(); } var receivingType = _receivingTypeRepository.Find(model.Order.ReceivingTypeId); var newOrder = new DAL.Data.Entities.Order { DateCreated = DateTime.Now, DateModified = DateTime.Now, DeliveryDate = DateTime.Now.AddDays(receivingType.NumberShipDay), ShippingFee = model.Order.ShippingFee, SubTotal = cart.CartDetails.Sum(x => x.Item.Price * x.Quantity), OrderDate = DateTime.Now, PaymentType = model.Order.PaymentType, ReceivingTypeId = model.Order.ReceivingTypeId, SaleOff = model.Order.SaleOff, Status = model.Order.Status == OrderStatus.ReadyToDeliver ? OrderStatus.ReadyToDeliver : OrderStatus.Pending, }; if (model.Order.PaymentType == PaymentType.CreditDebitCard) { Address addressForOnlinePayment = new Address { CustomerId = user.Id, Detail = "", DateCreated = DateTime.Now, RecipientName = user.Name ?? "", PhoneNumber = user.PhoneNumber ?? "" }; context.Address.Add(addressForOnlinePayment); context.SaveChanges(); newOrder.AddressId = addressForOnlinePayment.Id; } else { newOrder.AddressId = model.Order.ReceivingTypeId == 3 ? newAddress.Id : model.Order.AddressId; } newOrder.Total = newOrder.SubTotal + newOrder.ShippingFee - newOrder.SaleOff; context.Order.Add(newOrder); context.SaveChanges(); var items = cart.CartDetails.Where(cd => cd.IsDeleted == false && cd.Item.Quantity > 0).ToList(); if (items == null || items.Count() == 0) { transaction.Rollback(); return(new BadRequestObjectResult("Tất cả sản phẩm trong giỏ không thể đặt. Vui lòng kiểm tra lại giỏ hàng.")); } var itemsCheckout = TempData.Get <List <ItemCartViewModel> >(CommonConstants.ItemsCheckout); //if (itemsCheckout.Sum(x => x.Quantity) != items.Sum(x => x.Item.Quantity)) //{ // transaction.Rollback(); // return new BadRequestObjectResult("Các sản phẩm trong giỏ đã có sự thay đổi về số lượng từ hệ thống. Vui lòng kiểm tra lại giỏ hàng."); //} if (itemsCheckout.Sum(x => x.Price) != items.Sum(x => x.Item.Price)) { transaction.Rollback(); return(new BadRequestObjectResult("Các sản phẩm trong giỏ đã có sự thay đổi về giá từ hệ thống. Vui lòng kiểm tra lại giỏ hàng.")); } foreach (var itemInCart in items) { if (itemsCheckout.Any(x => x.Quantity > itemInCart.Item.Quantity)) { transaction.Rollback(); return(new BadRequestObjectResult("Các sản phẩm trong giỏ đã có sự thay đổi về số lượng từ hệ thống. Vui lòng kiểm tra lại giỏ hàng.")); } var item = _itemRepository.Find(itemInCart.ItemId); if (item.IsDeleted == false) { if (itemInCart.Quantity > item.Quantity) { transaction.Rollback(); return(new BadRequestObjectResult("Sản phẩm không còn đủ số lượng cho đơn hàng. Quá trình đặt hàng thất bại. Vui lòng kiểm tra lại giỏ hàng")); } var newOrderItem = new OrderItem { OrderId = newOrder.Id, Price = item.Price, ItemId = itemInCart.ItemId, Quantity = itemInCart.Quantity, DateCreated = DateTime.Now, DateModified = DateTime.Now, SaleOff = 0, IsDeleted = false, Amount = item.Price * itemInCart.Quantity }; context.OrderItem.Add(newOrderItem); context.SaveChanges(); item.Quantity -= itemInCart.Quantity; context.Item.Update(item); context.SaveChanges(); } } cart.IsDeleted = true; context.Cart.Update(cart); context.SaveChanges(); var cartDetails = cart.CartDetails; foreach (var cartDetail in cartDetails) { cartDetail.IsDeleted = true; cartDetail.Quantity = 0; context.CartDetail.Update(cartDetail); context.SaveChanges(); } transaction.Commit(); var url = Url.Page("/Order/MyOrder", pageHandler: null, values: new { orderId = newOrder.Id }, protocol: Request.Scheme); var confirmAccountModel = new OrderEmailViewModel { Url = url, LetterDescription = $@"Yêu cầu đặt hàng cho đơn hàng #{newOrder.Id} của bạn đã được tiếp nhận và đang chờ nhà bán hàng xử lý. Thời gian đặt hàng vào lúc {string.Format("{0:HH:mm}", newOrder.OrderDate)} ngày {string.Format("{0:d/M/yyyy}", newOrder.OrderDate)}. Chúng tôi sẽ tiếp tục cập nhật với bạn về trạng thái tiếp theo của đơn hàng." }; string body = await _razorViewToStringRenderer.RenderViewToStringAsync("~/Pages/Emails/ConfirmOrderEmail.cshtml", confirmAccountModel); await _emailSender.SendEmailAsync(user.Email, "Xác nhận đơn hàng từ TimiShop", body); return(new OkObjectResult(new { orderId = newOrder.Id, email = user.Email })); } catch (Exception ex) { transaction.Rollback(); return(new BadRequestObjectResult("Đặt hàng không thành công")); } } } }
public IActionResult OnGetById(int id) { var model = _receivingTypeRepository.Find(id); return(new OkObjectResult(model)); }