public ActionResult DeleteConfirmed(int id)
        {
            DeliveryOrderVM deliveryOrderVM = db.DeliveryOrderVMs.Find(id);

            db.DeliveryOrderVMs.Remove(deliveryOrderVM);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public ActionResult Create([Bind(Include = "ID,CreatedByStaffID,RepliedByStaffID,Comments,CreatedDate,ResponseDate,Status,PurchaseOrderID")] DeliveryOrderVM deliveryOrderVM)
        {
            if (ModelState.IsValid)
            {
                db.DeliveryOrderVMs.Add(deliveryOrderVM);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.CreatedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.CreatedByStaffID);
            ViewBag.RepliedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.RepliedByStaffID);
            return(View(deliveryOrderVM));
        }
        // GET: DeliveryOrders/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            DeliveryOrderVM deliveryOrderVM = db.DeliveryOrderVMs.Find(id);

            if (deliveryOrderVM == null)
            {
                return(HttpNotFound());
            }
            return(View(deliveryOrderVM));
        }
        // GET: DeliveryOrders/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            DeliveryOrder   deliveryOrder = uow.DeliveryOrderRepository.Get(filter: x => x.ID == id, includeProperties: "CreatedByStaff, DocumentItems.Item, PurchaseOrder").FirstOrDefault();
            DeliveryOrderVM vm            = new DeliveryOrderVM(deliveryOrder);

            if (vm == null)
            {
                return(HttpNotFound());
            }
            return(View(vm));
        }
        // GET: DeliveryOrders/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PurchaseOrder PO = uow.PurchaseOrderRepository.GetByPurchaseOrderID(id);

            //If PO in progress create a form for the remainder items
            if (PO.Status.ToString() == "InProgress")
            {
                foreach (DeliveryOrder DO in PO.DeliveryOrders)
                {
                    foreach (DocumentItem di in DO.DocumentItems)
                    {
                        foreach (PurchaseItem pi in PO.PurchaseItems)
                        {
                            if (pi.Tender.Item.ID == di.Item.ID)
                            {
                                pi.Qty = pi.Qty - di.Qty;
                            }
                        }
                    }
                }
            }

            DeliveryOrderVM deliveryOrderVM = new DeliveryOrderVM(PO);

            if (deliveryOrderVM == null)
            {
                return(HttpNotFound());
            }
            ViewBag.CreatedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.CreatedByStaffID);
            ViewBag.RepliedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.RepliedByStaffID);
            return(View(deliveryOrderVM));
        }
        public ActionResult Edit([Bind(Include = "ID, CreatedByStaffID, RepliedByStaffID, Comments, Supplier, CreatedDate, ResponseDate, Status, PurchaseOrderID, TransactionItems")] DeliveryOrderVM deliveryOrderVM, int?id)
        {
            //if (ModelState.IsValid)
            //{

            List <DocumentItem>    deliveredItems = new List <DocumentItem>();
            List <TransactionItem> items          = deliveryOrderVM.TransactionItems;

            //Check if Delivery Incomplete
            bool incomplete = false;

            foreach (TransactionItem ti in items)
            {
                if (ti.TakeOverQty < ti.HandOverQty)
                {
                    incomplete = true;
                }
                DocumentItem di = new DocumentItem(ti, uow);
                if (di.Qty != 0)
                {
                    deliveredItems.Add(di);
                }
            }

            //Update PurchaseOrder Status
            PurchaseOrder PO = uow.PurchaseOrderRepository.GetByPurchaseOrderID(id);

            if (incomplete)
            {
                Debug.WriteLine("Incomplete True");
                PO.InProgress();
                uow.PurchaseOrderRepository.Update(PO);
                uow.Save();
            }
            else
            {
                Debug.WriteLine("Complete True");
                PO.Completed();
                uow.PurchaseOrderRepository.Update(PO);
                uow.Save();
            }

            Staff currentUser = loginService.StaffFromSession;

            //Create DeliveryOrder

            DeliveryOrder deliveryOrder = new DeliveryOrder(currentUser, PO.Supplier, PO);

            deliveryOrder.DocumentItems = deliveredItems;
            bool result = uow.StockCardEntryRepository.ProcessDeliveryOrderAcceptance(deliveryOrder);
            //update inventory
            InventoryService inventoryService = new InventoryService();

            foreach (DocumentItem di in deliveredItems)
            {
                inventoryService.UpdateInStoreQty(di.Item.ID);
            }

            if (result)
            {
                uow.DeliveryOrderRepository.Insert(deliveryOrder);
                uow.Save();
                return(RedirectToAction("Index"));
            }
            else
            {
                ViewBag.CreatedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.CreatedByStaffID);
                ViewBag.RepliedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.RepliedByStaffID);
                return(View(deliveryOrderVM));
            }
            //}
            //ViewBag.CreatedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.CreatedByStaffID);
            //ViewBag.RepliedByStaffID = new SelectList(db.Staffs, "ID", "UserAccountID", deliveryOrderVM.RepliedByStaffID);
            //return View(deliveryOrderVM);
        }