示例#1
0
        public IEnumerable <MailContactData> GetContacts(string search, int?contactType, int?pageSize, int fromIndex, string sortorder)
        {
            var filter = new MailContactsFilter
            {
                SearchFilter = search,
                Type         = contactType,
                StartIndex   = fromIndex,
                Count        = pageSize.GetValueOrDefault(25),
                SortOrder    = sortorder
            };

            var contacts = MailBoxManager.GetMailContacts(
                TenantId,
                Username,
                filter);

            int totalCount;

            if (contacts.Any() && contacts.Count() < pageSize)
            {
                totalCount = fromIndex + contacts.Count();
            }
            else
            {
                totalCount = MailBoxManager.GetMailContactsCount(TenantId,
                                                                 Username,
                                                                 filter);
            }
            _context.SetTotalCount(totalCount);

            return(contacts.ToContactData());
        }
示例#2
0
        public List <ContactCardDto> GetMailContacts(int tenant, string user, MailContactsFilter filter)
        {
            if (filter == null)
            {
                throw new ArgumentNullException("filter");
            }

            var          result        = new List <ContactCardDto>();
            const string mail_contacts = "mc";
            const string contact_info  = "ci";
            var          sortOrder     = filter.SortOrder == "ascending";

            using (var db = GetDb())
            {
                var ids = GetFilteredContactIds(db, tenant, user, filter);

                if (!ids.Any())
                {
                    return(result);
                }

                var queryContacts = new SqlQuery(ContactsTable.Name.Alias(mail_contacts))
                                    .InnerJoin(ContactInfoTable.Name.Alias(contact_info),
                                               Exp.EqColumns(ContactsTable.Columns.Id.Prefix(mail_contacts),
                                                             ContactInfoTable.Columns.ContactId.Prefix(contact_info)))
                                    .Select(
                    ContactsTable.Columns.Id.Prefix(mail_contacts),
                    ContactsTable.Columns.User.Prefix(mail_contacts),
                    ContactsTable.Columns.Tenant.Prefix(mail_contacts),
                    ContactsTable.Columns.ContactName.Prefix(mail_contacts),
                    ContactsTable.Columns.Description.Prefix(mail_contacts),
                    ContactsTable.Columns.Type.Prefix(mail_contacts),
                    ContactsTable.Columns.HasPhoto.Prefix(mail_contacts),
                    ContactInfoTable.Columns.Id.Prefix(contact_info),
                    ContactInfoTable.Columns.Tenant.Prefix(contact_info),
                    ContactInfoTable.Columns.User.Prefix(contact_info),
                    ContactInfoTable.Columns.ContactId.Prefix(contact_info),
                    ContactInfoTable.Columns.Data.Prefix(contact_info),
                    ContactInfoTable.Columns.Type.Prefix(contact_info),
                    ContactInfoTable.Columns.IsPrimary.Prefix(contact_info))
                                    .Where(ContactsTable.Columns.Tenant.Prefix(mail_contacts), tenant)
                                    .Where(ContactsTable.Columns.User.Prefix(mail_contacts), user)
                                    .Where(Exp.In(ContactsTable.Columns.Id.Prefix(mail_contacts), ids))
                                    .OrderBy(ContactsTable.Columns.ContactName.Prefix(mail_contacts), sortOrder);

                result = db.ExecuteList(queryContacts).ToContactCardDto();
            }
            return(result);
        }
示例#3
0
        private List <int> GetFilteredContactIds(DbManager db, int tenant, string user, MailContactsFilter filter)
        {
            SqlQuery     queryContacts;
            var          sortOrder     = filter.SortOrder == "ascending";
            const string mail_contacts = "mc";
            const string contact_info  = "ci";

            if (string.IsNullOrEmpty(filter.SearchFilter))
            {
                queryContacts = new SqlQuery(ContactsTable.Name.Alias(mail_contacts))
                                .Select(ContactsTable.Columns.Id.Prefix(mail_contacts));
            }
            else
            {
                queryContacts = new SqlQuery(ContactsTable.Name.Alias(mail_contacts))
                                .Select(ContactsTable.Columns.Id.Prefix(mail_contacts))
                                .InnerJoin(ContactInfoTable.Name.Alias(contact_info),
                                           Exp.EqColumns(ContactsTable.Columns.Id.Prefix(mail_contacts),
                                                         ContactInfoTable.Columns.ContactId.Prefix(contact_info)))
                                .Distinct();

                if (FullTextSearch.SupportModule(FullTextSearch.MailContactsModule))
                {
                    var ids = FullTextSearch.Search(FullTextSearch.MailContactsModule.Match(filter.SearchFilter));
                    queryContacts = queryContacts.Where(Exp.In(ContactInfoTable.Columns.Id.Prefix(contact_info), ids));
                }
                else
                {
                    queryContacts = queryContacts.Where(
                        Exp.Or(
                            Exp.Like(mail_contacts + '.' + ContactsTable.Columns.Description, filter.SearchFilter, SqlLike.StartWith),
                            Exp.Or(
                                Exp.Like(ContactsTable.Columns.ContactName.Prefix(mail_contacts), filter.SearchFilter, SqlLike.StartWith),
                                Exp.Like(ContactInfoTable.Columns.Data.Prefix(contact_info), filter.SearchFilter, SqlLike.StartWith))));
                }
            }

            if (filter.Type.HasValue)
            {
                queryContacts = queryContacts.Where(ContactsTable.Columns.Type.Prefix(mail_contacts), filter.Type);
            }

            queryContacts = queryContacts.Where(ContactsTable.Columns.Tenant.Prefix(mail_contacts), tenant)
                            .Where(ContactsTable.Columns.User.Prefix(mail_contacts), user)
                            .OrderBy(ContactsTable.Columns.ContactName.Prefix(mail_contacts), sortOrder)
                            .SetFirstResult(filter.StartIndex)
                            .SetMaxResults(filter.Count);

            return(db.ExecuteList(queryContacts).ConvertAll(r => Convert.ToInt32(r[0])));
        }
示例#4
0
        public int GetMailContactsCount(int tenant, string user, MailContactsFilter filter)
        {
            if (filter == null)
            {
                throw new ArgumentNullException("filter");
            }

            int result;

            using (var db = GetDb())
            {
                SqlQuery queryContacts;
                if (string.IsNullOrEmpty(filter.SearchFilter))
                {
                    queryContacts = new SqlQuery(ContactsTable.Name)
                                    .SelectCount()
                                    .Where(GetUserWhere(user, tenant));

                    if (filter.Type.HasValue)
                    {
                        queryContacts = queryContacts.Where(ContactsTable.Columns.Type, filter.Type);
                    }
                }
                else
                {
                    const string mail_contacts = "mc";
                    const string contact_info  = "ci";

                    queryContacts = new SqlQuery(ContactsTable.Name.Alias(mail_contacts))
                                    .SelectCount("distinct " + ContactsTable.Columns.Id.Prefix(mail_contacts))
                                    .InnerJoin(ContactInfoTable.Name.Alias(contact_info),
                                               Exp.EqColumns(ContactsTable.Columns.Id.Prefix(mail_contacts),
                                                             ContactInfoTable.Columns.ContactId.Prefix(contact_info)))
                                    .Where(ContactsTable.Columns.Tenant.Prefix(mail_contacts), tenant)
                                    .Where(ContactsTable.Columns.User.Prefix(mail_contacts), user);

                    if (filter.Type.HasValue)
                    {
                        queryContacts = queryContacts.Where(ContactsTable.Columns.Type.Prefix(mail_contacts), filter.Type);
                    }

                    if (FullTextSearch.SupportModule(FullTextSearch.MailContactsModule))
                    {
                        var ids = FullTextSearch.Search(FullTextSearch.MailContactsModule.Match(filter.SearchFilter));
                        queryContacts = queryContacts.Where(Exp.In(ContactInfoTable.Columns.Id, ids));
                    }
                    else
                    {
                        queryContacts = queryContacts.Where(
                            Exp.Or(Exp.Like(mail_contacts + '.' + ContactsTable.Columns.Description, filter.SearchFilter,
                                            SqlLike.StartWith),
                                   Exp.Or(Exp.Like(mail_contacts + '.' + ContactsTable.Columns.ContactName, filter.SearchFilter,
                                                   SqlLike.StartWith),
                                          Exp.Like(contact_info + '.' + ContactInfoTable.Columns.Data, filter.SearchFilter,
                                                   SqlLike.StartWith))));
                    }
                }
                result = db.ExecuteList(queryContacts).ConvertAll(r => Convert.ToInt32(r[0])).FirstOrDefault();
            }

            return(result);
        }