public async Task <IActionResult> CreateOrderAsync(SalesOrderForCreate model) { if (!ModelState.IsValid) { var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList(); return(BadRequest(new ErrorResponse(HttpStatusCode.BadRequest, "Validation error", errors))); } var result = await _salesOrderService.CreateAsync(model); return(result.Succeed ? Ok() : BadRequest(new ErrorResponse(HttpStatusCode.BadRequest, "Create fail", result.Errors))); }
public async Task <ProcessResult> CreateAsync(SalesOrderForCreate salesOrder) { async Task action() { var now = DateTime.UtcNow; var orders = new List <SalesOrder>(); var products = await _repoWrapper.Product.GetProductAsync(); salesOrder.Details.ToList().ForEach(item => { orders.Add(new SalesOrder { //master AppUserId = CurrentUser.Id, FirstName = salesOrder.Order.FirstName, LastName = salesOrder.Order.LastName, PaymentTypeId = salesOrder.Order.PaymentTypeId, DeliveryTypeId = salesOrder.Order.DeliveryTypeId, PhoneNumber = salesOrder.Order.PhoneNumber, PostCode = salesOrder.Order.PostCode, OrderNote = salesOrder.Order.OrderNote, StreetAddress = salesOrder.Order.StreetAddress, OrderDate = now, City = salesOrder.Order.City, CompanyName = salesOrder.Order.CompanyName, Contry = salesOrder.Order.Contry, OrderStatusId = 1, //detail ProductId = item.ProductId, Quantity = item.Quantity, Price = item.Price, Product = products.Where(x => x.Id == item.ProductId).FirstOrDefault(), //info CreateBy = CurrentUser.UserName, CreateDate = now, Status = true }); }); await _repoWrapper.SalesOrder.AddRangeSalesOrderAsync(orders); //update stock orders.ForEach(x => { if (x.Product.Stock - x.Quantity < 0) { throw new Exception($"Stock invalid, {x.Product.ProductName} - inStock: {x.Product.Stock}"); } x.Product.Stock -= x.Quantity; }); //orders.ForEach(async x => //{ // var product = await _repoWrapper.Product.FindProductByIdAsync(x.ProductId); // product.Stock -= x.Quantity; // _repoWrapper.Product.Update(product); // await _repoWrapper.SaveAsync(); //}); if (await _repoWrapper.SaveAsync() <= 0) { throw new Exception("Save fail"); } } return(await Process.RunAsync(action)); }