Exemplo n.º 1
0
        /// <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;
        }
Exemplo n.º 2
0
        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] });
            }
        }