예제 #1
0
 public ChiusuraEsercizioStraordinarioInfo(int? idEsercizioSaldi, TipoChiusuraEsercizioStraordinarioEnum tipoChiusura, DateTime dataApertura, DateTime dataChiusura, string descrizione)
 {
     IdEsercizioSaldi = idEsercizioSaldi;
     TipoChiusura = tipoChiusura;
     DataApertura = dataApertura;
     DataChiusura = dataChiusura;
     Descrizione = descrizione;
 }
예제 #2
0
        public AuthorizationMessages IsAllowChiusuraEsercizio(int idEsercizio, DateTime? dataAperturaEsercizio, DateTime? dataChiusuraEsercizio, bool forzaChiusuraSenzaNuovo, int? idEsercizioSaldi, TipoChiusuraEsercizioStraordinarioEnum tipoChiusura)
        {
            var warnMessage = string.Empty;
            var fatalMessage = string.Empty;
            var esercizio = _daoFactory.GetEsercizioDao().Find(idEsercizio, false);
            if(esercizio == null)
                return new AuthorizationMessages("L'esercizio non è più presente, probabilmente è stato eliminato in un altro thread, si cosniglia di eseguire un refresh", string.Empty);

            if (dataAperturaEsercizio == null)
                dataAperturaEsercizio = esercizio.DataApertura;

            // =========================================================================
            //  Esercizio Ordinario
            // =========================================================================
            if (esercizio.Gestione == GestioneEsercizioEnum.Ordinario)
            {
                if (esercizio.Stato == StatoEsercizioEnum.Aperto)
                {
                    var esercizioPrecedente = esercizio.GetEsercizioPrecedente();
                    if(esercizioPrecedente != null && esercizioPrecedente.Stato == StatoEsercizioEnum.Aperto)
                        fatalMessage = "Non è possibile eseguire la chiusura perchè l'esercizio precedente è ancora aperto." + Environment.NewLine;

                    var annoSuccessivo = _daoFactory.GetAnnoGestionaleDao().GetAnnoSuccessivo(esercizio.AnnoGestionale.ID);
                    if (annoSuccessivo == null && !forzaChiusuraSenzaNuovo)
                        fatalMessage = "Non è possibile chiudere un esercizio ordinario senza prima aver aperto il nuovo." + Environment.NewLine;

                    if (dataChiusuraEsercizio != null)
                    {
                        if (dataAperturaEsercizio >= dataChiusuraEsercizio)
                            fatalMessage += "La data di chiusura non può essere anteriore a quella di apertura" + Environment.NewLine;

                        try
                        {
                            var dataChiusuraOrdinaria = new DateTime(esercizio.AnnoGestionale.AnnoFinale.GetValueOrDefault(), esercizio.CondominioRiferimento.MeseChiusuraEsercizioOrdinario, esercizio.CondominioRiferimento.GiornoChiusuraEsercizioOrdinario);
                            if (dataChiusuraEsercizio.GetValueOrDefault() != dataChiusuraOrdinaria)
                                warnMessage = "La data di chiusura non corrisponde con la data di chiusura ordinaria: " + dataChiusuraOrdinaria.ToShortDateString();
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore nella lettura della data di chiusura ordinaria - {0} - giorno:{1} - mese:{2} - anno:{3} - azienda:{4}", ex, Utility.GetMethodDescription(), esercizio.CondominioRiferimento.GiornoChiusuraEsercizioOrdinario, esercizio.CondominioRiferimento.MeseChiusuraEsercizioOrdinario, esercizio.AnnoGestionale.AnnoFinale, esercizio.CondominioRiferimento.Azienda.ID);                            
                        }

                        const string hql = "FROM Esercizio ES WHERE ES != :esercizio AND ES.Gestione = :gestione AND ES.CondominioRiferimento = :condominio AND ((ES.DataApertura >= :dataApertura AND ES.DataApertura <= :dataChiusura) OR (ES.DataChiusura >= :dataApertura AND ES.DataChiusura <= :dataChiusura))";
                        var esercizi = _daoFactory.GetEsercizioDao().GetByQuery(hql, new QueryParam("dataApertura", dataAperturaEsercizio.GetValueOrDefault()), new QueryParam("dataChiusura", dataChiusuraEsercizio.GetValueOrDefault()), new QueryParam("esercizio", idEsercizio), new QueryParam("condominio", esercizio.CondominioRiferimento.ID), new QueryParam("gestione", Conversione.ToHQLParameter(GestioneEsercizioEnum.Ordinario)));
                        if (esercizi.Count > 0)
                        {
                            fatalMessage += "Sono presenti esercizi all'interno delle date di competenza dell'esercizio che si vuole chiudere:" + Environment.NewLine;
                            fatalMessage = esercizi.Aggregate(fatalMessage, (current, item) => current + ("Esercizio: " + item.DisplayName + " - apertura: " + item.DataApertura.GetValueOrDefault().ToShortDateString() + " - chiusura: " + item.DataChiusura.GetValueOrDefault().ToShortDateString()));
                        }
                    }

                    // Controllo movimenti di chiusura già presenti
                    if (_daoFactory.GetTestataMovimentoContabileDao().GetTestateMovimentiByEsercizioChiusura(esercizio).Count > 0)
                        fatalMessage += "E' già presente una chiusura di esercizio" + Environment.NewLine;

                    // Controllo saldi condomini nel bilancio di apertura
                    var testataBilancioApertura = _daoFactory.GetTestataMovimentoContabileDao().GetTestateMovimentiByEsercizioCausale(esercizio, _daoFactory.GetCausaleContabileDao().GetByCodice("AB")).Where(item => item.AperturaBilancio).ToList().SingleOrDefault();
                    if (testataBilancioApertura != null)
                    {
                        var contoCreditiCondomini = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoVersamentiCondomini());
                        var importoCreditiCondomini = testataBilancioApertura.Movimenti.Where(item => item.ContoRiferimento.ID == contoCreditiCondomini.ID).Sum(item => item.GetImportoConSegno().GetValueOrDefault());
                        if (importoCreditiCondomini != 0)
                        {
                            var saldiCondominiApertura = _daoFactory.GetSaldoSoggettoDao().GetByEsercizioStabileScala(esercizio, null, null);
                            if (!saldiCondominiApertura.Any())
                                fatalMessage += $"Non sono presenti i saldi di inizio esercizio dei condomini{Environment.NewLine}";
                            else
                            {
                                var importoSaldiCondomini = saldiCondominiApertura.Sum(item => item.Importo * -1);
                                if(importoCreditiCondomini != importoSaldiCondomini)
                                    fatalMessage += $"L'importo del conto crediti v/condomini: {importoCreditiCondomini:c} non corrisponde con la somma dei saldi dei singoli condomini: {importoSaldiCondomini:c}{Environment.NewLine}";
                            }
                        }
                    }
                }
                else
                    fatalMessage = "L'esercizio è già stato chiuso" + Environment.NewLine;
            }

            // =========================================================================
            //  Esercizio Straordinario
            // =========================================================================
            if (esercizio.Gestione == GestioneEsercizioEnum.Straordinario)
            {
                if (esercizio.Stato == StatoEsercizioEnum.Chiuso)
                    fatalMessage = "L'esercizio è già stato chiuso" + Environment.NewLine;

                if (dataChiusuraEsercizio != null)
                {
                    var numeroMovimentiDopoChiusura = _daoFactory.GetMovimentoContabileDao().GetCountMovimentiEconomici(dataChiusuraEsercizio.GetValueOrDefault().AddDays(1), esercizio);
                    if (numeroMovimentiDopoChiusura > 0)
                        fatalMessage = $"Sono presenti {numeroMovimentiDopoChiusura} movimenti economici con data di registrazione successiva al {dataChiusuraEsercizio.GetValueOrDefault().ToShortDateString()}.{Environment.NewLine}";

                    // Se presente esercizio saldi la data di chiusura deve essere coerente
                    if (idEsercizioSaldi != null)
                    {
                        var esercizioSaldi = _daoFactory.GetEsercizioDao().Find(idEsercizioSaldi.GetValueOrDefault(), false);
                        if (esercizioSaldi != null)
                        {
                            var messagesDataRegistrazione = _movimentoContabileService.IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizioSaldi, dataChiusuraEsercizio.GetValueOrDefault());
                            fatalMessage = messagesDataRegistrazione.Aggregate(fatalMessage, (current, message) => current + $"{message}.{Environment.NewLine}");
                        }
                    }
                    else if(tipoChiusura == TipoChiusuraEsercizioStraordinarioEnum.TrasferimentoInOrdinario)
                        fatalMessage = "Non è stato scelto l'esercizio ordinario per il passaggio dei saldi";
                }
                else
                    fatalMessage = "Non è stata definita la data di chiusura dell'esercizio";
            }

            return new AuthorizationMessages(fatalMessage, warnMessage);
        }
예제 #3
0
 public AuthorizationMessages IsAllowChiusura(EsercizioDTO esercizio, DateTime? dataApertura, DateTime? dataChiusura, bool forzaChiusuraSenzaNuovo, int? idEsercizioSaldi, TipoChiusuraEsercizioStraordinarioEnum tipoChiusura)
 {
     var result = GetServiceClient().IsAllowChiusuraEsercizio(esercizio.ID, dataApertura, dataChiusura, forzaChiusuraSenzaNuovo, idEsercizioSaldi, tipoChiusura, GetUserInfo());
     CloseService();
     return result;
 }
예제 #4
0
        public AuthorizationMessages IsAllowChiusuraEsercizio(int idEsercizio, DateTime? dataAperturaEsercizio, DateTime? dataChiusuraEsercizio, bool forzaChiusuraSenzaNuovo, int? idEsercizioSaldi, TipoChiusuraEsercizioStraordinarioEnum tipoChiusura, UserInfo userinfo)
		{
			var windsorRep = new WindsorConfigRepository();
			try
			{
				windsorRep.BeginTransaction(userinfo);
				var service = windsorRep.GetContainer(userinfo.Azienda).Resolve<IEsercizioService>();
                var item = service.IsAllowChiusuraEsercizio(idEsercizio, dataAperturaEsercizio, dataChiusuraEsercizio, forzaChiusuraSenzaNuovo, idEsercizioSaldi, tipoChiusura);
				windsorRep.Commit();
				return item;
			}
			catch (Exception ex)
			{
				_log.ErrorFormat("Errore nel controllo di chiusura dell'esercizio - {0} - esercizio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), idEsercizio, userinfo.Azienda);
				windsorRep.Rollback();
				throw;
			}
        }