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; } }
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; }
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; }