public AuthorizationMessages SalvaModello(ModelloListaRegistrazioneContabileDTO dto, bool ricalcoloSpeseEsistenti, int idUtente, LogTransazione logTransazione) { try { var logTransazioneModello = logTransazione; var logTransazioneDettaglioModello = logTransazione; var logTransazioneFornitoreModello = logTransazione; var logTransazioneContoModello = logTransazione; var fatalMessage = string.Empty; var warnMessage = string.Empty; ModelloRegistrazioneContabile modello = null; if (dto.ID == 0) { var condominio = _daoFactory.GetCondominioDao().Find(dto.IdCondominio, false); if (condominio != null) { var descrizione = string.Empty; if (!string.IsNullOrEmpty(dto.Descrizione)) { descrizione = dto.Descrizione; if (descrizione.Length > 100) descrizione = descrizione.Substring(0, 100); } var voceFattura = string.Empty; if (!string.IsNullOrEmpty(dto.DescrizioneVoceFattura)) { voceFattura = dto.DescrizioneVoceFattura; if (voceFattura.Length > 512) voceFattura = voceFattura.Substring(0, 512); } modello = new ModelloRegistrazioneContabile(condominio, descrizione, logTransazioneModello) { DescrizioneVoceFattura = voceFattura }; if (logTransazioneModello != null) { _daoFactory.GetModelloRegistrazioneContabileDao().SaveOrUpdate(modello); logTransazioneContoModello = null; logTransazioneDettaglioModello = null; logTransazioneFornitoreModello = null; } } } else { modello = _daoFactory.GetModelloRegistrazioneContabileDao().Find(dto.ID, false); if(modello != null) modello.Descrizione = dto.Descrizione; } if (modello != null) { modello.DescrizioneVoceFattura = dto.DescrizioneVoceFattura; // -------------------------- // Fornitori // -------------------------- modello.Fornitori.Clear(); foreach (var dtoFornitore in dto.Fornitori) { ModelloContabileFornitore modelloFornitore = null; if (dtoFornitore.ID == 0) { if (dtoFornitore.IdFornitore > 0) { var fornitore = _daoFactory.GetFornitoreDao().Find(dtoFornitore.IdFornitore, false); if (fornitore != null) { modelloFornitore = new ModelloContabileFornitore(fornitore, modello, logTransazioneFornitoreModello); if(logTransazioneFornitoreModello != null) _daoFactory.GetModelloContabileFornitoreDao().SaveOrUpdate(modelloFornitore); } else { _log.WarnFormat("Fornitore inesistente - {0} - fornitore:{1}", Library.Utility.GetMethodDescription(), dtoFornitore.IdFornitore); } } else { _log.WarnFormat("Fornitore non definito - {0}", Library.Utility.GetMethodDescription()); } } else { modelloFornitore = _daoFactory.GetModelloContabileFornitoreDao().Find(dtoFornitore.ID, false); if (modelloFornitore != null) modelloFornitore.Fornitore = _daoFactory.GetFornitoreDao().GetById(dtoFornitore.IdFornitore, false); else { _log.WarnFormat("Modello inesistente - {0} - IdModello:{1}", Library.Utility.GetMethodDescription(), dtoFornitore.IdModello); } } if (modelloFornitore != null) modello.Fornitori.Add(modelloFornitore); } // -------------------------- // Conti // -------------------------- modello.Conti.Clear(); foreach (var dtoConto in dto.Conti) { var conto = _daoFactory.GetContoDao().Find(dtoConto.IdConto, false); var sottoConto = _daoFactory.GetSottoContoDao().Find(dtoConto.IdSottoConto, false); var modelloConto = _daoFactory.GetContiModelloRegistrazioneContabileDao().Find(dtoConto.ID, false); if (modelloConto == null) { modelloConto = new ContiModelloRegistrazioneContabile(modello, conto, sottoConto, dtoConto.PercentualeRipartizione, logTransazioneContoModello); if (logTransazioneContoModello != null) { _daoFactory.GetContiModelloRegistrazioneContabileDao().SaveOrUpdate(modelloConto); logTransazioneDettaglioModello = null; } } else { modelloConto.PercentualeRipartizione = dtoConto.PercentualeRipartizione; if (conto != null) modelloConto.ContoRiferimento = conto; if (sottoConto != null) modelloConto.SottoContoRiferimento = sottoConto; } // -------------------------- // Riparto // -------------------------- modelloConto.Unita.Clear(); foreach (var dtoRiparto in dtoConto.Riparto) { var modelloRiparto = _daoFactory.GetDettaglioModelloRegistrazioneContabileDao().Find(dtoRiparto.ID, false); if (modelloRiparto == null) { modelloRiparto = new DettaglioModelloRegistrazioneContabile(modelloConto, logTransazioneDettaglioModello); if(logTransazioneDettaglioModello != null) _daoFactory.GetDettaglioModelloRegistrazioneContabileDao().SaveOrUpdate(modelloRiparto); } // Lotto modelloRiparto.LottoRiferimento = dtoRiparto.IdLotto > 0 ? _daoFactory.GetLottoDao().GetById(dtoRiparto.IdLotto.Value, false) : null; // Stabile modelloRiparto.PalazzinaRiferimento = dtoRiparto.IdStabile > 0 ? _daoFactory.GetPalazzinaDao().GetById(dtoRiparto.IdStabile.Value, false) : null; // Gruppo Stabile modelloRiparto.GruppoStabileRiferimento = dtoRiparto.IdGruppoStabile > 0 ? _daoFactory.GetGruppoStabileDao().GetById(dtoRiparto.IdGruppoStabile.Value, false) : null; // Unità Immobiliare modelloRiparto.UnitaRiferimento = dtoRiparto.IdUnita > 0 ? _daoFactory.GetUnitaImmobiliareDao().GetById(dtoRiparto.IdUnita.Value, false) : null; modelloConto.Unita.Add(modelloRiparto); } modello.Conti.Add(modelloConto); } if (ricalcoloSpeseEsistenti) { var authMessage = ReloadRipartizioneByModelloEsercizio(modello.ID, null, null, idUtente, logTransazione); if (!string.IsNullOrEmpty(authMessage.FatalMessage)) fatalMessage += authMessage.FatalMessage + Environment.NewLine; if (!string.IsNullOrEmpty(authMessage.WarnMessage)) warnMessage += authMessage.WarnMessage + Environment.NewLine; } return new AuthorizationMessages(fatalMessage, warnMessage) {Id = modello.ID}; } return new AuthorizationMessages(fatalMessage, warnMessage); } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante il salvataggio del modello contabile - {0} - modello:{1} - condominio:{2}", ex, Library.Utility.GetMethodDescription(), dto.ID, dto.IdCondominio); throw; } }
public virtual IUpdatableBusinessEntity Copy() { var dettaglio = new DettaglioModelloRegistrazioneContabile(ContoModello, null); return dettaglio; }