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());
}
}