private bool insert(ConduttoreDTO dto, out Conduttore item) { var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda); var soggettoService = _windsorRepository.GetContainer(_info.Azienda).Resolve<ISoggettoService>(); try { item = new Conduttore(daoFactory.GetUnitaImmobiliareDao().GetById(dto.IdUnitaImmobiliare, false), daoFactory.GetPersonaDao().GetById(dto.IdPersona, false)) { Consigliere = dto.Consigliere, DataFine = dto.DataFine, DataInizio = dto.DataInizio, PercentualeRiferimento = dto.PercentualeRiferimento, IsResidente = dto.IsResidente, DirittoPersonaleGodimento = dto.DirittoPersonaleGodimento, Principale = dto.Principale, Descrizione = dto.Descrizione, 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.GetConduttoreDao().SaveOrUpdate(item); // Descrizione Unità Immobiliare item.UnitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(item.UnitaImmobiliare); } catch (Exception ex) { _log.ErrorFormat("Errore nell'inserimento del conduttore - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), dto.ID); throw; } return true; }
/// <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 bool update(SoggettoCondominioDTO dto, out Conduttore item) { var result = false; item = null; var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda); var soggettoService = _windsorRepository.GetContainer(_info.Azienda).Resolve<ISoggettoService>(); try { item = daoFactory.GetConduttoreDao().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; if (item.FrazionePossesso != null) { dto.NumeratorePossesso = item.FrazionePossesso.Numerator; dto.DenominatorePossesso = item.FrazionePossesso.Denominator; dto.Possesso = item.FrazionePossesso.ToString(); } item.Persona = daoFactory.GetPersonaDao().GetById(dto.IdPersona, false); item.UnitaImmobiliare = daoFactory.GetUnitaImmobiliareDao().GetById(dto.IdUnitaImmobiliare, false); if (dto.IdSoggettoPrincipale > 0) item.SoggettoPrincipale = daoFactory.GetSoggettoCondominioDao().GetById(dto.IdSoggettoPrincipale.GetValueOrDefault(), false); soggettoService.IsResidente(item); daoFactory.GetConduttoreDao().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 conduttore - il dato sul db è più recente di quello che si vuole salvare - {0} - id:{1}", Library.Utility.GetMethodDescription(), dto.ID); } } catch (Exception ex) { _log.ErrorFormat("Errore nel salvataggio del conduttore - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), dto.ID); throw; } return result; }
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; } }
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; } }
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; } }
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; }