//public ActionResult OutstandingDisbursementList()
        //{
        //    DateTime cutoff = DateTime.Now.Date;
        //    List<Department> departments = new List<Department>();
        //    departments = departmentDAO.GetDepartmentsWithOutstandingOrders(cutoff);

        //    ViewData["departments"] = departments;

        //    return View();
        //}

        public ActionResult GenerateDisbursementLists()
        {
            DateTime          cutoff      = DateTime.Now.Date; //Ensures that orders only up to yesterday 2359 is taken into consideration
            List <Department> departments = departmentDAO.GetDepartmentsWithOutstandingOrders(cutoff);
            List <DisbursementDetailViewModel> consolidatedOrders = new List <DisbursementDetailViewModel>();

            foreach (Department d in departments)
            {
                DepartmentStaff rep = departmentStaffDAO.getDeptRep(d.DeptId);
                using (db = new LogicEntities())
                {
                    var resultSet = from rd in db.RequestDetail
                                    from r in db.Request
                                    where (r.Status.Contains("New") || r.Status.Contains("Outstanding")) &&
                                    r.RequestId == rd.RequestId && r.DeptId == d.DeptId &&
                                    r.ReqDate < cutoff
                                    group rd by new { rd.ProductId, r.DeptId } into g
                        select new DisbursementDetailViewModel            //Note to self: Groupby only works with enums or primitive data types
                    {
                        ProductId    = g.Key.ProductId,
                        DepartmentId = g.Key.DeptId,
                        Quantity     = g.Sum(x => x.ReqQty)
                    };
                    consolidatedOrders = resultSet.ToList();

                    Disbursement dis = new Disbursement
                    {
                        DisDate           = DateTime.Now,
                        Status            = "Pending",
                        DeptId            = d.DeptId,
                        StoreStaffId      = null,
                        ReceiveStaffId    = rep.StaffId,
                        CollectionPointId = d.CollectionPt
                    };
                    List <DisbursementDetail> disbursementdetails = new List <DisbursementDetail>();
                    foreach (DisbursementDetailViewModel p in consolidatedOrders)
                    {
                        DisbursementDetail dd = new DisbursementDetail
                        {
                            ProductId   = p.ProductId,
                            RequiredQty = p.Quantity,
                            ReceivedQty = 0,
                            DisId       = dis.DisId
                        };
                        disbursementdetails.Add(dd);
                    }
                    db.Disbursement.Add(dis);
                    db.DisbursementDetail.AddRange(disbursementdetails);
                    db.SaveChanges();
                }
            }

            return(RedirectToAction("FindDisbursementList"));
        }