/// <summary>
        /// Get Requisitions by department
        /// </summary>
        /// <param name="department">department object</param>
        /// <param name="requisitionSearchDTO">requisitionSearchDTO object</param>
        /// <returns>List of VW_RequisitionsByDepartment objects</returns>
        public List<VW_RequisitionsByDepartment> GetRequisitionByDepartmentID(Department department, RequisitionSearchDTO requisitionSearchDTO)
        {
            try
            {
                return GetAllRequisitionByDepartment()
                .Where(ri => ri.DepartmentID == (department.DepartmentID == 0 ? ri.DepartmentID : department.DepartmentID))
                .ToList<VW_RequisitionsByDepartment>();
            }
            catch (Exception)
            {

                throw;
            }
        }
        /// <summary>
        /// Get Requisitions by Employee
        /// </summary>
        /// <param name="user">user object</param>
        /// <param name="requisitionSearchDTO">requisitionSearchDTO object</param>
        /// <returns>List of VW_RequisitionsByEmployee objects</returns>
        public List<VW_RequisitionsByEmployee> GetRequisitionByEmployeeID(User user, RequisitionSearchDTO requisitionSearchDTO)
        {
            try
            {
                return GetAllRequisitionByEmployee().
                  Where(re => re.DateRequested.Month == (requisitionSearchDTO.ExactDateRequested.Month == 0 ? re.DateRequested.Month : requisitionSearchDTO.ExactDateRequested.Month)
                  && re.DateRequested.Year == (requisitionSearchDTO.ExactDateRequested.Year == 0 ? re.DateRequested.Year : requisitionSearchDTO.ExactDateRequested.Year)
                  && re.UserName == (user.UserName == "" ? re.UserName : user.UserName)
                  )
            .ToList<VW_RequisitionsByEmployee>();
            }
            catch (Exception)
            {

                throw new RequisitionException("No Data Found");
            }
        }
        /// <summary>
        /// Get All Requistions by Employee ID
        /// </summary>
        /// <returns></returns>
        public List<Requisition> GetAllRequisition(int EmployeeID, RequisitionSearchDTO reqSearchDTO)
        {
            try
            {
                if (reqSearchDTO != null)
                {
                    return GetAllRequisition().Where(x => x.CreatedBy == EmployeeID && x.DateRequested.Month == reqSearchDTO.ExactDateRequested.Month && x.DateRequested.Year == reqSearchDTO.ExactDateRequested.Year).ToList<Requisition>();

                }
                return GetAllRequisition().Where(x => x.CreatedBy == EmployeeID).ToList<Requisition>();
            }
            catch (Exception)
            {

                throw;
            }
        }
        /// <summary>
        /// Get Requistions by category filter
        /// </summary>
        /// <param name="category">category object</param>
        /// <param name="requisitionSearchDTO">requisitionSearchDTO object</param>
        /// <returns>List of Requisitions by category</returns>
        public List<VW_RequisitionsByCategory> GetRequisitionByCategoryID(Category category, RequisitionSearchDTO requisitionSearchDTO)
        {
            try
            {
                return GetAllRequisitionByCategory()
                .Where(ri => ri.CategoryID == (category.CategoryID == 0 ? ri.CategoryID : category.CategoryID))
                 .ToList<VW_RequisitionsByCategory>();
            }
            catch (Exception)
            {

                throw;
            }
        }
        /// <summary>
        /// Find the requisition by search criteria
        /// </summary>
        /// <param name="requisitioinSearchDTO">requisitioinSearchDTO object</param>
        /// <returns>List of Requisition objects</returns>
        public List<Requisition> FindRequisitionByCriteria(RequisitionSearchDTO requisitioinSearchDTO)
        {
            try
            {
                var tempQuery = GetAllRequisition();

                if (requisitioinSearchDTO != null)
                {
                    if (requisitioinSearchDTO.RequisitionID != 0)
                    {
                        tempQuery.Where(x => x.RequisitionID == requisitioinSearchDTO.RequisitionID).FirstOrDefault<Requisition>();
                    }

                    if (requisitioinSearchDTO.ExactDateRequested >= DateTime.MinValue)
                    {
                       // tempQuery.Where(x => EntityFunctions.DiffDays(x.DateApproved, requisitioinSearchDTO.ExactDateRequested) >= 0).ToList<Requisition>();
                        //GetAllRequisition().Where(x => EntityFunctions.DiffDays(x.DateApproved, requisitioinSearchDTO.ExactDateRequested) >= 0).ToList<Requisition>();
                    }
                }

                //if (requisitioinSearchDTO != null)
                //{
                //    if (requisitioinSearchDTO.RequisitionID != 0)
                //    {
                //        tempQuery = tempQuery.Where(r => r.RequisitionID == requisitioinSearchDTO.RequisitionID);
                //    }
                //    if (requisitioinSearchDTO.StartDateRequested != null && requisitioinSearchDTO.EndDateRequested != null && requisitioinSearchDTO.StartDateRequested >= DateTime.MinValue && requisitioinSearchDTO.EndDateRequested >= DateTime.MinValue)
                //    {
                //        tempQuery = tempQuery.Where(r => r.DateRequested >= requisitioinSearchDTO.StartDateRequested && r.DateRequested <= requisitioinSearchDTO.EndDateRequested);
                //    }

                //    if (requisitioinSearchDTO.StartDateRequested != null && requisitioinSearchDTO.StartDateRequested >= DateTime.MinValue)
                //    {
                //        tempQuery = tempQuery.Where(r => r.DateRequested == requisitioinSearchDTO.StartDateRequested);
                //    }

                //    if (requisitioinSearchDTO.EndDateRequested != null && requisitioinSearchDTO.EndDateRequested >= DateTime.MinValue)
                //    {
                //        tempQuery = tempQuery.Where(r => r.DateRequested == requisitioinSearchDTO.EndDateRequested);
                //    }
                //}

                return tempQuery.ToList<Requisition>();
            }
            catch (Exception)
            {

                throw;
            }
        }
 /// <summary>
 /// Get requisition List by department
 /// </summary>
 /// <param name="department">department object</param>
 /// <param name="requisitionSearchDTO">RequisitionSearchDTO object</param>
 /// <returns>List of VW_RequisitionsByDepartment</returns>
 public List<VW_RequisitionsByDepartment> GetRequisitionByDepartment(Department department, RequisitionSearchDTO requisitionSearchDTO)
 {
     List<VW_RequisitionsByDepartment> temp = requisitionDAO.GetRequisitionByDepartmentID(department, requisitionSearchDTO);
     if (temp != null)
     {
         return temp;
     }
     ErrorMessage("Result Not Found");
     return null;
 }
 /// <summary>
 /// Get requisition List by category
 /// </summary>
 /// <param name="category">category object</param>
 /// <param name="requisitionSearchDTO">RequisitionSearchDTO object</param>
 /// <returns>List of VW_RequisitionsByCategory</returns>
 public List<VW_RequisitionsByCategory> GetRequisitionByCategory(Category category, RequisitionSearchDTO requisitionSearchDTO)
 {
     List<VW_RequisitionsByCategory> temp = requisitionDAO.GetRequisitionByCategoryID(category, requisitionSearchDTO);
     if (temp != null)
     {
         return temp;
     }
     else
     {
         ErrorMessage("Result Not Found");
         return null;
     }
 }
 /// <summary>
 /// Find All Requistions by EmpID
 /// </summary>
 /// <returns></returns>
 public List<Requisition> GetAllRequisition(int EmployeeID, RequisitionSearchDTO reqSearchDTO)
 {
     List<Requisition> temp = requisitionDAO.GetAllRequisition(EmployeeID, reqSearchDTO);
     if (temp != null)
     {
         return temp;
     }
     ErrorMessage("Result Not Found.");
     return null;
 }
 /// <summary>
 /// Find the requisition by search criteria
 /// </summary>
 /// <param name="requisitioinSearchDTO">requisitioinSearchDTO object</param>
 /// <returns></returns>
 public List<Requisition> FindRequisitionByCriteria(RequisitionSearchDTO requisitioinSearchDTO)
 {
     List<Requisition> temp = requisitionDAO.FindRequisitionByCriteria(requisitioinSearchDTO);
     if (temp != null)
     {
         return temp;
     }
     ErrorMessage("Result Not Found");
     return null;
 }