private async Task <bool> AddToInventory(Order order, UpdateOrderStatus updateOrderStatus) { if (updateOrderStatus.OrderStatus != OrderStatus.Draft.ToString()) { return(true); } var date = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "Pacific Standard Time"); foreach (var item in order.OrderDetail) { var productInventory = await _context.ProductInventory.FirstOrDefaultAsync(m => m.ProductId == item.ProductId && m.LocationId == order.LocationId); if (productInventory != null) { productInventory.Balance = productInventory.Balance + item.Amount; productInventory.ModifiedDate = date; } } return(true); }
public async Task <IActionResult> PutOrder([FromRoute] int id, [FromBody] UpdateOrderStatus updateOrderStatus) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (updateOrderStatus == null || string.IsNullOrEmpty(updateOrderStatus.OrderStatus)) { return(BadRequest()); } var date = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "Pacific Standard Time"); var order = await _context.Order.SingleOrDefaultAsync(m => m.OrderId == id); if (updateOrderStatus.OrderStatus.Equals(OrderStatus.Paid.ToString(), StringComparison.InvariantCultureIgnoreCase)) { System.Security.Claims.ClaimsPrincipal currentUser = this.User; var userId = _userManager.GetUserId(User); order.OrderPayment.Add( new OrderPayment { CreatedByUserId = userId, CreatedDate = date, PaymentAmount = order.Total, PaymentDate = date, PaymentTypeId = updateOrderStatus.PaymentTypeId } ); } // When order is marked as Draft from OnHold we should add them to inventory if (updateOrderStatus.OrderStatus == OrderStatus.Draft.ToString() && order.Status == OrderStatus.OnHold.ToString()) { var done = await AddToInventory(order, updateOrderStatus); } else { var done = await UpdateInventory(order); } order.Status = updateOrderStatus.OrderStatus; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!OrderExists(id)) { return(NotFound()); } else { throw; } } return(Ok(order)); }