private bool insert(PersonaDTO dto, out Persona item) { item = null; var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda); try { if (dto.DataNascita != null) { if (!Conversione.IsSqlSmallDateTime(dto.DataNascita.GetValueOrDefault())) { dto.DataNascita = null; _log.WarnFormat("ATTENZIONE: Tentativo di memorizzare una data di nascita non corretta - {0} - persona:{1} - data:{2}", Utility.GetMethodDescription(), dto.ID, dto.DataNascita.GetValueOrDefault()); } } item = new Persona(dto.TipoPersona, dto.Nome, dto.Cognome, dto.Azienda, true) { AziendaID = dto.Azienda, CodiceFiscale = dto.CodiceFiscale, Cognome = dto.Cognome, DataNascita = dto.DataNascita, Nome = dto.Nome, Note = dto.Note, PartitaIva = dto.PartitaIva, RagioneSociale = dto.RagioneSociale, Sesso = dto.Sesso, Titolo = dto.Titolo, Iban = dto.Iban }; if(!string.IsNullOrEmpty(dto.Username)) item.DatiAutenticazione = new DatiAutenticazionePersona {Username = dto.Username, Password = dto.Password}; // Se iban è valorizzato i dati singoli devono sempre essere estrapolati dall'IBAN if (!string.IsNullOrEmpty(item.Iban)) { var coord = new CoordinateBancarie(); if (coord.SetIBAN(item.Iban)) { item.Abi = coord.Abi; item.Cab = coord.Cab; item.ContoCorrente = coord.ContoCorrente; item.Cin = coord.Cin; } } else { item.Abi = dto.Abi; item.Cab = dto.Cab; item.ContoCorrente = dto.ContoCorrente; item.Cin = dto.Cin; } if (dto.IndirizzoResidenza != null) { if (item.IndirizzoResidenza == null) item.IndirizzoResidenza = new Address(); item.IndirizzoResidenza.Cap = dto.IndirizzoResidenza.Cap; item.IndirizzoResidenza.Civico = dto.IndirizzoResidenza.Civico; item.IndirizzoResidenza.Indirizzo = dto.IndirizzoResidenza.Indirizzo; item.IndirizzoResidenza.Localita = dto.IndirizzoResidenza.Localita; item.IndirizzoResidenza.Presso = dto.IndirizzoResidenza.Presso; if (dto.IndirizzoResidenza.CodiceComune != null) item.IndirizzoResidenza.Comune = daoFactory.GetComuneDao().Find(dto.IndirizzoResidenza.CodiceComune, false); } if (dto.Domicilio != null) { if (item.Domicilio == null) item.Domicilio = new Address(); item.Domicilio.Cap = dto.Domicilio.Cap; item.Domicilio.Civico = dto.Domicilio.Civico; item.Domicilio.Indirizzo = dto.Domicilio.Indirizzo; item.Domicilio.Localita = dto.Domicilio.Localita; item.Domicilio.Presso = dto.Domicilio.Presso; if (dto.Domicilio.CodiceComune != null) item.Domicilio.Comune = daoFactory.GetComuneDao().Find(dto.Domicilio.CodiceComune, false); } if (dto.Recapito != null) { if (item.Recapito == null) item.Recapito = new Address(); item.Recapito.Cap = dto.Recapito.Cap; item.Recapito.Civico = dto.Recapito.Civico; item.Recapito.Indirizzo = dto.Recapito.Indirizzo; item.Recapito.Localita = dto.Recapito.Localita; item.Recapito.Presso = dto.Recapito.Presso; if (dto.Recapito.CodiceComune != null) item.Recapito.Comune = daoFactory.GetComuneDao().GetById(dto.Recapito.CodiceComune, false); } if (dto.ComuneNascita != null) { _idComune = dto.ComuneNascita.ID; item.ComuneNascita = daoFactory.GetComuneDao().GetById(_idComune, false); } else item.ComuneNascita = null; //Lista Contatti item.Contatti.Clear(); foreach (var t in dto.Contatti) { _id = t.ID; if (t.Stato != string.Empty) _id = getContattoRepository(item).ManageDomainEntity(t, false); item.Contatti.Add(daoFactory.GetContattoDao().GetById(_id.GetValueOrDefault(), false)); } // Lista Gruppi item.Gruppi.Clear(); foreach (var idGruppo in dto.Gruppi) { var gruppo = daoFactory.GetGruppoDao().Find(idGruppo, false); if (gruppo != null) { var personaGruppo = new PersonaGruppo(item, gruppo); daoFactory.GetPersonaGruppoDao().SaveOrUpdate(personaGruppo); } } daoFactory.GetPersonaDao().SaveOrUpdate(item); // Dati autenticazione (solo ora perchè necessita dell'ID) if(item.DatiAutenticazione == null || string.IsNullOrEmpty(item.DatiAutenticazione.Username)) { if(item.DatiAutenticazione == null) item.DatiAutenticazione = new DatiAutenticazionePersona(); var service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IPersonaService>(); service.SetDatiAutenticazione(item); } // Unità Immobiliari var unitaImmobiliari = daoFactory.GetUnitaImmobiliareDao().GetByPersona(item.ID); foreach (var unitaImmobiliare in unitaImmobiliari) { unitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(unitaImmobiliare); } } catch (Exception ex) { _log.Error("Errore nell'inserimento delle persone: " + Utility.GetMethodDescription() + " - id:" + dto.ID, ex); throw; } return true; }
private bool update(PersonaDTO dto, out Persona item) { bool result = false; item = null; var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda); try { item = daoFactory.GetPersonaDao().GetById(dto.ID, false); // Condizione necessare per il controllo del fatto che sul DB ho una versione uguale o più vecchia // Per non viene più eseguito il controllo if (dto.Version == item.Version || true) { item.AziendaID = dto.Azienda; item.CodiceFiscale = dto.CodiceFiscale; item.Cognome = dto.Cognome; if (dto.DataNascita != null) { if (!Conversione.IsSqlSmallDateTime(dto.DataNascita.GetValueOrDefault())) _log.WarnFormat("ATTENZIONE: Tentativo di memorizzare una data di nascita non corretta - {0} - persona:{1} - data:{2}", Utility.GetMethodDescription(), dto.ID, dto.DataNascita.GetValueOrDefault()); else item.DataNascita = dto.DataNascita; } item.Nome = dto.Nome; item.Note = dto.Note; item.PartitaIva = dto.PartitaIva; item.RagioneSociale = dto.RagioneSociale; item.Sesso = dto.Sesso; item.TipoPersona = dto.TipoPersona; item.Titolo = dto.Titolo; if (!string.IsNullOrEmpty(dto.Username)) { if (item.DatiAutenticazione == null) item.DatiAutenticazione = new DatiAutenticazionePersona(); item.DatiAutenticazione.Username = dto.Username; item.DatiAutenticazione.Password = dto.Password; } item.Iban = dto.Iban; // Se iban è valorizzato i dati singoli devono sempre essere estrapolati dall'IBAN if (!string.IsNullOrEmpty(item.Iban)) { var coord = new CoordinateBancarie(); coord.SetIBAN(item.Iban); item.Abi = coord.Abi; item.Cab = coord.Cab; item.ContoCorrente = coord.ContoCorrente; item.Cin = coord.Cin; } else { item.Abi = dto.Abi; item.Cab = dto.Cab; item.ContoCorrente = dto.ContoCorrente; item.Cin = dto.Cin; } if (dto.IndirizzoResidenza != null) { if (item.IndirizzoResidenza == null) item.IndirizzoResidenza = new Address(); item.IndirizzoResidenza.Cap = dto.IndirizzoResidenza.Cap; item.IndirizzoResidenza.Civico = dto.IndirizzoResidenza.Civico; item.IndirizzoResidenza.Indirizzo = dto.IndirizzoResidenza.Indirizzo; item.IndirizzoResidenza.Localita = dto.IndirizzoResidenza.Localita; item.IndirizzoResidenza.Presso = dto.IndirizzoResidenza.Presso; item.IndirizzoResidenza.Comune = dto.IndirizzoResidenza.CodiceComune != null ? daoFactory.GetComuneDao().Find(dto.IndirizzoResidenza.CodiceComune, false) : null; } if (dto.Domicilio != null) { if (item.Domicilio == null) item.Domicilio = new Address(); item.Domicilio.Cap = dto.Domicilio.Cap; item.Domicilio.Civico = dto.Domicilio.Civico; item.Domicilio.Indirizzo = dto.Domicilio.Indirizzo; item.Domicilio.Localita = dto.Domicilio.Localita; item.Domicilio.Presso = dto.Domicilio.Presso; item.Domicilio.Comune = dto.Domicilio.CodiceComune != null ? daoFactory.GetComuneDao().Find(dto.Domicilio.CodiceComune, false) : null; } if (dto.Recapito != null) { if (item.Recapito == null) item.Recapito = new Address(); item.Recapito.Cap = dto.Recapito.Cap; item.Recapito.Civico = dto.Recapito.Civico; item.Recapito.Indirizzo = dto.Recapito.Indirizzo; item.Recapito.Localita = dto.Recapito.Localita; item.Recapito.Presso = dto.Recapito.Presso; item.Recapito.Comune = dto.Recapito.CodiceComune != null ? daoFactory.GetComuneDao().GetById(dto.Recapito.CodiceComune, false) : null; } if (dto.ComuneNascita != null) { _idComune = dto.ComuneNascita.ID; item.ComuneNascita = daoFactory.GetComuneDao().GetById(_idComune, false); } else item.ComuneNascita = null; // Lista Contatti item.Contatti.Clear(); foreach (var t in dto.Contatti) { _id = t.ID; if (t.Stato != string.Empty) _id = getContattoRepository(item).ManageDomainEntity(t, false); var contatto = daoFactory.GetContattoDao().Find(_id.GetValueOrDefault(), false); if(contatto != null) item.Contatti.Add(contatto); } // Lista Gruppi var gruppi = item.Gruppi.ToArray(); foreach (var personaGruppo in gruppi) { personaGruppo.Gruppo.Persone.Remove(personaGruppo); personaGruppo.Persona.Gruppi.Remove(personaGruppo); personaGruppo.Gruppo = null; personaGruppo.Persona = null; } item.Gruppi.Clear(); foreach (var idGruppo in dto.Gruppi) { var gruppo = daoFactory.GetGruppoDao().Find(idGruppo, false); if(gruppo != null) { var personaGruppo = new PersonaGruppo(item, gruppo); daoFactory.GetPersonaGruppoDao().SaveOrUpdate(personaGruppo); } } // Unità Immobiliari var unitaImmobiliari = daoFactory.GetUnitaImmobiliareDao().GetByPersona(item.ID); foreach (var unitaImmobiliare in unitaImmobiliari) { unitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(unitaImmobiliare); } daoFactory.GetPersonaDao().Update(item); result = true; } else { // Eccezione: Sul db c'è qualche cosa di più nuovo. _log.ErrorFormat("Errore nel salvataggio della persona - {0} id:{1} - il dato sul db è più recente di quello che si vuole salvare", Utility.GetMethodDescription(), dto.ID); } } catch (Exception ex) { _log.ErrorFormat("Errore nel salvataggio della persona - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID); throw; } return result; }