public SearchResult <Employee> SearchEmpByOrderInfo(DateTime?fromOrderDate,
                                                            DateTime?toOrderDate, List <Object> listOfStatusID,
                                                            uint searchBy, Guid?departmentID, int currPage
                                                            )
        {
            ISearchQuery query = SearchQueryBuilder.CreateQuery();

            SearchEmpByOrderInfoCriteria searchEmpCriteria = new SearchEmpByOrderInfoCriteria();

            if (fromOrderDate != null && fromOrderDate.HasValue &&
                fromOrderDate.Value > System.Data.SqlTypes.SqlDateTime.MinValue.Value &&
                fromOrderDate.Value < System.Data.SqlTypes.SqlDateTime.MaxValue.Value)
            {
                searchEmpCriteria.FromOrderDate = fromOrderDate.Value;
            }

            if (toOrderDate != null && toOrderDate.HasValue &&
                toOrderDate.Value > System.Data.SqlTypes.SqlDateTime.MinValue.Value &&
                toOrderDate.Value < System.Data.SqlTypes.SqlDateTime.MaxValue.Value)

            {
                searchEmpCriteria.ToOrderDate = toOrderDate.Value;
            }

            searchEmpCriteria.ListOfOrderStatus = listOfStatusID;

            searchEmpCriteria.SearchBy = searchBy;
            if (departmentID != null && departmentID.HasValue && departmentID.Value != Guid.Empty)
            {
                searchEmpCriteria.DepartmentID = departmentID.Value;
            }
            query.SetCriteria(searchEmpCriteria);

            if (currPage != 0)
            {
                query.SetPage(currPage);
                query.SetMaxResults(ConfigurationSettings.DefaultPageSize);
            }
            return(Search(query));
        }
        protected override NHibernate.ICriteria ParseCriteria <Y>(SearchCriteria searchCriteria)
        {
            NHibernate.ICriteria         criteria = base.ParseCriteria <Y>(searchCriteria);
            SearchEmpByOrderInfoCriteria searchEmpByOrderCriteria = searchCriteria as SearchEmpByOrderInfoCriteria;

            if (searchEmpByOrderCriteria != null)
            {
                //criteria.CreateAlias("[Order]", "o", NHibernate.SqlCommand.JoinType.LeftOuterJoin);
                StringBuilder sb = new StringBuilder();
                if (searchEmpByOrderCriteria.SearchBy == SearchEmpByOrderInfoCriteria.SEARCH_BY_CASE_MANAGER)
                {
                    sb.Append(" {alias}.ID IN (Select o.CaseManagerID from [Order] o");
                    sb.Append(" WHERE o.CaseManagerID IS NOT NULL  ");
                }
                else
                {
                    sb.Append(" {alias}.ID IN (Select o.OrderTakerID from [Order] o");
                    sb.Append(" WHERE o.OrderTakerID IS NOT NULL ");
                }
                if (searchEmpByOrderCriteria.FromOrderDate != null &&
                    searchEmpByOrderCriteria.FromOrderDate > System.Data.SqlTypes.SqlDateTime.MinValue.Value &&
                    searchEmpByOrderCriteria.FromOrderDate < System.Data.SqlTypes.SqlDateTime.MaxValue.Value)
                {
                    sb.Append(" and o.CreatedDate > '" + searchEmpByOrderCriteria.FromOrderDate.ToShortDateString() + " " + searchEmpByOrderCriteria.FromOrderDate.ToShortTimeString() + "'");
                }
                if (searchEmpByOrderCriteria.ToOrderDate != null &&
                    searchEmpByOrderCriteria.ToOrderDate > System.Data.SqlTypes.SqlDateTime.MinValue.Value &&
                    searchEmpByOrderCriteria.ToOrderDate < System.Data.SqlTypes.SqlDateTime.MaxValue.Value)
                {
                    sb.Append(" and o.CreatedDate < '" + searchEmpByOrderCriteria.ToOrderDate.ToShortDateString() + " " + searchEmpByOrderCriteria.ToOrderDate.ToShortTimeString() + "'");
                }
                if (searchEmpByOrderCriteria.OrderStatus != 0)
                {
                    sb.Append((" and o.OrderStatusID=" + searchEmpByOrderCriteria.OrderStatus.ToString()));
                }
                else if ((searchEmpByOrderCriteria.ListOfOrderStatus != null) && (searchEmpByOrderCriteria.ListOfOrderStatus.Count > 0))
                {
                    String s = "";
                    foreach (Object o in searchEmpByOrderCriteria.ListOfOrderStatus)
                    {
                        if (!String.IsNullOrEmpty(s))
                        {
                            s += ",";
                        }
                        s += o.ToString();
                    }
                    s = "(" + s + ")";
                    sb.Append((" and o.OrderStatusID in " + s));
                }
                sb.Append(")");
                criteria.Add(Expression.Sql(sb.ToString()));

                //if (searchEmpByOrderCriteria.SearchBy == SearchEmpByOrderInfoCriteria.SEARCH_BY_CASE_MANAGER)
                //{
                //  criteria.CreateAlias("EmployeeTitle", "empTitle", NHibernate.SqlCommand.JoinType.LeftOuterJoin);
                //}
                //if (searchEmpByOrderCriteria.SearchBy == SearchEmpByOrderInfoCriteria.SEARCH_BY_ORDER_REP)
                //{
                //  criteria.CreateAlias("Department", "dept", NHibernate.SqlCommand.JoinType.LeftOuterJoin);
                //}

                criteria.Add(Expression.Sql(sb.ToString()));

                if (searchEmpByOrderCriteria.SearchBy == SearchEmpByOrderInfoCriteria.SEARCH_BY_CASE_MANAGER)
                {
                    criteria.Add(Expression.Eq("EmployeeTitle.ID", EmployeeTitle.EMPLOYEE_TITLE.Case_Manager));
                }

                if (searchEmpByOrderCriteria.SearchBy == SearchEmpByOrderInfoCriteria.SEARCH_BY_ORDER_REP)
                {
                    if (searchEmpByOrderCriteria.DepartmentID != Guid.Empty)
                    {
                        criteria.Add(Expression.Eq("Department.ID", searchEmpByOrderCriteria.DepartmentID));
                    }
                }
            }

            return(criteria);
        }