Esempio n. 1
0
        public static UnitaImmobiliare GetCondominioMonoScalaMonoProprietario()
        {
            var azienda = new Azienda("TEST", "Azienda di Test") { ID = 1 };
            var condominio = new Condominio("Test", 31, 12, 2014, azienda);
            var stabile = new Palazzina(condominio, "Stabile A - TEST");
            var scala = new GruppoStabile(stabile, "Scala A - TEST");
            var tipo = new TipoUnitaImmobiliare("Abitazione");
            var unitaImmobiliare = new UnitaImmobiliare(scala, tipo);

            // Esercizio
            var annoGestionale = new AnnoGestionale(condominio, 2013, 2014);
            var esercizio = new Esercizio(condominio, new DateTime(2014, 1, 1), new DateTime(2014, 12, 31), annoGestionale, GestioneEsercizioEnum.Ordinario);
            condominio.Esercizi.Add(esercizio);

            // Proprietario
            var persona = new Persona(TipoPersonaEnum.Fisica, "Pinco", "Pallo", azienda.ID, true);
            var proprietario = new Proprietario(unitaImmobiliare, persona)
            {
                PercentualeRiferimento = 100,
                Principale = true
            };
            unitaImmobiliare.Soggetti.Add(proprietario);

            return unitaImmobiliare;
        }
Esempio n. 2
0
        public void GetProprietarioPrincipale_LoPresentaSeInternoAlEsercizio()
        {
            var persona = new Persona(TipoPersonaEnum.Fisica, "Secondo", "Proprietario", _azienda.ID, true);
            var proprietario = new Proprietario(_unitaImmobiliare, persona)
            {
                PercentualeRiferimento = 100,
                Principale = true,
                DataInizio = new DateTime(2015, 2, 1)
            };

            var primoProprietario = _unitaImmobiliare.Soggetti.FirstOrDefault();
            if (primoProprietario != null)
                primoProprietario.DataFine = proprietario.DataInizio.GetValueOrDefault().AddDays(-1);

            _unitaImmobiliare.Soggetti.Add(proprietario);

            var firstOrDefault = _unitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Esercizi.OrderBy(item => item.DataChiusura).FirstOrDefault();
            if (firstOrDefault != null)
            {
                var proprietarioPrincipale = _unitaImmobiliare.GetProprietarioPrincipale(firstOrDefault.DataChiusura.GetValueOrDefault().AddYears(1));
                Assert.IsTrue(proprietarioPrincipale.Persona.Cognome == "Proprietario" && proprietarioPrincipale.Persona.Nome == "Secondo");
                return;
            }

            throw new AssertionException("TEST Fallito");
        }
Esempio n. 3
0
        /// <summary>
        /// Conferma del subentro.
        /// Se la persona entrante è null si tratta di un subentro di conduzione in cui l'appartamento rimane sfitto
        /// </summary>
        /// <param name="idCondominio">Condominio in cui è avvenuto il subentro</param>
        /// <param name="idUscente">Soggetto Uscente</param>
        /// <param name="entrante">Soggetto Entrante</param>
        /// <param name="idUnitaImmobiliarePrincipale">Unità immobiliare principale</param>
        /// <param name="idUnitaImmobiliari">Unità immobiliari per le quali è avvenuto il subentro</param>
        /// <param name="data">Data del subentro</param>
        /// <param name="spese">Spese di competenza tra uscente e entrante</param>
        /// <param name="rate">Rate eventualmente modficare</param>
        /// <param name="testoLettera"></param>
        /// <param name="speseUscente"></param>
        /// <param name="speseEntrante"></param>
        /// <param name="tipoSubentro">Tipo di subentro</param>
        /// <param name="tipoRendiconto">Rendiconto sul quale di basano i calcoli del subentro</param>
        /// <param name="oggettoLettera">Oggetto della lettera di subentro</param>
        /// <param name="spostamentoSaldi">Identifica se deve essere eseguito il trasferimento automatico dei saldi e delle rate</param>
        /// <param name="logTransazione">Log della transazione per permettere il salvataggio tramite cascade</param>
        /// <returns>Esito del subentro</returns>
        public EsitoSubentroDomain Conferma(int idCondominio, int idUscente, PersonaDTO entrante, int idUnitaImmobiliarePrincipale, IList<int> idUnitaImmobiliari, DateTime data, IList<CalcoloSubentroDTO> spese, IList<RataSoggettoSubentroDTO> rate, string oggettoLettera, string testoLettera, decimal speseUscente, decimal speseEntrante, TipoSoggetto tipoSubentro, TipoRendiconto tipoRendiconto, bool spostamentoSaldi, LogTransazione logTransazione)
        {
            try
            {
                var fatalMessage = string.Empty;
                var warnMessage = string.Empty;

                var condominio = _daoFactory.GetCondominioDao().GetById(idCondominio, false);
                var esercizio = _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(condominio, data);

                if(esercizio == null)
                    return new EsitoSubentroDomain(new EsitoSubentro(null, null, "La data del subentro non è corretta, verificare che sia aperto l'esercizio di competenza", null,null), null);

                // ==========================================================================
                //  Persone
                // ==========================================================================
                Persona personaEntrante = null;
                if (entrante != null)
                {
                    // se l'ID è correttamente valorizzato è stata scelta una persona già presente in anagrafica
                    personaEntrante = entrante.ID > 0 ? _daoFactory.GetPersonaDao().GetById(entrante.ID, false) : _personaService.SetNew(entrante);
                }
              
                // ==========================================================================
                //  Subentro
                // ==========================================================================
                var subentro = new GestioneCondomini.Domain.Subentro(
                    condominio,
                    data,
                    tipoSubentro,
                    oggettoLettera,
                    testoLettera,
                    speseUscente,
                    speseEntrante,
                    spostamentoSaldi,
                    logTransazione
                    )
                    {
                        SaldoUscente = _saldiCondominiService.GetSaldoByPersonaUnitaImmobiliari(esercizio.ID, new List<int> { idUscente }, idUnitaImmobiliari, true)
                    };

                // ==========================================================================
                //  Registro i nuovi condomini
                // ==========================================================================
                SoggettoCondominio soggettoEntrantePrincipale = null;
                SoggettoCondominio soggettoUscentePrincipale = null;
                SoggettoCondominio proprietarioPrincipale = null;
                foreach (var idUnitaImmobiliare in idUnitaImmobiliari)
                {
                    // -----------------------------
                    // Soggetto Entrante
                    // -----------------------------
                    var unita = _daoFactory.GetUnitaImmobiliareDao().GetById(idUnitaImmobiliare, false);
                    var proprietario = unita.GetProprietarioPrincipale(esercizio.DataChiusura);
                    SoggettoCondominio soggettoEntrante = null;

                    ISet<SoggettoCondominio> soggetti = null;
                    switch (tipoSubentro)
                    {
                        case TipoSoggetto.Conduttore:
                            if (personaEntrante != null)
                                soggettoEntrante = new Conduttore(unita, personaEntrante);
                            soggetti = unita.Conduttori;
                            break;

                        case TipoSoggetto.Proprietario:
                            if (personaEntrante != null)
                                soggettoEntrante = new Proprietario(unita, personaEntrante);
                            soggetti = unita.Proprietari;
                            break;

                        case TipoSoggetto.Soggetto:
                            if (personaEntrante != null)
                                soggettoEntrante = new SoggettoCondominio(unita, personaEntrante);
                            soggetti = unita.Soggetti;
                            break;
                    }

                    if (soggettoEntrante != null)
                        soggettoEntrante.IsResidente = _soggettoService.IsResidente(soggettoEntrante);

                    // -----------------------------
                    // Soggetto Uscente
                    // -----------------------------
                    //  Nel caso di subentro di conduzione se il conduttore non è presente il soggetto
                    //  uscente è il proprietario.
                    // -----------------------------
                    SoggettoCondominio soggettoUscente = null;
                    var soggettiUscenti = soggetti.Where(item => item.Persona.ID == idUscente).ToList();
                    if (soggettiUscenti.Count > 0)
                    {
                        if (soggettiUscenti.Count > 1)
                        {
                            _log.WarnFormat("Trovati più di un soggetto con la stessa persona anagrafica - PROPRIETARIO - {0} - unità immobiliare:{1} - condominio:{2} - uscente:{3} - entrante:{4}", Utility.GetMethodDescription(), unita?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", idCondominio, idUscente, entrante != null ? entrante.DisplayName : "<NULL>");
                        }
                        soggettoUscente = soggettiUscenti.FirstOrDefault();
                    }

                    if (soggettoUscente != null)
                        soggettoUscente.DataFine = data;

                    else if (tipoSubentro == TipoSoggetto.Conduttore)
                    {
                        soggettiUscenti = unita.Proprietari.Where(item => item.Persona.ID == idUscente).ToList();
                        if (soggettiUscenti.Count > 0)
                        {
                            if (soggettiUscenti.Count > 1)
                            {
                                _log.WarnFormat("Trovati più di un soggetto con la stessa persona anagrafica - CONDUTTORE - {0} - unità immobiliare:{1} - condominio:{2} - uscente:{3} - entrante:{4}", Utility.GetMethodDescription(), unita?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", idCondominio, idUscente, entrante != null ? entrante.DisplayName : "<NULL>");
                            }
                            soggettoUscente = soggettiUscenti.FirstOrDefault();
                        }
                    }

                    // soggettoEntrante = null l'unità immobiliare è rimasta sfitta
                    if (soggettoEntrante != null)
                    {
                        soggettoEntrante.DataInizio = data;
                        if (soggettoUscente != null)
                        {
                            soggettoEntrante.PercentualeRiferimento = soggettoUscente.PercentualeRiferimento;
                            soggettoEntrante.Principale = soggettoUscente.Principale;
                        }
                        else
                        {
                            soggettoEntrante.PercentualeRiferimento = 1m;
                            soggettoEntrante.Principale = true;
                        }
                        _daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(soggettoEntrante);
                    }
                    else
                        soggettoEntrante = proprietario;

                    // -----------------------------
                    //  Unità Immobiliare
                    // -----------------------------
                    var subentroUnita = new SubentroUnitaImmobiliare(subentro, unita, soggettoEntrante, soggettoUscente);
                    if (unita.ID == idUnitaImmobiliarePrincipale)
                    {
                        subentroUnita.Principale = true;
                        soggettoUscentePrincipale = soggettoUscente;
                        soggettoEntrantePrincipale = soggettoEntrante;
                        proprietarioPrincipale = proprietario;
                    }

                    //-------------------------------------
                    // Se presenti accorpamenti li annullo
                    //-------------------------------------
                    if (soggettoUscente  != null && soggettoUscente.SoggettiCollegati.Count > 0)
                    {
                        warnMessage = string.Format("Il soggetto uscente aveva degli accorpamenti di rate configurati.{0}Gli accorpamenti sono stati eliminati.{0}", Environment.NewLine);
                        foreach (var soggettoCondominio in soggettoUscente.SoggettiCollegati)
                            soggettoCondominio.SoggettoPrincipale = null;

                        soggettoUscente.SoggettiCollegati.Clear();
                    }

                    unita.Descrizione = _daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(unita);
                }

                //--------------------------------
                // Dettagli
                //--------------------------------
                foreach(var calcoloSubentro in spese)
                {
                    // Uscente
                    // -------------
                    var dettaglioSubentroUscente = new DettaglioSubentro(subentro, _daoFactory.GetContoDao().GetById(calcoloSubentro.IdConto, false), soggettoUscentePrincipale, calcoloSubentro.ImportoSoggettoUscente, calcoloSubentro.GiorniUscente.Value, TipoDettaglioSubentro.Uscente);

                    // Entrante
                    // -------------
                    var dettaglioSubentroEntrante = new DettaglioSubentro(subentro, _daoFactory.GetContoDao().GetById(calcoloSubentro.IdConto, false), soggettoEntrantePrincipale, calcoloSubentro.ImportoSoggettoEntrante, calcoloSubentro.GiorniEntrante.Value, TipoDettaglioSubentro.Entrante);
                }

                // ==========================================================================
                //  Rate
                // ==========================================================================
                string descrizione;
                if(soggettoUscentePrincipale != null)
                    descrizione = "Subentro: " + soggettoUscentePrincipale.DisplayName + " - " + soggettoEntrantePrincipale.DisplayName;
                else
                    descrizione = "Subentro: " + proprietarioPrincipale.DisplayName + " - " + soggettoEntrantePrincipale.DisplayName;

                var listaRateDaEmettere = new Dictionary<DateTime, Dictionary<int, RataSoggettoDTO>>();
                foreach (var rataSubentro in rate)
                { 
                    var rata = _daoFactory.GetRataSoggettoDao().GetById(rataSubentro.ID, false);

                    // ----------------------------------------------------------
                    // Cancellazione o richiamo rata originale
                    // ----------------------------------------------------------
                    if (rataSubentro.Eliminare || rataSubentro.AssegnareAEntrante)
                        fatalMessage += _rateService.EliminazioneRataSoggetto(rata, descrizione);
                    
                    // ----------------------------------------------------------
                    // Modifica importo rata
                    // ----------------------------------------------------------
                    else if (rataSubentro.Importo != rata.Importo)
                    {
                        var rataAggiornamento = new RataSoggettoAggiornamentoDTO
                        {
                            DataScadenza = rata.DataScadenza,
                            Id = rata.ID,
                            IdEsercizio = rata.Esercizio.ID,
                            IdSoggettoCondominio = rata.Soggetto.ID,
                            Importo = rataSubentro.Importo
                        };
                        IList<RataSoggettoAggiornamentoDTO> rateAggiornamento = new List<RataSoggettoAggiornamentoDTO>(1);
                        rateAggiornamento.Add(rataAggiornamento);
                        _rateService.AggiornaImporti(rateAggiornamento, false, TipoAccorpamentoRateEnum.Nessuno, logTransazione);
                    }

                    // ----------------------------------------------------------
                    // Creazione nuova rata da emettere
                    // ----------------------------------------------------------
                    if (rataSubentro.AssegnareAEntrante)
                    {
                        Dictionary<int, RataSoggettoDTO> listaRate;
                        if (listaRateDaEmettere.ContainsKey(rata.DataScadenza))
                            listaRate = listaRateDaEmettere[rata.DataScadenza];
                        else
                        {
                            listaRate = new Dictionary<int, RataSoggettoDTO>();
                            listaRateDaEmettere.Add(rata.DataScadenza, listaRate);
                        }

                        if (rataSubentro.AssegnareAEntrante)
                            addRataDaEmettere(soggettoEntrantePrincipale, esercizio, rata, listaRate, rataSubentro.Importo);
                    }
                }
                fatalMessage += _rateService.CreazioneRateFuoriPreventivo(esercizio, listaRateDaEmettere, true, descrizione, logTransazione);

                // ==========================================================================
                //  Spostamento saldi
                //   - Solo se il tipo di subentro corrisponde con con il tipo di soggetto uscente
                // ==========================================================================
                if (spostamentoSaldi && soggettoUscentePrincipale.Tipo == tipoSubentro)
                {
                    var messageSpostamento = SpostamentoSaldi(subentro);
                    if (!string.IsNullOrEmpty(messageSpostamento.FatalMessage))
                        fatalMessage += messageSpostamento.FatalMessage;
                    if (!string.IsNullOrEmpty(messageSpostamento.WarnMessage))
                        warnMessage += messageSpostamento.WarnMessage;
                }

                int? idPersonaEntrante = null;
                if (personaEntrante != null)
                    idPersonaEntrante = personaEntrante.ID;

                // ==========================================================================
                //  Leggo le eventuali ripartizioni personalizzate
                // ==========================================================================
                var soggettiRipartizione = _daoFactory.GetSoggettoCondominioRipartizioneDao().GetBySoggetto(soggettoUscentePrincipale.ID);
                var soggettiRipartizioneDto = new List<SoggettoCondominioRipartizioneDTO>(soggettiRipartizione.Count);
                soggettiRipartizioneDto.AddRange(soggettiRipartizione.Select(item => new SoggettoCondominioRipartizioneDTO
                {
                    ID = item.ID, 
                    DescrizioneConto = item.Conto.Descrizione, 
                    IdConto = item.Conto.ID, 
                    DescrizioneSoggetto = 
                    item.Soggetto.DisplayName, 
                    IdSoggetto = item.Soggetto.ID, 
                    IdUnitaImmobiliare = item.Soggetto.UnitaImmobiliare.ID,
                    PercentualeRipartizione = item.PercentualeRipartizione,
                    DirittoReale = (item.Soggetto.DirittoReale != null) ? item.Soggetto.DirittoReale.GetValueOrDefault().ToString() : string.Empty, 
                    Tipo = item.Soggetto.Tipo
                }));

                var esitoSubentro = new EsitoSubentro(idPersonaEntrante, subentro.ID, fatalMessage, warnMessage, soggettiRipartizioneDto);
                return new EsitoSubentroDomain(esitoSubentro, subentro);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore durante la conferma del subentro - {0} - idCondominio:{1} - idUscente:{2} - entrante:{3}", ex, Utility.GetMethodDescription(), idCondominio, idUscente, entrante != null ? entrante.DisplayName : "<NULL>");
                throw;
            }
        }
        private IList<SoggettoCondominio> setSoggettiUnita(UnitaImmobiliare unita, ICollection<DataRow> condomini)
        { 
            try
            {
                var soggetti = new List<SoggettoCondominio>(condomini.Count);
                foreach (var row in condomini)
                {
                    // Persona
                    // ---------
                    var nomePersona = row["C_NOME"].ToString();
                    Persona persona = null;
                    if(!string.IsNullOrEmpty(nomePersona) && _personeCondominio.ContainsKey(nomePersona))
                        persona = _personeCondominio[nomePersona];
                    if (persona == null)
                    {
                        var tipoPersona = row["C_TIT_ONOR"].ToString() == "1" ? TipoPersonaEnum.Giuridica : TipoPersonaEnum.Fisica;

                        persona = new Persona(tipoPersona, string.Empty, nomePersona, unita.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Azienda.ID, false)
                        {
                            IndirizzoResidenza = new Address
                                                    {
                                                        Indirizzo = row["C_VIA"].ToString(),
                                                        Cap = row["C_CAP"].ToString()
                                                    },
                            CodiceImportazione = row["C_COD_STA"] + "&" + row["C_COD_UNITA"] + "&" + row["C_COD_COND"]
                        };

                        if (row["C_LOCALITA"] != DBNull.Value && !string.IsNullOrEmpty(row["C_LOCALITA"].ToString()))
                        {
                            var comuni = _daoFactory.GetComuneDao().GetByDescrizione(row["C_LOCALITA"].ToString().Trim());
                            if (comuni.Count == 1)
                                persona.IndirizzoResidenza.Comune = comuni[0];
                            else
                                persona.IndirizzoResidenza.Localita = row["C_LOCALITA"].ToString();
                        }

                        if (row["C_NOTE"] != DBNull.Value && !string.IsNullOrEmpty(row["C_NOTE"].ToString()))
                            persona.Note = row["C_NOTE"].ToString();

                        if (row["C_PRESSO"] != DBNull.Value && !string.IsNullOrEmpty(row["C_PRESSO"].ToString()))
                            persona.IndirizzoResidenza.Presso = row["C_PRESSO"].ToString();

                        if (row["C_TEL"] != DBNull.Value && !string.IsNullOrEmpty(row["C_TEL"].ToString()))
                            persona.Contatti.Add(new Telefono(row["C_TEL"].ToString(), true, persona));
                        if (row["C_TEL2"] != DBNull.Value && !string.IsNullOrEmpty(row["C_TEL"].ToString()))
                            persona.Contatti.Add(new Telefono(row["C_TEL2"].ToString(), false, persona));
                        if (row["C_EMAIL"] != DBNull.Value && !string.IsNullOrEmpty(row["C_EMAIL"].ToString()))
                            persona.Contatti.Add(new Email(row["C_EMAIL"].ToString(), true, persona));
                        if (row["C_EMAIL_CERT"] != DBNull.Value && !string.IsNullOrEmpty(row["C_EMAIL_CERT"].ToString()))
                            persona.Contatti.Add(new EmailCertificata(row["C_EMAIL_CERT"].ToString(), false, persona));
                        if (row["C_CELLULARE"] != DBNull.Value && !string.IsNullOrEmpty(row["C_CELLULARE"].ToString()))
                            persona.Contatti.Add(new Cellulare(row["C_CELLULARE"].ToString(), true, persona));

                        _daoFactory.GetPersonaDao().SaveOrUpdate(persona);
                        _personeCondominio.Add(nomePersona, persona);
                    }

                    // Soggetto Condominio
                    SoggettoCondominio soggetto;
                    if (isConduttore(row))
                    {
                        soggetto = new Conduttore(unita, persona) {PercentualeRiferimento = 100, Principale = true};
                        if (unita.Descrizione == "$proprietario1")
                            unita.Descrizione += " - $conduttore1";
                    }
                    else
                    {
                        soggetto = new Proprietario(unita, persona);
                        if (row["C_TIPO_COND"].ToString() == "CONS")
                            soggetto.Consigliere = true;

                        if (row["C_PERC_POSS"].ToString() == "100")
                        {
                            soggetto.PercentualeRiferimento = 100;
                            soggetto.Principale = true;
                        }
                    }
                    soggetti.Add(soggetto);
                    _daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(soggetto);
                }

                return soggetti;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili - " + Library.Utility.GetMethodDescription(), ex);

                throw;
            }
        }
Esempio n. 5
0
        private bool insert(SoggettoCondominioDTO dto, out Proprietario item)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var soggettoService = _windsorRepository.GetContainer(_info.Azienda).Resolve<ISoggettoService>();

            item = new Proprietario(daoFactory.GetUnitaImmobiliareDao().GetById(dto.IdUnitaImmobiliare, false), daoFactory.GetPersonaDao().GetById(dto.IdPersona, false));

            try
            {
                item.Consigliere = dto.Consigliere;
                item.DataFine = dto.DataFine;
                item.DataInizio = dto.DataInizio;
                item.PercentualeRiferimento = dto.PercentualeRiferimento;
                item.Principale = dto.Principale;
                item.IsResidente = dto.IsResidente;
                item.DirittoPersonaleGodimento = dto.DirittoPersonaleGodimento;
                item.Descrizione = dto.Descrizione;
                item.DescrizioneAggiuntiva = dto.DescrizioneAggiuntiva;

                if (!string.IsNullOrEmpty(dto.ModalitaConvocazione))
                    item.ModalitaConvocazione = (TipoModalitaConvocazione)Enum.Parse(typeof(TipoModalitaConvocazione), dto.ModalitaConvocazione);
                else
                    item.ModalitaConvocazione = null;

                if (!string.IsNullOrEmpty(dto.DirittoReale))
                    item.DirittoReale = (DirittoReale)Enum.Parse(typeof(DirittoReale), dto.DirittoReale);
                else
                    item.DirittoReale = null;

                if (dto.IdSoggettoPrincipale > 0)
                    item.SoggettoPrincipale = daoFactory.GetSoggettoCondominioDao().GetById(dto.IdSoggettoPrincipale.GetValueOrDefault(), false);

                item.FrazionePossesso = null;
                if (dto.NumeratorePossesso != null && dto.DenominatorePossesso != null)
                {
                    item.FrazionePossesso = new Fraction
                    {
                        Numerator = dto.NumeratorePossesso,
                        Denominator = dto.DenominatorePossesso
                    };
                }

                item.IsResidente = soggettoService.IsResidente(item); 
                daoFactory.GetProprietarioDao().SaveOrUpdate(item);

                // Descrizione Unità Immobiliare
                item.UnitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(item.UnitaImmobiliare);

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nell'inserimento del proprietario - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID);
                throw;
            }

            return true;
        }
Esempio n. 6
0
        private bool update(ProprietarioDTO dto, out Proprietario item)
        {
            var result = false;
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var soggettoService = _windsorRepository.GetContainer(_info.Azienda).Resolve<ISoggettoService>();

            try
            {
                item = daoFactory.GetProprietarioDao().GetById(dto.ID, false);

                // Condizione necessare per il controllo del fatto che sul DB ho una versione uguale o più vecchia
                if (dto.Version == item.Version)
                {
                    item.Consigliere = dto.Consigliere;
                    item.DataFine = dto.DataFine;
                    item.DataInizio = dto.DataInizio;
                    item.PercentualeRiferimento = dto.PercentualeRiferimento;
                    item.Principale = dto.Principale;
                    item.VersamentoMav = dto.VersamentoMav;
                    item.IsResidente = dto.IsResidente;
                    item.DirittoPersonaleGodimento = dto.DirittoPersonaleGodimento;
                    item.Descrizione = dto.Descrizione;
                    item.DescrizioneAggiuntiva = dto.DescrizioneAggiuntiva;

                    if (!string.IsNullOrEmpty(dto.ModalitaConvocazione))
                        item.ModalitaConvocazione = (TipoModalitaConvocazione)Enum.Parse(typeof(TipoModalitaConvocazione), dto.ModalitaConvocazione);
                    else
                        item.ModalitaConvocazione = null;

                    if (!string.IsNullOrEmpty(dto.DirittoReale))
                        item.DirittoReale = (DirittoReale)Enum.Parse(typeof(DirittoReale), dto.DirittoReale);
                    else
                        item.DirittoReale = null;

                    item.UnitaImmobiliare = daoFactory.GetUnitaImmobiliareDao().GetById(dto.IdUnitaImmobiliare, false);

                    if (dto.IdSoggettoPrincipale > 0)
                        item.SoggettoPrincipale = daoFactory.GetSoggettoCondominioDao().GetById(dto.IdSoggettoPrincipale.GetValueOrDefault(), false);

                    item.FrazionePossesso = null;
                    if (dto.NumeratorePossesso != null && dto.DenominatorePossesso != null)
                    {
                        item.FrazionePossesso = new Fraction
                        {
                            Numerator = dto.NumeratorePossesso,
                            Denominator = dto.DenominatorePossesso
                        };
                    }

                    soggettoService.IsResidente(item);

                    daoFactory.GetProprietarioDao().Update(item);

                    // Descrizione Unità Immobiliare
                    item.UnitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(item.UnitaImmobiliare);

                    result = true;
                }
                else
                {
                    // Eccezione: Sul db c'è qualche cosa di più nuovo.
                    _log.ErrorFormat("Errore nel salvataggio del proprietario - il dato sul db è più recente di quello che si vuole salvare - {0} - id:{1}", Utility.GetMethodDescription(), dto.ID);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio del proprietario - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID);
                throw;
            }

            return result;
        }
Esempio n. 7
0
        private IList<SoggettoCondominio> setSoggettiUnita(UnitaImmobiliare unita, DataRow rowUnita, DataRow[] condomini, Dictionary<int, SoggettoCondominio> loadedSoggetti)
        { 
            try
            {
                var soggetti = new List<SoggettoCondominio>(condomini.Length);

                foreach (var row in condomini)
                {
                    // Persona
                    // ---------
                    string cognomePersona = row["NOME"].ToString().Trim();
                    if (!string.IsNullOrEmpty(cognomePersona))
                    {
                        Persona persona = null;
                        if (!string.IsNullOrEmpty(cognomePersona) && _personeCondominio.ContainsKey(cognomePersona))
                            persona = _personeCondominio[cognomePersona];
                        if (persona == null)
                        {
                            persona = new Persona(Sfera.Enums.TipoPersonaEnum.Fisica, string.Empty, cognomePersona, unita.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Azienda.ID, false)
                                          {
                                              IndirizzoResidenza = new Address {Indirizzo = row["VIA"].ToString(), Cap = row["CAP"].ToString()}
                                          };

                            if (row["CODFISC"] != DBNull.Value && !string.IsNullOrEmpty(row["CODFISC"].ToString()))
                                persona.CodiceFiscale = row["CODFISC"].ToString();
                            if (row["PIVA"] != DBNull.Value && !string.IsNullOrEmpty(row["PIVA"].ToString()))
                                persona.PartitaIva = row["PIVA"].ToString();
                            if (row["TITOLO"] != DBNull.Value && !string.IsNullOrEmpty(row["TITOLO"].ToString()))
                                persona.Titolo = row["TITOLO"].ToString();

                            persona.CodiceImportazione = row["CODITTA"] + "&" + row["CODSTAB"] + "&" + row["ESERCIZIO"] + "&" + row["CODPOS"];

                            if (row["LOC"] != DBNull.Value && !string.IsNullOrEmpty(row["LOC"].ToString()))
                            {
                                IList<Comune> comuni = _daoFactory.GetComuneDao().GetByDescrizione(row["LOC"].ToString().Trim());
                                if (comuni.Count == 1)
                                    persona.IndirizzoResidenza.Comune = comuni[0];
                                else
                                {
                                    DataRow row1 = row;
                                    var comuniDescr = comuni.Where(item => item.Descrizione.Trim().ToUpper() == row1["LOC"].ToString().Trim().ToUpper()).ToList();
                                    int count = comuniDescr.Count();
                                    if (count == 1)
                                        persona.IndirizzoResidenza.Comune = comuniDescr.SingleOrDefault();
                                }

                                if (persona.IndirizzoResidenza.Comune == null)
                                    persona.IndirizzoResidenza.Localita = row["LOC"].ToString();
                            }

                            if (row["TEL1"] != DBNull.Value && !string.IsNullOrEmpty(row["TEL1"].ToString().Trim()))
                                persona.Contatti.Add(new Telefono(row["TEL1"].ToString(), true, persona));
                            if (row["TEL2"] != DBNull.Value && !string.IsNullOrEmpty(row["TEL2"].ToString().Trim()))
                                persona.Contatti.Add(new Telefono(row["TEL2"].ToString(), false, persona));
                            if (row["E-MAIL"] != DBNull.Value && !string.IsNullOrEmpty(row["E-MAIL"].ToString().Trim()))
                                persona.Contatti.Add(new Email(row["E-MAIL"].ToString(), true, persona));

                            _daoFactory.GetPersonaDao().SaveOrUpdate(persona);
                            _personeCondominio.Add(cognomePersona, persona);
                        }

                        // Soggetto Condominio
                        SoggettoCondominio soggetto;
                        if (isConduttore(row))
                        {
                            soggetto = new Conduttore(unita, persona) {PercentualeRiferimento = 100, Principale = true};
                            if (unita.Descrizione == "$proprietario1")
                                unita.Descrizione += " - $conduttore1";

                        }
                        else
                            soggetto = new Proprietario(unita, persona);

                        soggetti.Add(soggetto);

                        int progressivoSoggetto = Convert.ToInt32(rowUnita["CODPOS"]);
                        if (progressivoSoggetto == Convert.ToInt32(rowUnita["RAGRUP1"]))
                        {
                            if (!loadedSoggetti.ContainsKey(progressivoSoggetto))
                                loadedSoggetti.Add(progressivoSoggetto, soggetto);
                        }
                        else if (loadedSoggetti.ContainsKey(progressivoSoggetto))
                            soggetto.SoggettoPrincipale = loadedSoggetti[progressivoSoggetto];

                        _daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(soggetto);
                    }
                }
                
                if (unita.Proprietari.Count == 0)
                {
                    var codRagrup = Convert.ToInt32(rowUnita["RAGRUP1"]);
                    if (codRagrup < 8100 && loadedSoggetti.ContainsKey(codRagrup))
                    {
                        var personaProp = loadedSoggetti[codRagrup].Persona;
                        var prop = new Proprietario(unita, personaProp) {PercentualeRiferimento = 1, Principale = true};
                        _daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(prop);
                    }
                }

                return soggetti;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato nell'importazione di un condominio da CONDOR: " + Library.Utility.GetMethodDescription(), ex);

                throw;
            }
        }
Esempio n. 8
0
        private string loadUnitaImmobiliari(int idEsercizio, GruppoStabile scala, int idEdificio, DateTime dataIniziale, IList<NameValueDTO<int, string>> listaPersone, OleDbConnection conn)
        {
            //var ordineUnita = 0;
            try
            {
                string message = string.Empty;

                var ds = new DataSet();
                var unitaAdapter = new OleDbDataAdapter("SELECT DISTINCT TabLocali.*, TabTipoLocali.Codice, TabPersone_Locali_Esercizi.id, TabPersone_Locali_Esercizi.Proprietario, TabPersone.*, TabPersone_Locali_Esercizi.DataI, TabPersone_Locali_Esercizi.DataF, TabPersone_Locali_Esercizi.Attuale " +
                    "FROM TabTipoLocali INNER JOIN (TabPersone INNER JOIN (TabLocali INNER JOIN (TabEsercizi INNER JOIN TabPersone_Locali_Esercizi ON TabEsercizi.id = TabPersone_Locali_Esercizi.idEsercizio) ON TabLocali.id = TabPersone_Locali_Esercizi.idLocale) ON TabPersone.Id = TabPersone_Locali_Esercizi.idPers) ON TabTipoLocali.id = TabLocali.idTipoLocale " +
                    "WHERE TabPersone_Locali_Esercizi.idEsercizio = " + idEsercizio + " AND TabEsercizi.Attivo=True AND TabLocali.idEdificio = " + idEdificio + " " +
                    "ORDER BY TabLocali.id", conn);
                unitaAdapter.Fill(ds, "Unita");

                // Unità Immobiliari
                var lastIdUnitaImmobiliare = 0;
                UnitaImmobiliare lastUnitaImmobiliare = null;
                foreach (DataRow row in ds.Tables["Unita"].Rows)
                {
                    try
                    {
                        if (row["DataF"] == DBNull.Value || (DateTime)row["DataF"] >= dataIniziale)
                        {
                            // A rottura di unita nuova unità immobiliare
                            if ((int)row["TabLocali.id"] != lastIdUnitaImmobiliare)
                            {
                                try
                                {
                                    var newUnita = new UnitaImmobiliare(scala, getTipoLocale(row["TabTipoLocali.Codice"].ToString()))
                                    {
                                        Descrizione = row["TabLocali.Nome"].ToString(),
                                        Interno = getInterno(row["Interno"].ToString().Trim())
                                    };
                                    //ordineUnita++;
                                    //newUnita.Ordine = ordineUnita;

                                    if (row["InternoPri"] != DBNull.Value && !Library.Utility.IsInteger(row["Interno"].ToString().Trim()))
                                        newUnita.EstensioneInterno = row["InternoPri"].ToString().Trim();
                                    newUnita.Ordine = newUnita.Interno;
                                    newUnita.CodiceImportazione = row["TabLocali.id"].ToString().Trim();
                                    _daoFactory.GetUnitaImmobiliareDao().SaveOrUpdate(newUnita);

                                    lastUnitaImmobiliare = newUnita;
                                    lastIdUnitaImmobiliare = (int)row["TabLocali.id"];
                                }
                                catch (Exception ex)
                                {
                                    
                                    _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Nuova Unità Immobiliare) - locale:" + row["TabLocali.id"] + " - persona:" + row["TabPersone.id"], ex);
                                    throw;
                                }
                            }

                            // Nuovo soggetto solo se non è già presente
                            //string hql = "FROM SoggettoCondominio SOG WHERE SOG.CodiceImportazione = :codice";
                            //IList<SoggettoCondominio> soggetti = _daoFactory.GetSoggettoCondominioDao().GetByQuery(hql, new QueryParam[] { new QueryParam("codice", row["TabPersone_Locali_Esercizi.id"].ToString().Trim()) });
                            //if (soggetti.Count == 0)
                            //{
                                try
                                {
                                    Persona persona = getPersona((int)row["TabPersone.id"], scala.PalazzinaRiferimento.CondominioRiferimento.Azienda, row, listaPersone, conn);
                                    if (row["Proprietario"] == DBNull.Value || (short)row["Proprietario"] != 0)
                                    {
                                        var proprietario = new Proprietario(lastUnitaImmobiliare, persona)
                                        {
                                            Principale = (bool) row["Attuale"],
                                            PercentualeRiferimento = (bool) row["Attuale"] ? 100 : 0,
                                            CodiceImportazione = row["TabPersone_Locali_Esercizi.id"].ToString().Trim()
                                        };
                                        _daoFactory.GetProprietarioDao().SaveOrUpdate(proprietario);
                                    }
                                    else
                                    {
                                        var conduttore = new Conduttore(lastUnitaImmobiliare, persona)
                                        {
                                            Principale = true,
                                            PercentualeRiferimento = 100,
                                            CodiceImportazione = row["TabPersone_Locali_Esercizi.id"].ToString().Trim()
                                        };
                                        _daoFactory.GetConduttoreDao().SaveOrUpdate(conduttore);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    
                                    _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Nuova Soggetto Condominio) - locale:" + row["TabLocali.id"] + " - persona:" + row["TabPersone.id"], ex);
                                    throw;
                                }
                            //}
                        }
                    }
                    catch (Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Unità Immobiliare) - locale:" + row["TabLocali.id"] + " - persona:" + row["TabPersone.id"], ex);
                        throw;
                    }
                }
                return message;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Unità Immobiliari)", ex);
                throw;
            }
        }
Esempio n. 9
0
        private bool insert(SoggettoCondominioDTO dto, out SoggettoCondominio item)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var soggettoService = _windsorRepository.GetContainer(_info.Azienda).Resolve<ISoggettoService>();

            try
            {
                if (dto.IdPersona > 0)
                {
                    var unita = daoFactory.GetUnitaImmobiliareDao().GetById(dto.IdUnitaImmobiliare, false);

                    item = null;
                    switch (dto.Tipo)
                    {
                        case TipoSoggetto.Proprietario:
                            item = new Proprietario(unita, daoFactory.GetPersonaDao().GetById(dto.IdPersona, false));
                            break;
                        case TipoSoggetto.Conduttore:
                            item = new Conduttore(unita, daoFactory.GetPersonaDao().GetById(dto.IdPersona, false));
                            break;
                    }

                    if (item != null)
                    {
                        item.IsResidente = dto.IsResidente;
                        item.Consigliere = dto.Consigliere;
                        item.DataFine = dto.DataFine;
                        item.DataInizio = dto.DataInizio;
                        item.PercentualeRiferimento = dto.PercentualeRiferimento;
                        item.Principale = dto.Principale;
                        item.DirittoPersonaleGodimento = dto.DirittoPersonaleGodimento;
                        item.Descrizione = dto.Descrizione;
                        item.DescrizioneAggiuntiva = dto.DescrizioneAggiuntiva;

                        if (!string.IsNullOrEmpty(dto.ModalitaConvocazione))
                            item.ModalitaConvocazione = (TipoModalitaConvocazione)Enum.Parse(typeof(TipoModalitaConvocazione), dto.ModalitaConvocazione);
                        else
                            item.ModalitaConvocazione = null;

                        if (!string.IsNullOrEmpty(dto.DirittoReale))
                        {
                            DirittoReale dirittoReale;
                            if (Enum.TryParse(dto.DirittoReale, true, out dirittoReale))
                                item.DirittoReale = dirittoReale;
                            
                        }
                        else
                            item.DirittoReale = null;

                        if (dto.IdSoggettoPrincipale > 0)
                            item.SoggettoPrincipale = daoFactory.GetSoggettoCondominioDao().GetById(dto.IdSoggettoPrincipale.GetValueOrDefault(), false);

                        item.FrazionePossesso = null;
                        if (dto.NumeratorePossesso != null && dto.DenominatorePossesso != null)
                        {
                            item.FrazionePossesso = new Fraction
                            {
                                Numerator = dto.NumeratorePossesso,
                                Denominator = dto.DenominatorePossesso
                            };
                        }

                        item.IsResidente = soggettoService.IsResidente(item);
                        daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(item);

                        // Descrizione Unità Immobiliare
                        if(item.UnitaImmobiliare != null)
                            item.UnitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(item.UnitaImmobiliare);
                    }
                }
                else
                {
                    item = null;
                    _log.WarnFormat("Tentativo di salvare un soggetto senza aver indicato la persona - {0} - id:{1} - azienda:{2}", Library.Utility.GetMethodDescription(), dto.ID, _info.Azienda);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio del soggetto condominio - {0} - id:{1} - azienda:{2}", ex, Library.Utility.GetMethodDescription(), dto.ID, _info.Azienda);
                throw;
            }

            return true;
        }