using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class Admin_OrderWizard_ReverseCancel : WebBlocks.AdministrativePage { private int OrderID { get { return (ViewState["OrderID"] == null ? 0 : (int)ViewState["OrderID"]); } set { ViewState["OrderID"] = value; } } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { litError.Text = string.Empty; OrderID = Int32.Parse(Request["OrderID"]); lnkBackToOrder.NavigateUrl = "EditOrder.aspx?OrderID=" + OrderID.ToString(); DataRow dr = Database.Orders_GetByOrderID(OrderID); txtComments.Text = (dr["AdminComments"] != null ? (string)dr["AdminComments"] : ""); // grab all the items in this order and make sure we have enough inventory to fulfill this order again DataTable dtOrderItems = Database.OrderItems_GetByOrderID(OrderID); ArrayList pendingOrderItems = new ArrayList(); foreach (DataRow drOrderItem in dtOrderItems.Rows) { pendingOrderItems.Add(Int32.Parse(drOrderItem["OrderItemID"].ToString())); } foreach (DataRow drOrderItem in dtOrderItems.Rows) { string SKU = drOrderItem["SKU"].ToString(); // find the Item that cooresponds to this SKU (we should find one since SKU is unique) DataTable dtItems = Database.Items_Search("",SKU); if (dtItems.Rows.Count > 0 && pendingOrderItems.Contains(Int32.Parse(drOrderItem["OrderItemID"].ToString()))) { int quantity = 0; String name = ""; int ItemID = Int32.Parse(dtItems.Rows[0]["ItemID"].ToString()); int SelectorID = Int32.Parse(dtItems.Rows[0]["SelectorID"].ToString()); // find all Order Items with this SKU and add orderID their quantities together DataTable dtOrderItemsSKU = Database.OrderItems_Search("", SKU, OrderID); foreach (DataRow dtOrderItemSKU in dtOrderItemsSKU.Rows) { // we should have found the current item and any other item that shares the same sku quantity += Int32.Parse(dtOrderItemSKU["Quantity"].ToString()); // need to add this so we know which OrderItems don't have enough stock pendingOrderItems.Remove(Int32.Parse(dtOrderItemSKU["OrderItemID"].ToString())); name = dtOrderItemSKU["Name"].ToString(); } if (Int32.Parse(dtItems.Rows[0]["Inventory"].ToString()) != -1 && Int32.Parse(dtItems.Rows[0]["Inventory"].ToString()) < quantity) { // quantity is more than inventory, let the admin know litError.Text += "
" + name + " SKU [" + SKU + "]: Available Inventory = " + Int32.Parse(dtItems.Rows[0]["Inventory"].ToString()) + ", Requested Quantity = " + quantity; } } } if(litError.Text != string.Empty) { Button nextButton = (Button)wizDelay.FindControl("StepNavigationTemplateContainerID").FindControl("StepNextButton"); nextButton.Visible = false; nextButton.Enabled = false; litError.Text = "There is not enough Inventory to fulfill this order. Please check the items listed below.
" + litError.Text; } if (litError.Text == string.Empty) // disable wizard if we have errors. wizDelay.ActiveStepIndex = 0; else wizDelay.Visible = false; } } protected void wizDelay_FinishButtonClick(object sender, WizardNavigationEventArgs e) { Database.Orders_UpdateForProcessing(OrderID, txtComments.Text, null, 1, false, null); Response.Redirect("EditOrder.aspx?OrderID=" + OrderID.ToString()); } }