protected void ForceClose_Click(object sender, EventArgs e) { MessageUserControl.TryRun(() => { var controller = new ReceivingController(); var closeOrder = new ForceCloseDetails(); var itemInfo = new List <ForceCloseItems>(); foreach (GridViewRow item in OrderGridView.Rows) { var itemProductID = item.FindControl("OrderDetailID") as Label; var itemOutstanding = item.FindControl("ItemQuantityOutstanding") as Label; var product = new ForceCloseItems(); product.ProductID = int.Parse(itemProductID.Text); product.QuantityOutstanding = int.Parse(itemOutstanding.Text); itemInfo.Add(product); } closeOrder.OrderID = int.Parse(OrderListDropDown.SelectedValue); closeOrder.Closed = true; closeOrder.Comment = Comments.Text; closeOrder.Items = itemInfo; controller.ForceCloseOrder(closeOrder); }, "Force Close Order", "Order has been force closed"); Response.Redirect("~/Subsystem/Receiving/Receiving"); }
public void ForceCloseOrder(ForceCloseDetails order) { /* command modify Products, Order and OrderDeatails */ // Validation List <Exception> errors = new List <Exception>(); if (order == null) { throw new ArgumentNullException(nameof(order), $"No {nameof(ForceCloseDetails)} was supplied for an existing PO."); } else { if (order.Comment.Trim().Equals(null)) { throw new Exception("Please give a reason in the comment box for why the order is being closed."); } } using (var context = new eRaceContext()) { var given = context.Orders.Find(order.OrderID); if (given == null) { throw new ArgumentException($"The given order id of {order.OrderID} does not exist in the database."); } given.Comment = order.Comment; given.Closed = true; var existingOrder = context.Entry(given); existingOrder.Property(nameof(given.Comment)).IsModified = true; existingOrder.Property(nameof(given.Closed)).IsModified = true; foreach (var item in order.Items) { var givenOrder = context.OrderDetails.Find(item.ProductID); var givenProduct = context.Products.Find(givenOrder.ProductID); if (givenProduct == null) { throw new ArgumentException($"The given product id of {item.ProductID} does not exist in the database."); } givenProduct.QuantityOnOrder = givenProduct.QuantityOnOrder - item.QuantityOutstanding; if (givenProduct.QuantityOnOrder < 0) { givenProduct.QuantityOnOrder = 0; } var existingProduct = context.Entry(givenProduct); existingProduct.Property(nameof(givenProduct.QuantityOnOrder)).IsModified = true; } context.SaveChanges(); } }