Ejemplo n.º 1
0
        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;
 }