Example #1
0
        public string SetRendicontoPreventivo(int idEsercizio, int? idStabile, int? idScala, BilancioPreventivoDTO bilancioPreventivo, StatoRendicontoEnum stato, bool dettaglioSottoConto)
        {
            try
            {
                var message = string.Empty;

                var esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio, false);

                if (esercizio.Stato == StatoEsercizioEnum.Chiuso)
                    return "L'esercizio è chiuso non è possibile modificare il bilancio preventivo";

                // -------------------------------------------
                // Testata rendiconto
                // -------------------------------------------
                RendicontoAnnuale rendiconto = null;

                try
                {
                    rendiconto = _daoFactory.GetRendicontoAnnualeDao().Find(bilancioPreventivo.ID, false);
                    if (rendiconto == null)
                    {
                        // Eliminazione vecchi rendiconti provvisori
                        // -----------------------------------------------------------------
                        try
                        {
                            var rendiconti = _daoFactory.GetRendicontoAnnualeDao().GetByEsercizio(idEsercizio);
                            foreach (var rendicontoOld in rendiconti)
                            {
                                try
                                {
                                    if (rendicontoOld.Stato == StatoRendicontoEnum.Provvisorio && rendicontoOld.Tipo == TipoRendiconto.Preventivo)
                                        _daoFactory.GetRendicontoAnnualeDao().Delete(rendicontoOld);
                                    else if (rendicontoOld.Stato == StatoRendicontoEnum.Definitivo && rendicontoOld.Tipo == TipoRendiconto.Preventivo)
                                        throw new InvalidOperationException("E' già presente un rendiconto Preventivo DEFINITIVO non è possibile creare un ulteriore rendiconto.");
                                }
                                catch (Exception ex)
                                {
                                    var idRendiconto = "<NULL>";
                                    if (rendicontoOld != null)
                                        idRendiconto = rendicontoOld.ID.ToString(CultureInfo.InvariantCulture);

                                    _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - ELIMINAZIONE SINGOLO RENDICONTO - {0} - rendiconto:{1} - idEsercizio:{2} - stabile:{3} - scala:{4} - dettaglioSottoConto:{5}", ex, Utility.GetMethodDescription(), idRendiconto, idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto);
                                    throw;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - ELIMINAZIONE VECCHI RENDICONTI - {0} - idEsercizio:{1} - stabile:{2} - scala:{3} - dettaglioSottoConto:{5}", ex, Utility.GetMethodDescription(), idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto);
                            throw;
                        }

                        // Elimino il riparto storico
                        // -----------------------------------------------------------------
                        try
                        {
                            var storico = _daoFactory.GetStoricoRipartoDao().GetByEsercizioTipo(idEsercizio, TipoRendiconto.Preventivo);
                            foreach (var storicoRiparto in storico)
                                _daoFactory.GetStoricoRipartoDao().Delete(storicoRiparto);
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - ELIMINAZIONE STORICO - {0} - idEsercizio:{1} - stabile:{2} - scala:{3} - dettaglioSottoConto:{4}", ex, Utility.GetMethodDescription(), idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto);
                            throw;
                        }

                        // Creo il nuovo rendiconto
                        // -----------------------------------------------------------------
                        try
                        {
                            rendiconto = new RendicontoAnnuale(esercizio, "Bilancio", TipoRendiconto.Preventivo) { CalcoloPerSottoconto = dettaglioSottoConto, Stato = stato };
                            _daoFactory.GetRendicontoAnnualeDao().SaveOrUpdate(rendiconto);
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - NUOVO RENDICONTO - {0} - idEsercizio:{1} - stabile:{2} - scala:{3} - dettaglioSottoConto:{4}", ex, Utility.GetMethodDescription(), idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto);
                            throw;
                        }
                    }

                    rendiconto.Stato = stato;
                }
                catch (Exception ex)
                {
                    var idRendiconto = "<NULL>";
                    if (rendiconto != null)
                        idRendiconto = rendiconto.ID.ToString(CultureInfo.InvariantCulture);

                    _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - TESTATA RENDICONTO - {0} - rendiconto:{1} - idEsercizio:{2} - stabile:{3} - scala:{4} - dettaglioSottoConto:{5}", ex, Utility.GetMethodDescription(), idRendiconto, idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto);
                    throw;
                }

                // -------------------------------------------
                // Dettaglio conti
                // -------------------------------------------
                foreach (var dettaglioConto in bilancioPreventivo.Dettaglio)
                {
                    try
                    {
                        if (dettaglioConto.ImportoPreventivo != null && dettaglioConto.ImportoPreventivo != 0)
                        {
                            RendicontoAnnualeConto conto;
                            if (dettaglioConto.ID == 0)
                            {
                                // Stabile e/o Gruppo Stabile (Scala) di riferimento
                                // --------------------------------------------------
                                Palazzina stabile = null;
                                if (dettaglioConto.IdStabile > 0)
                                    stabile = _daoFactory.GetPalazzinaDao().GetById(dettaglioConto.IdStabile.Value, false);

                                GruppoStabile scala = null;
                                if (dettaglioConto.IdGruppoStabile > 0)
                                    scala = _daoFactory.GetGruppoStabileDao().GetById(dettaglioConto.IdGruppoStabile.Value, false);

                                conto = dettaglioConto.IdSottoConto > 0 ? new RendicontoAnnualeConto(rendiconto, _daoFactory.GetSottoContoDao().GetById(dettaglioConto.IdSottoConto, false), dettaglioConto.ImportoPreventivo) : new RendicontoAnnualeConto(rendiconto, _daoFactory.GetContoDao().GetById(dettaglioConto.IdConto, false), dettaglioConto.ImportoPreventivo);

                                conto.Stabile = stabile;
                                conto.GruppoStabile = scala;
                            }
                            else
                            {
                                conto = _daoFactory.GetRendicontoAnnualeContoDao().Find(dettaglioConto.ID, false);
                                if (conto == null)
                                {
                                    message = "Errore inaspettato nella creazione del bilancio preventivo." + Environment.NewLine + "Ricaricare la videata e riprovare";
                                    
                                    _log.Error("Errore inaspettato durante la creazione del bilancio preventivo - Dettaglio Conti - GetById - " + Utility.GetMethodDescription() + " - dettaglioConto:" + dettaglioConto.ID + " - idEsercizio: " + idEsercizio + " - Stabile:" + idStabile.GetValueOrDefault() + " - Scala:" + idScala.GetValueOrDefault() + " - dettaglio:" + dettaglioSottoConto);

                                    return message;
                                }
                                conto.Importo = dettaglioConto.ImportoPreventivo;
                            }

                            // Eventuali dettagli per unità
                            // -------------------------------------
                            if (dettaglioConto.DettaglioUnita != null && dettaglioConto.DettaglioUnita.Count > 0)
                            {
                                decimal importoConto = 0;
                                foreach (var calcoloUnita in dettaglioConto.DettaglioUnita)
                                {
                                    try
                                    {

                                        var dettaglioUnita = _daoFactory.GetRendicontoAnnualeUnitaDao().Find(calcoloUnita.ID, false);
                                        if (dettaglioUnita != null)
                                        {
                                            if (calcoloUnita.ImportoPreventivo != null && calcoloUnita.ImportoPreventivo != 0)
                                                dettaglioUnita.Importo = calcoloUnita.ImportoPreventivo;
                                            else // se importo == 0 elimino il dettaglio per unità
                                            {
                                                dettaglioUnita.Conto.DettagliUnita.Remove(dettaglioUnita);
                                                dettaglioUnita.Conto = null;
                                            }
                                        }
                                        else
                                        {
                                            if (calcoloUnita.ImportoPreventivo != null && calcoloUnita.ImportoPreventivo != 0)
                                                new RendicontoAnnualeUnita(conto, _daoFactory.GetUnitaImmobiliareDao().GetById(calcoloUnita.IdUnita, false), calcoloUnita.ImportoPreventivo);
                                        }

                                        if (calcoloUnita.ImportoPreventivo != null)
                                            importoConto += calcoloUnita.ImportoPreventivo.Value;
                                    }
                                    catch (Exception ex)
                                    {
                                        _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - SINGOLA UNITA' - {0} - dettaglioConto:{1} - idEsercizio:{2} - stabile:{3} - scala:{4} - conto:{5} - unità:{6}", ex, Utility.GetMethodDescription(), dettaglioConto.ID, idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto, calcoloUnita.ID);
                                        throw;
                                    }
                                }
                                conto.Importo = importoConto;
                            }

                            _daoFactory.GetRendicontoAnnualeContoDao().SaveOrUpdate(conto);
                        }
                        else if (dettaglioConto.ID > 0)
                        {
                            var conto = _daoFactory.GetRendicontoAnnualeContoDao().Find(dettaglioConto.ID, false);
                            if (conto != null)
                            {
                                conto.Rendiconto.Conti.Remove(conto);
                                conto.Rendiconto = null;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - SINGOLO CONTO - {0} - dettaglioConto:{1} - idEsercizio:{2} - stabile:{3} - scala:{4} - dettaglio:{5}", ex, Utility.GetMethodDescription(), dettaglioConto.ID, idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto);
                        throw;
                    }
                }

                // -------------------------------------------------------------
                // Memorizzo nell'esercizio il codice del rendiconto DEFINITIVO
                // -------------------------------------------------------------
                if (stato == StatoRendicontoEnum.Definitivo)
                {
                    esercizio.RendicontoPreventivoCorrente = rendiconto;
                    if (esercizio.AnnoGestionale.AnnoGestionalePrecedente?.EsercizioOrdinario != null)
                        esercizio.AnnoGestionale.AnnoGestionalePrecedente.EsercizioOrdinario.RendicontoPreventivoEsercizioSuccessivo = rendiconto;

                    // se è definitivo storicizzo il riparto
                    // ===================================================================================
                    //  TODO: Per ora non viene salvato lo storico perchè può capitare che per sbaglio il
                    //        preventivo sia reso definitivo senza che siano stati inseriti i millesimi.
                    // ===================================================================================
                    //var messageStorico = StoricizzaRiparto(idEsercizio, TipoRendiconto.Preventivo);
                    //if (!string.IsNullOrEmpty(messageStorico))
                    //    message += messageStorico + Environment.NewLine;
                }

                return message;

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione del bilancio preventivo - {0} - idEsercizio:{1} - Stabile:{2} - Scala:{3} - Dettaglio:{4}", ex, Utility.GetMethodDescription(), idEsercizio, idStabile.GetValueOrDefault(), idScala.GetValueOrDefault(), dettaglioSottoConto);
                throw;
            }
        }
Example #2
0
 public string SetRendicontoPreventivo(int idEsercizio, int? idStabile, int? idScala, BilancioPreventivoDTO preventivo, StatoRendicontoEnum stato, bool dettaglioSottoConto)
 {
     var result = GetServiceClient().SetRendicontoPreventivo(idEsercizio, idStabile, idScala, preventivo, stato, dettaglioSottoConto, GetUserInfo());
     CloseService();
     return result;
 }
Example #3
0
        public string SetRendicontoPreventivo(int idEsercizio, int? idStabile, int? idScala, BilancioPreventivoDTO bilancioPreventivo, StatoRendicontoEnum stato, bool dettaglioSottoConto, UserInfo userinfo)
		{
            var retryCount = 10;
            var success = false;
            var windsorRep = new WindsorConfigRepository();
            string item = null;
            while (retryCount >= 0 && !success)
            {
                try
                {
                    windsorRep.BeginTransaction(userinfo);
                    var bilancioService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IBilancioService>();
                    item = bilancioService.SetRendicontoPreventivo(idEsercizio, idStabile, idScala, bilancioPreventivo, stato, dettaglioSottoConto);
                    windsorRep.Commit();
                    success = true;
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nella esecuzione della funzione - TENTATIVO:{0} - {1} - esercizio:{2} - stabile:{3} - scala:{4} - dettaglioSottoConto:{5} - stato:{6} - azienda:{7} - number:{8}", ex, (11 - retryCount), Utility.GetMethodDescription(), idEsercizio, idStabile, idScala, dettaglioSottoConto, stato, userinfo.Azienda, getExceptionId(ex));

                    windsorRep.Rollback();
                    if (!isRetryException(ex))
                        throw;

                    // Add delay here if you wish. 
                    System.Threading.Thread.Sleep(1000 * (11 - retryCount));
                    retryCount--;
                    _log.InfoFormat("Set rendiconto preventivo - INIZIO TENTATIVO:{0} - {1} - esercizio:{2} - stabile:{3} - scala:{4} - dettaglioSottoConto:{5} - stato:{6} - azienda:{7}", (11 - retryCount), Utility.GetMethodDescription(), idEsercizio, idStabile, idScala, dettaglioSottoConto, stato, userinfo.Azienda);
                }
            }

            if (!success)
                windsorRep.Rollback();

            return item;
		}