public IQueryable <CatPartnerViewModel> Query(CatPartnerCriteria criteria)
        {
            string partnerGroup = criteria != null?PlaceTypeEx.GetPartnerGroup(criteria.PartnerGroup) : null;

            var data = DataContext.Get(x => (x.PartnerGroup ?? "").Contains(partnerGroup ?? "", StringComparison.OrdinalIgnoreCase) &&
                                       (x.Active == criteria.Active || criteria.Active == null) &&
                                       (x.CoLoaderCode ?? "").Contains(criteria.CoLoaderCode ?? "", StringComparison.OrdinalIgnoreCase)
                                       );

            if (data == null)
            {
                return(null);
            }
            var results = data.Select(x => new CatPartnerViewModel {
                Id            = x.Id,
                PartnerGroup  = x.PartnerGroup,
                PartnerNameVn = x.PartnerNameVn,
                PartnerNameEn = x.PartnerNameEn,
                ShortName     = x.ShortName,
                TaxCode       = x.TaxCode,
                SalePersonId  = x.SalePersonId,
                Tel           = x.Tel,
                AddressEn     = x.AddressEn,
                Fax           = x.Fax,
                CoLoaderCode  = x.CoLoaderCode,
            });

            return(results);
        }
        public IQueryable <CatPartnerModel> GetBy(CatPartnerGroupEnum partnerGroup)
        {
            string group = PlaceTypeEx.GetPartnerGroup(partnerGroup);
            IQueryable <CatPartnerModel> data = Get().Where(x => (x.PartnerGroup ?? "").IndexOf(group ?? "", StringComparison.OrdinalIgnoreCase) >= 0);

            return(data);
        }
        public IQueryable <CatPartnerModel> GetMultiplePartnerGroup(PartnerMultiCriteria criteria)
        {
            IQueryable <CatPartnerModel> data = Get();

            if (criteria == null)
            {
                return(data);
            }
            List <string> grpCodes = new List <string>();

            if (criteria.PartnerGroups != null)
            {
                foreach (var grp in criteria.PartnerGroups)
                {
                    string group = PlaceTypeEx.GetPartnerGroup(grp);
                    grpCodes.Add(group);
                }
                Expression <Func <CatPartnerModel, bool> > query = null;
                foreach (var group in grpCodes.Distinct())
                {
                    if (query == null)
                    {
                        query = x => (x.PartnerGroup ?? "").IndexOf(group ?? "", StringComparison.OrdinalIgnoreCase) >= 0;
                    }
                    else
                    {
                        query = query.Or(x => (x.PartnerGroup ?? "").IndexOf(group ?? "", StringComparison.OrdinalIgnoreCase) >= 0);
                    }
                }
                query = criteria.Active != null?query.And(x => x.Active == criteria.Active) : query;

                data = data.Where(query);
            }
            else
            {
                data = data.Where(x => x.Active == criteria.Active || criteria.Active == null);
            }
            return(data);
        }
        private List <CatPartnerViewModel> QueryPaging(CatPartnerCriteria criteria)
        {
            string partnerGroup = criteria != null?PlaceTypeEx.GetPartnerGroup(criteria.PartnerGroup) : null;

            var sysUsers = sysUserRepository.Get();
            var partners = Get(x => (x.PartnerGroup ?? "").IndexOf(partnerGroup ?? "", StringComparison.OrdinalIgnoreCase) >= 0);
            var salemans = salemanRepository.Get().ToList();

            var dataSalemans = salemans.Select(x => x.PartnerId);

            if (partners == null)
            {
                return(null);
            }

            var query = (from partner in partners
                         join user in sysUsers on partner.UserCreated equals user.Id
                         join saleman in sysUsers on partner.SalePersonId equals saleman.Id into prods
                         from x in prods.DefaultIfEmpty()
                         select new { user, partner, saleman = x }
                         );

            if (criteria.All == null)
            {
                query = query.Where(x => ((x.partner.AccountNo ?? "").IndexOf(criteria.Id ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.ShortName ?? "").IndexOf(criteria.ShortName ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.PartnerNameEn ?? "").IndexOf(criteria.PartnerNameEn ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.PartnerNameVn ?? "").IndexOf(criteria.PartnerNameVn ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.AddressVn ?? "").IndexOf(criteria.AddressVn ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.TaxCode ?? "").IndexOf(criteria.TaxCode ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.Tel ?? "").IndexOf(criteria.Tel ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.Fax ?? "").IndexOf(criteria.Fax ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.user.Username ?? "").IndexOf(criteria.UserCreated ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.AccountNo ?? "").IndexOf(criteria.AccountNo ?? "", StringComparison.OrdinalIgnoreCase) >= 0 &&
                                          (x.partner.CoLoaderCode ?? "").Contains(criteria.CoLoaderCode ?? "", StringComparison.OrdinalIgnoreCase) &&
                                          (x.partner.Active == criteria.Active || criteria.Active == null)
                                          ))?.AsQueryable();
            }
            else
            {
                query = query.Where(x =>
                                    (
                                        (x.partner.AccountNo ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.ShortName ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.PartnerNameEn ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.PartnerNameVn ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.AddressVn ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.TaxCode ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.Tel ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.Fax ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.user.Username ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.AccountNo ?? "").IndexOf(criteria.All ?? "", StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (x.partner.CoLoaderCode ?? "").Contains(criteria.All ?? "", StringComparison.OrdinalIgnoreCase)
                                    ) &&
                                    (x.partner.Active == criteria.Active || criteria.Active == null))?.AsQueryable();
            }
            if (query == null)
            {
                return(null);
            }
            List <CatPartnerViewModel> results = new List <CatPartnerViewModel>();

            foreach (var item in query)
            {
                var partner = mapper.Map <CatPartnerViewModel>(item.partner);
                partner.UserCreatedName = item.user?.Username;
                partner.SalePersonName  = item.saleman?.Username;
                results.Add(partner);
            }
            return(results);
        }