public RisultatoChiusuraEsercizio ChiusuraStraordinario(EsercizioDTO esercizioStraordinario, EsercizioDTO esercizioOrdinario, ChiusuraEsercizioStraordinarioInfo chiusuraStraordinarioInfo, string nomeConto, int ordineConto, CondominioDTO condominio, DateTime dataChiusura, string note) { int? idEsercizioOrdinario = null; if (esercizioOrdinario != null) idEsercizioOrdinario = esercizioOrdinario.ID; var result = GetServiceClient().ChiusuraEsercizioStraordinario(esercizioStraordinario.ID, idEsercizioOrdinario, chiusuraStraordinarioInfo, nomeConto, ordineConto, dataChiusura, note, GetUserInfo()); CloseService(); return result; }
private ChiusuraEsercizioStraordinarioInfo getChiusuraEsercizioStraordinarioInfo(SceltaEsercizioSaldiUI form) { var result = new ChiusuraEsercizioStraordinarioInfo { TipoChiusura = getTipoChiusuraEsercizioStraordinario() }; if (form != null) { result.DataApertura = form.DataApertura; result.DataChiusura = form.DataChiusura; result.Descrizione = form.DescrizioneEsercizio; result.IdEsercizioSaldi = form.IdEsercizioSaldi; } return result; }
public ChiusuraEsercizio ChiusuraEsercizioStraordinario(int idEsercizioStraordinario, int? idEsercizioOrdinario, ChiusuraEsercizioStraordinarioInfo chiusuraStraordinarioInfo, string nomeConto, int ordineConto, DateTime? dataChiusura, string note, bool chiusuraTemporanea) { AnnoGestionale annoGestionale = null; Esercizio result = null; Esercizio esercizioSaldi = null; TestataMovimentoContabile testata = null; TestataMovimentoContabile testataMovimentiDopoChiusura = null; var esercizioStraordinario = _daoFactory.GetEsercizioDao().GetById(idEsercizioStraordinario, false); var message = string.Empty; if (message == string.Empty) { if (!chiusuraTemporanea) { if (dataChiusura != null) esercizioStraordinario.DataChiusura = dataChiusura; esercizioStraordinario.NoteChiusura = note; esercizioStraordinario.Stato = StatoEsercizioEnum.Chiuso; } // Trasferimento Saldi all'esercizio ordinario // Sono trasferiti conto per conto i saldi economici dello straordinario nell'ordinario, suddivisi per ogni condomino switch (chiusuraStraordinarioInfo.TipoChiusura) { case TipoChiusuraEsercizioStraordinarioEnum.TrasferimentoInOrdinario: if (idEsercizioOrdinario > 0) { esercizioSaldi = _daoFactory.GetEsercizioDao().GetById(idEsercizioOrdinario.GetValueOrDefault(), false); testata = _saldoService.TrasferimentoSaldiStraordinarioInOrdinario(idEsercizioStraordinario, idEsercizioOrdinario.Value, nomeConto, ordineConto, _bilancioService, dataChiusura, chiusuraTemporanea); } break; case TipoChiusuraEsercizioStraordinarioEnum.NuovoStraordinario: Conto contoVersamentoCondomini; if (chiusuraStraordinarioInfo.IdEsercizioSaldi == null) { if (esercizioStraordinario.AnnoGestionale?.EsercizioOrdinario == null) { message = $"Esercizio {esercizioStraordinario.DisplayName} non è configurato correttamente."; _notifier.Notify(message); return new ChiusuraEsercizio(null, null); } var aperturaEsercizioInfo = aperturaEsercizio(esercizioStraordinario.AnnoGestionale.EsercizioOrdinario.ID, chiusuraStraordinarioInfo.DataApertura, chiusuraStraordinarioInfo.DataChiusura, chiusuraStraordinarioInfo.Descrizione, null, GestioneEsercizioEnum.Straordinario, esercizioStraordinario.TipoStraordinario); esercizioSaldi = aperturaEsercizioInfo.Esercizio; esercizioSaldi.EsercizioPrecedente = esercizioStraordinario; contoVersamentoCondomini = aperturaEsercizioInfo.ContoVersamentoCondomini; annoGestionale = aperturaEsercizioInfo.AnnoGestionale; } else { esercizioSaldi = _daoFactory.GetEsercizioDao().GetById(chiusuraStraordinarioInfo.IdEsercizioSaldi.Value, false); contoVersamentoCondomini = _daoFactory.GetContoDao().GetByCodice(esercizioSaldi.ID, esercizioSaldi.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoVersamentiCondomini()); } testata = _saldoService.TrasferimentoSaldiStraordinarioInStraordinario(esercizioStraordinario, esercizioSaldi, contoVersamentoCondomini, _bilancioService, dataChiusura); break; } if (annoGestionale != null) _daoFactory.GetAnnoGestionaleDao().SaveOrUpdate(annoGestionale); if (esercizioSaldi != null) _daoFactory.GetEsercizioDao().SaveOrUpdate(esercizioSaldi); if (testata != null) _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata); // ---------------------------------------------------------------------------------------------------------------- // SOLO SE NON SI TRATTA DELLA CHIUSURA TEMPORANEA PER CHIUSURA DELL'ORDINARIO // Registrazioni per correggere la competenza dei versamenti eseguiti dopo la data di chiusura dell'esercizio // ---------------------------------------------------------------------------------------------------------------- if (!chiusuraTemporanea) testataMovimentiDopoChiusura = _movimentoContabileService.SetMovimentiVersamentiDopoChiusura(esercizioStraordinario); message = $"La chiusura dell'esercizio: {esercizioStraordinario.DisplayName} è terminata correttamente - Condominio: {esercizioStraordinario.CondominioRiferimento.DisplayName} - Chiusura temporanea: {chiusuraTemporanea}"; result = esercizioStraordinario; } _notifier.Notify(message); if(testataMovimentiDopoChiusura != null) _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testataMovimentiDopoChiusura); return new ChiusuraEsercizio(result, testata); }
public RisultatoChiusuraEsercizio ChiusuraStraordinario(EsercizioDTO esercizioStraordinario, EsercizioDTO esercizioOrdinario, ChiusuraEsercizioStraordinarioInfo chiusuraStrordinarioInfo, string nomeConto, int ordineConto, CondominioDTO condominio, DateTime dataChiusura, string note) { int? idEsercizioOrdinario = null; if (esercizioOrdinario != null) idEsercizioOrdinario = esercizioOrdinario.ID; var result = GetServiceClient().ChiusuraEsercizioStraordinario(esercizioStraordinario.ID, idEsercizioOrdinario, chiusuraStrordinarioInfo, nomeConto, ordineConto, dataChiusura, note, GetUserInfo()); if (result.Esercizio != null) { ClearCache(); updateCache(result.Esercizio); condominio.Esercizi.Clear(); condominio.Esercizi.AddRange(GetByCondominio(condominio)); } CloseService(); return result; }
public RisultatoChiusuraEsercizio ChiusuraEsercizioStraordinario(int idEsercizioStraordinario, int? idEsercizioOrdinario, ChiusuraEsercizioStraordinarioInfo chiusuraEsercizioStraordinarioInfo, string nomeConto, int ordineConto, DateTime? dataChiusura, string note, UserInfo userinfo) { var retryCount = 10; var success = false; var windsorRep = new WindsorConfigRepository(); EsercizioDTO item = null; while (retryCount >= 0 && !success) { try { windsorRep.BeginTransaction(userinfo); var repo = new EsercizioRepository(userinfo, windsorRep); var esercizi = windsorRep.GetContainer(userinfo.Azienda).Resolve<IEsercizioService>(); var chiusura = esercizi.ChiusuraEsercizioStraordinario(idEsercizioStraordinario, idEsercizioOrdinario, chiusuraEsercizioStraordinarioInfo, nomeConto, ordineConto, dataChiusura, note, false); var esercizio = chiusura.Esercizio; item = esercizio != null ? repo.GetByDomainEntity(esercizio) : null; windsorRep.Commit(); success = true; } catch (InvalidDataException ex) { windsorRep.Rollback(); return new RisultatoChiusuraEsercizio(null, ex.Message); } catch (Exception ex) { _log.ErrorFormat("Errore nella chiusura Esercizio straordinario - INIZIO TENTATIVO:{0} - {1} - esercizio straordinario:{2} - esercizio ordinario:{3} - conto{4} - ordine conto:{5} - dataChiusura:{6} - note:{7} - azienda:{8}", ex, (11 - retryCount), Utility.GetMethodDescription(), idEsercizioStraordinario, idEsercizioOrdinario, nomeConto, ordineConto, dataChiusura, note, userinfo.Azienda); windsorRep.Rollback(); if (!isRetryException(ex)) throw; // Add delay here if you wish. System.Threading.Thread.Sleep(1000 * (11 - retryCount)); retryCount--; _log.InfoFormat("Chiusura Esercizio straordinario - INIZIO TENTATIVO:{0} - {1} - esercizio straordinario:{2} - esercizio ordinario:{3} - conto{4} - ordine conto:{5} - dataChiusura:{6} - note:{7} - azienda:{8}", (11 - retryCount), Utility.GetMethodDescription(), idEsercizioStraordinario, idEsercizioOrdinario, nomeConto, ordineConto, dataChiusura, note, userinfo.Azienda); } } if (!success) windsorRep.Rollback(); return new RisultatoChiusuraEsercizio(item, string.Empty); }