/// <summary>
        /// Insert or update stock based on purchase Items
        /// </summary>
        /// <param name="vm"></param>
        public void InsertOrUpdateInventory(PurchaseItem vm)
        {
            using (MyContext db = new MyContext())
            {
                _stock = new Stock();

                //Initialize new stock with vm inserted values
                _stock.ItemID = vm.ItemID;
                _stock.BatchNo = vm.Batch;
                _stock.CostPrice = vm.CostPrice;
                _stock.SellingPrice = vm.SellingPrice;
                _stock.ExpiryDate = vm.Expiry;
                _stock.PurchaseID = vm.PurchaseID;

                //Get list of all the inserted item in Stock table
                List<Stock> _checkItem = (from s in db.Stocks
                                          where s.ItemID == vm.ItemID && s.BatchNo == vm.Batch
                                          select s).ToList();

                //count the number of exixting record on inserted item
                int countStock = _checkItem.Count();

                //Add new record if record is not found
                if (countStock == 0)
                {
                    //Add new item with new Initial qty
                    _stock.Qty = vm.Qty;
                    _stock.InitialQty = _stock.Qty;
                    db.Stocks.Add(_stock);
                    db.SaveChanges();
                }
                else
                {
                    //to check how many times loop executes completely 
                    int loopCount = 0;
                    //Check and Add or update
                    foreach (Stock stock in _checkItem)
                    {
                        if (stock.CostPrice == vm.CostPrice)
                        {
                            //Update qty and InitialQty 
                            stock.Qty += vm.Qty;
                            stock.InitialQty += vm.Qty;
                            db.SaveChanges();
                            break;
                        }
                        loopCount++;
                    }
                    if (loopCount == _checkItem.Count())
                    {
                        //Add new record with Qty and intial Qty
                        _stock.InitialQty += vm.Qty;
                        db.Stocks.Add(_stock);
                        db.SaveChanges();
                    }
                }
            }
        }
        public ActionResult BulkInsert(PurchaseItem vm)
        {            
            try
            {             

                db.PurchaseItems.Add(vm);
                db.SaveChanges();
                repo.InsertOrUpdateInventory(vm);
            }
            catch(Exception ex)
            {
                ViewBag.SaveException = "Record couldn't be saved! Please check if record has already been entered! Thank you!!";
                return View(vm);
            }
            
            ViewBag.SuccessMsg = "Successfully Saved ! Cheers!";
            return RedirectToAction("Index","PurchaseItem");
        }
        /// <summary>
        /// Insert in purchaseItem using FormCollection.
        /// </summary>
        /// <param name="disposing"></param>
        public void InsertPurchaseItemFormColl(FormCollection coll)
        {

            string[] invoiceId, itemId, batch, qty, cp, sp, expiry;
            invoiceId = coll["PurchaseInvoice"].Split(',');
            itemId = coll["SelectedItemvalue"].Split(',');
            batch = coll["BatchNo"].Split(',');
            qty = coll["Qty"].Split(',');
            cp = coll["CostPrice"].Split(',');
            sp = coll["SellingPrice"].Split(',');
            expiry = coll["Expiry"].Split(',');
            int count = invoiceId.Count();
            for(int i = 0; i<count;i++)
            {
                PurchaseItem pi = new PurchaseItem();
                pi.PurchaseID = invoiceId[i];
                pi.ItemID = Convert.ToInt32(itemId[i]);
                pi.Batch = batch[i];
                pi.Qty = Convert.ToInt32(qty[i]);
                pi.CostPrice = Convert.ToDecimal(cp[i]);
                pi.SellingPrice = Convert.ToDecimal(sp[i]);
                pi.Expiry = Convert.ToDateTime(expiry[i]);
                
                //call bulk insert 
                BulkInsert(pi);

            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="vm"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        public ActionResult NotGoodConstructor(PurchaseItem vm)
        {

            return null;
        }