Esempio n. 1
0
        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;
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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);
        }