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(); }
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); }