Я использую MVC и пытаюсь проверить, достаточно ли товара в запасе. Я делаю это в моем контроллере с помощью
[HttpPost]
[ValidateAntiForgeryToken]
[Audit]
public void AddUnits(int so_id, int site_id, int[] addItem_id, int[] addItem_qty)
{
// Loop however many times is necessary to iterate through the largest array
for (int i = 0; i < Math.Max(Math.Max(addItem_id.Length, addComp_id.Length), addPart_id.Length); i++)
{
foreach (SODetails sod in db.SalesOrders.Find(so_id).SalesDetails)
{
if (i < addItem_id.Length && addItem_qty[i] != 0 && sod.ItemID == addItem_id[i] && addItem_id[i] != 365 && addItem_id[i] != 410)
{
sod.item_qty += addItem_qty[i];
sod.item_discount = addItem_disc[i];
addItem_id[i] = 0;
addItem_qty[i] = 0;
addItem_disc[i] = 0;
}
}
db.SaveChanges();
if(i < addItem_qty.Length && addItem_qty[i] != 0)
{
SODetails sODetails = new SODetails
{
SalesOrderID = so_id,
SiteID = site_id
};
// Only add a unit to the SODetails object if it's not null and has an id and quanitity specified
if(i < addItem_id.Length && addItem_id[i] != 0 && addItem_qty[i] != 0)
{
sODetails.ItemID = addItem_id[i];
sODetails.item_qty = addItem_qty[i];
sODetails.item_discount = addItem_disc[i];
}
SalesOrder SO = db.SalesOrders.Find(sODetails.SalesOrderID);
SODetails salesOrderDetails = db.SODetails.Add(sODetails);
salesOrderDetails.SalesOrder = SO;
Item SO_Item = db.Items.Find(sODetails.ItemID);
if (SO_Item != null)
{
ViewBag.itemOnHand = SO_Item.On_Hand;
sODetails.item_qty = sODetails.item_qty == null ? 0 : sODetails.item_qty;
int qtyOrdered = sODetails.item_qty == null ? 0 : (int)sODetails.item_qty;
salesOrderDetails.dynamicItem_qty = qtyOrdered;
if (SO_Item.SalesOrderMessage != null)
TempData["SalesOrderMessage"] = SO_Item.SalesOrderMessage;
}
}
}
}
db.SaveChanges();
}
. В настоящее время я пытаюсь передать инвентаризацию этого предмета в сумку, выполнив ViewBag.itemOnHand = SO_Item.On_Hand;
Затем моя функция просмотра Jquery выглядит так:
// Get all item ids and quantities and store them in arrays
var itemssel = document.getElementsByClassName("Item-select");
var itemsqtysel = document.getElementsByClassName("Item-qty");
var itemsdiscsel = document.getElementsByClassName("Item-disc");
var itemOnHand = @ViewBag.itemOnHand;
for (i = 0; i < itemssel.length; i++) {
items[i] = itemssel[i].options[itemssel[i].selectedIndex].value;
itemsqty[i] = itemsqtysel[i].value;
itemsdisc[i] = itemsdiscsel[i].value;
if (itemsqty[i] < 0) {
alert("Quantities can't be negative!");
return;
}
if (itemsqty[i] < itemOnHand) {
alert("Not enough inventory in site!");
return;
}
// The add units method is then called here
// Send all the values to the AJAX function and respond with success or error
$.ajax({
type: "POST",
url: "@IGT.baseUrl/SODetailsAjax/AddUnits",
traditional: true,
data: {
__RequestVerificationToken: token,
so_id: @Int32.Parse(Request["orderId"]),
site_id: site,
addItem_id: items,
addItem_qty: itemsqty,
addItem_disc: itemsdisc,
addComp_id: comps,
addComp_qty: compsqty,
addComp_disc: compsdisc,
addPart_id: parts,
addPart_qty: partsqty,
addPart_disc: partsdisc
},
success: function () {
location.href = "../SalesOrders/Details?id=@so.ID";
},
error: function (jqXHR, status, error) {
alert("Error: " + error);
}
});
Но это работает не так, как сейчас. Почему это так?
В соответствии с запросом, вот мой метод GET для страницы, перед тем как она публикует
// GET: SODetails/Create
[RestrictAccess(restriction = AccessRestrictions.ModifySalesOrder)]
public ActionResult Create(int orderId)
{
var SOID = (from i in db.SalesOrders.Where(x => x.ID == orderId).Where(x => x.deleted == false)
select new
{
SO_id = i.ID,
status = i.ID + " (Status: " + i.SalesOrderStatus +")",
}).OrderByDescending(x => x.SO_id).ToList();
var item = (from i in db.Items.Where(x => x.deleted == false)
select new
{
itemID = i.ID,
itemName = i.Product_Number + " : " + i.ItemID + " : " + i.Name
}).OrderBy(x => x.itemName).ToList();
var component = (from c in db.Components.Where(x => x.deleted == false)
select new
{
compID = c.ID,
compName = c.Product_Number + " : " + c.ComponentID + " : " + c.Name
}).OrderBy(x => x.compName).ToList();
var part = (from c in db.Parts.Where(x => x.deleted == false)
select new
{
partID = c.ID,
partName = c.Product_Number + " : " + c.PartID + " : " + c.Name
}).OrderBy(x => x.partName).ToList();
var sites = (from s in db.Sites
select new
{
siteID = s.ID,
siteName = s.Name
}).OrderBy(x => x.siteName).ToList();
sites.Insert(0, new { siteID = 0, siteName = "Main Inventory" });
var masters = db.Items.Where(x => x.Product_Number.Contains("106101") || x.ItemID.Contains("106101"));
List<int> ids = new List<int>();
foreach(Item i in masters.Where(x => x.Product_Number.Contains("BMU") || x.Product_Number.Contains("BMDU") || x.Product_Number.Contains("BMS")))
{
ids.Add(i.ID);
}
ViewBag.BMUMasters = ids.ToArray();
ids = new List<int>();
foreach (Item i in masters.Where(x => x.Product_Number.Contains("GMU")))
{
ids.Add(i.ID);
}
ViewBag.GMUMasters = ids.ToArray();
ViewBag.ItemID = new SelectList(item, "itemID", "itemName");
ViewBag.ComponentID = new SelectList(component, "compID", "compName");
ViewBag.PartID = new SelectList(part, "partID", "partName");
ViewBag.SalesOrderID = new SelectList(SOID, "SO_id", "status");
ViewBag.SiteID = new SelectList(sites, "siteID", "siteName");
ViewBag.invSiteID = new SelectList(sites, "siteID", "siteName");
return View();
}