public List <Consignment> GetConsignments(QueryOptions queryOptions, SearchObject searchObject,
                                                  out int totalCount)
        {
            totalCount = 0;

            var result = new List <Consignment>();

            if (searchObject.CompletedConsignmentsOnly)
            {
                result = _repository.Query(GetSearchCriteria(searchObject))
                         .Include(inc => inc.ConsignmentItems)
                         .Include(inc => inc.ConsignmentItems.Select(ci => ci.Produce))
                         .Include(inc => inc.ConsignmentItems.Select(i => i.ConsignmentItemArrivals))
                         //.Include(inc => inc.ConsignmentItems.Select(i => i.PurchaseInvoiceItems))
                         .Include(inc => inc.ConsignmentItems.Select(ci => ci.TicketItems))
                         .Include(inc => inc.ConsignmentItems.Select(ci => ci.TicketItems.Select(ti => ti.Ticket)))
                         .Include(inc => inc.SupplierDepartment.Supplier)
                         .OrderBy(GetOrder(queryOptions.SortField, queryOptions.SortOrder))
                         .SelectPage(queryOptions.CurrentPage, queryOptions.PageSize, out totalCount)
                         .ToList();

                //result = result.AsQueryable().OrderBy(queryOptions.SortField + " " + queryOptions.SortOrder).ToList();
            }
            else
            {
                result = _repository.Query(GetSearchCriteria(searchObject))
                         //.Include(inc => inc.Note)
                         //.Include(inc => inc.SupplierDepartment)
                         //.Include(inc => inc.ConsignmentFiles)
                         .Include(inc => inc.ConsignmentItems)
                         .Include(inc => inc.ConsignmentItems.Select(ci => ci.Produce))
                         .Include(inc => inc.SupplierDepartment.Supplier)
                         //.Include(inc => inc.SupplierItems.Select(si => si.SupplierItemID)) /////////////
                         .OrderBy(GetOrder(queryOptions.SortField, queryOptions.SortOrder))
                         .SelectPage(queryOptions.CurrentPage, queryOptions.PageSize, out totalCount)
                         .ToList();
            }

            return(result);
        }
        private Expression <Func <Consignment, bool> > GetSearchCriteria(SearchObject searchObject)
        {
            Expression <Func <Consignment, bool> > mainCriteria = c => c.IsHistory == false;

            mainCriteria = mainCriteria.And(c => c.IsDeleted == false);

            if (searchObject.CompletedConsignmentsOnly)
            {
                //mainCriteria = mainCriteria.And(c => c.ConsignmentItems.Count > 0 &&  c.ConsignmentItems.All(ci => ci.ConsignmentItemArrivals.Sum(a => a.QuantityReceived) == 0));

                mainCriteria = mainCriteria.And(c => c.ConsignmentItems.Count > 0 && c.ConsignmentItems.All(ci => ci.PurchaseInvoiceItems.Count > 0));
            }

            if (!string.IsNullOrEmpty(searchObject.SupplierDepartmentNameOrConsignmentReference))
            {
                mainCriteria =
                    mainCriteria.And(
                        c =>
                        c.ConsignmentReference.StartsWith(searchObject.SupplierDepartmentNameOrConsignmentReference) ||
                        c.SupplierDepartment.SupplierDepartmentName.StartsWith(
                            searchObject.SupplierDepartmentNameOrConsignmentReference));
            }
            else
            {
                if (!string.IsNullOrEmpty(searchObject.ConsignmentReference))
                {
                    mainCriteria =
                        mainCriteria.And(c => c.ConsignmentReference.StartsWith(searchObject.ConsignmentReference));
                }

                if (!string.IsNullOrEmpty(searchObject.SupplierDepartmentId))
                {
                    Guid supplierDepartmentId;
                    if (!Guid.TryParse(searchObject.SupplierDepartmentId, out supplierDepartmentId))
                    {
                        supplierDepartmentId = Guid.Empty;
                    }
                    mainCriteria =
                        mainCriteria.And(
                            c => c.SupplierDepartment.SupplierDepartmentID == supplierDepartmentId);
                }
                if (!string.IsNullOrEmpty(searchObject.SupplierCode))
                {
                    var SupplierID = Guid.Parse(searchObject.SupplierCode);
                    mainCriteria =
                        mainCriteria.And(
                            c => c.SupplierDepartment.Supplier.SupplierID == SupplierID);
                }
                else
                {
                    if (!string.IsNullOrEmpty(searchObject.SupplierName))
                    {
                        mainCriteria =
                            mainCriteria.And(
                                c =>
                                c.SupplierDepartment.Supplier.SupplierCode.StartsWith(searchObject.SupplierName) |
                                c.SupplierDepartment.Supplier.SupplierCompanyName.StartsWith(
                                    searchObject.SupplierName));
                    }
                }
            }

            if (searchObject.FromDate.HasValue)
            {
                mainCriteria = mainCriteria.And(c => c.CreatedDate.Value >= searchObject.FromDate.Value);
            }
            if (searchObject.ToDate.HasValue)
            {
                mainCriteria = mainCriteria.And(c => c.CreatedDate.Value <= searchObject.ToDate.Value);
            }
            return(mainCriteria);
        }