コード例 #1
0
        public void GuessCompanyAndContact(MailItemInfo currentMailItemInfo)
        {
            string contactName;
            string contactEmaiAddress;
            string contactDomainName = string.Empty;

            if (currentMailItemInfo.IsInboxItem == true)
            {
                contactName = currentMailItemInfo.FromDisplayName;
                contactEmaiAddress = currentMailItemInfo.FromEmailAddress;
            }
            else
            {
                if (currentMailItemInfo.Recipients.Count > 0)
                {
                    var recipient = currentMailItemInfo.Recipients.First();

                    contactName = recipient.DisplayName;
                    contactEmaiAddress = recipient.Address;
                }
                else
                {
                    return;
                }
            }

            if (string.IsNullOrEmpty(contactEmaiAddress) && contactEmaiAddress.Contains('@'))
            {
                contactDomainName = contactEmaiAddress.Split(new char[] { '@' })[1];
            }

            var items = new List<KundeKontaktListViewitem>();

            customerContactsListView.SuspendLayout();
            customerContactsListView.Items.Clear();

            foreach (var thisKunde in IOfficeConnectGlobals.KunderCache)
            {
                foreach (var thisContact in thisKunde.Value.Kontakter)
                {
                    if (string.Equals(thisContact.Kontakt.WorkEmail1, contactEmaiAddress, StringComparison.InvariantCultureIgnoreCase) ||
                        string.Equals(thisContact.Kontakt.WorkEmail2, contactEmaiAddress, StringComparison.InvariantCultureIgnoreCase) ||
                        string.Equals(thisContact.Kontakt.WorkEmail3, contactEmaiAddress, StringComparison.InvariantCultureIgnoreCase) ||
                        string.Equals(thisContact.Kontakt.PrivateEmail, contactEmaiAddress, StringComparison.InvariantCultureIgnoreCase))
                    {
                        var lvi = new KundeKontaktListViewitem(thisKunde.Value.Navn);
                        lvi.SubItems.Add(thisContact.Kontakt.Navn);
                        lvi.SubItems.Add(thisContact.Kontakt.WorkEmail1);
                        lvi.Kunde = thisKunde.Value;
                        lvi.Kontakt = thisContact.Kontakt;

                        items.Add(lvi);
                    }
                }
            }

            if (items.Count > 0)
            {
                customerContactsListView.Items.AddRange(items.ToArray());

                customerContactsListView.Enabled = true;

                //customerContactsListView.Items[0].Selected = true;

                var selectIndex = customerContactsListView.Items.IndexOf(items.First());
                customerContactsListView.Items[selectIndex].Selected = true;
            }
            else
            {
                foreach (var thisKunde in IOfficeConnectGlobals.KunderCache)
                {
                    foreach (var thisContact in thisKunde.Value.Kontakter)
                    {
                        if (string.Equals(thisContact.Kontakt.Navn, contactName) ||
                            string.Equals(thisKunde.Value.Navn, contactName, StringComparison.InvariantCultureIgnoreCase) ||
                            string.Equals(thisKunde.Value.DomainName, contactDomainName, StringComparison.InvariantCultureIgnoreCase) ||
                            string.Equals(thisKunde.Value.EmailAddress, contactEmaiAddress, StringComparison.InvariantCultureIgnoreCase))
                        {
                            var lvi = new KundeKontaktListViewitem(thisKunde.Value.Navn);
                            lvi.SubItems.Add(thisContact.Kontakt.Navn);
                            lvi.SubItems.Add(thisContact.Kontakt.WorkEmail1);
                            lvi.Kunde = thisKunde.Value;
                            lvi.Kontakt = thisContact.Kontakt;

                            items.Add(lvi);
                        }
                    }
                }

                if (items.Count > 0)
                {
                    customerContactsListView.Items.AddRange(items.ToArray());

                    customerContactsListView.Enabled = true;

                    var selectIndex = customerContactsListView.Items.IndexOf(items.First());
                    customerContactsListView.Items[selectIndex].Selected = true;
                }
                else
                {
                    customerContactsListView.Items.Add(new ListViewItem("(Unknown contact, use company/contact search facility"));

                    customerContactsListView.Enabled = false;
                }
            }

            customerContactsListView.ResumeLayout();
        }
コード例 #2
0
        private void Filter()
        {
            customerContactsListView.SuspendLayout();
            customerContactsListView.Items.Clear();

            tasksListView.Items.Clear();

            if (string.IsNullOrEmpty(companyContactSearchTextBox.Text) == false)
            {
                var searchTerms = companyContactSearchTextBox.Text.Split(' ').Where(t => string.IsNullOrEmpty(t) == false).ToList();

                var kundeHits = new List<KundeSearchHit>();

                foreach (var thisKunde in IOfficeConnectGlobals.KunderCache)
                {
                    var kundeHit = new KundeSearchHit() { Kunde = thisKunde.Value };

                    var searchTermRank = 100;

                    foreach (var thisSearchTerm in searchTerms)
                    {
                        var kundeNavnTerm = thisKunde.Value.NavnTerms.Where(t => t.StartsWith(thisSearchTerm, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

                        if (string.IsNullOrEmpty(kundeNavnTerm) == false)
                        {
                            var i = thisKunde.Value.NavnTerms.IndexOf(kundeNavnTerm);

                            kundeHit.Score += searchTermRank - i;
                        }

                        searchTermRank--;
                    }

                    if (kundeHit.Score > 0)
                    {
                        kundeHits.Add(kundeHit);
                    }
                }

                foreach (var thisKundeHit in kundeHits)
                {
                    var searchTermRank = 100;

                    foreach (var thisKontakt in thisKundeHit.Kunde.Kontakter)
                    {
                        thisKontakt.Score = 0;

                        foreach (var thisSearchTerm in searchTerms)
                        {
                            var kontaktNavnTerm = thisKontakt.Kontakt.NavnTerms.Where(t => t.StartsWith(thisSearchTerm, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

                            if (string.IsNullOrEmpty(kontaktNavnTerm) == false)
                            {
                                var i = thisKontakt.Kontakt.NavnTerms.IndexOf(kontaktNavnTerm);

                                thisKontakt.Score += searchTermRank - i;
                            }
                        }
                    }
                }

                var lvs = new List<ListViewItem>();

                foreach (var thisKundeHit in kundeHits.OrderByDescending(h => h.Score).Take(200))
                {
                    if (thisKundeHit.Kunde.Kontakter.Count > 0)
                    {
                        foreach (var thisKontaktHit in thisKundeHit.Kunde.Kontakter.OrderByDescending(k => k.Score))
                        {
                            var lvi = new KundeKontaktListViewitem(thisKundeHit.Kunde.Navn);
                            lvi.SubItems.Add(thisKontaktHit.Kontakt.Navn);
                            lvi.SubItems.Add(thisKontaktHit.Kontakt.WorkEmail1);
                            lvi.Kunde = thisKundeHit.Kunde;
                            lvi.Kontakt = thisKontaktHit.Kontakt;

                            lvs.Add(lvi);
                        }
                    }
                    else
                    {
                        var lvi = new KundeKontaktListViewitem(thisKundeHit.Kunde.Navn);
                        lvi.SubItems.Add("(No contacts)");
                        lvi.Kunde = thisKundeHit.Kunde;

                        lvs.Add(lvi);
                    }
                }

                customerContactsListView.Items.AddRange(lvs.ToArray());
            }

            customerContactsListView.Enabled = true;

            customerContactsListView.ResumeLayout();

            RaiseCustomerContactSelected(null, null);
        }