/// <summary> /// Consente di individuare se il condomino è residente confrontando l'indirizzo della persona con quello del condominio /// </summary> /// <remarks>Per stabilire se gli indirizzi corrispondono viene usato un componente di terze parti <see cref="http://www.shuffletext.com/Default.aspx"/></remarks> /// <param name="soggetto">Condomino</param> /// <returns>Ritorna true se è residente altrimenti false</returns> public bool IsResidente(SoggettoCondominio soggetto) { if (soggetto != null && soggetto.IsResidente == null && soggetto.UnitaImmobiliare != null && soggetto.UnitaImmobiliare.GruppoStabileRiferimento != null && soggetto.Persona != null && soggetto.Persona.IndirizzoResidenza != null && !string.IsNullOrEmpty(soggetto.Persona.IndirizzoResidenza.Indirizzo)) { try { var condominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento; if (condominio.Indirizzo != null) { var person = new SearchableDictionary<int>(); var fuzzy = new FuzzySearch<int>(); var query = new Query(QuerySearchOption.And, new NameSynonymThesaurusReader(), 0.75); var scope = new IntellisenseScope<int>(); var persona = soggetto.Persona; var indirizzoSoggetto = persona.IndirizzoResidenza.GetIndirizzoCompleto(); var indirizzoCondominio = condominio.Indirizzo.GetIndirizzoCompleto(); if (!string.IsNullOrEmpty(indirizzoSoggetto) && !string.IsNullOrEmpty(indirizzoCondominio)) { person.Add(persona.ID, string.Format("{0}", indirizzoSoggetto)); fuzzy.Add(persona.ID, "Indirizzo", indirizzoSoggetto); query.Clear(); query.CreateSearchTerm("Indirizzo", indirizzoCondominio, 0.20, true); var fuzzyResult = fuzzy.Search(query, scope, 1); return fuzzyResult.Count > 0 && fuzzyResult[0].Rank > 1; } return true; } } catch (Exception ex) { _log.Warn("Errore inaspettato durante il set di residente - " + Library.Utility.GetMethodDescription(), ex); return false; } } return false; }
public void RicercaPersone() { var info = new Gipasoft.Business.Sfera.Repository.UserInfo {Azienda = Login.Instance.CurrentLogin().Azienda}; var soggetti = SferaServiceProxy.Instance.CurrentService().GetSoggettiCondominioByCondominio(119, info); var person = new SearchableDictionary<int>(); var fuzzy = new FuzzySearch<int>(); var query = new Query(QuerySearchOption.And, new NameSynonymThesaurusReader(), 0.75); var scope = new IntellisenseScope<int>(); var dict = new Dictionary<int, PersonaDTO>(); foreach (var soggetto in soggetti.Distinct()) { var persona = SferaServiceProxy.Instance.CurrentService().GetPersonaByID(soggetto.IdPersona, info); if (!dict.ContainsKey(persona.ID)) { person.Add(persona.ID, String.Format("{0} {1} {2}", persona.IndirizzoResidenza.Indirizzo, persona.IndirizzoResidenza.DescrizioneComune, persona.IndirizzoResidenza.Civico)); fuzzy.Add(persona.ID, "Via", persona.IndirizzoResidenza.Indirizzo); fuzzy.Add(persona.ID, "Comune", persona.IndirizzoResidenza.DescrizioneComune); fuzzy.Add(persona.ID, "Civico", persona.IndirizzoResidenza.Civico); dict.Add(persona.ID, persona); } } query.Clear(); var condominio = SferaServiceProxy.Instance.CurrentService().GetCondominioById(119, true, false, info); query.CreateSearchTerm("Via", condominio.Indirizzo.Indirizzo, 0.20, true); query.CreateSearchTerm("Comune", condominio.Indirizzo.DescrizioneComune); query.CreateSearchTerm("Civico", condominio.Indirizzo.Civico); var fuzzyResult = fuzzy.Search(query, scope, dict.Count); foreach (var searchResult in fuzzyResult) { var split = person[searchResult.Key].Split(new[] { ' ' }); var via = split[0]; // table.Rows.Add(new object[] { searchResult.Rank, searchResult.Key, split[0], split[1], split[2] }); } }