示例#1
0
 /// <summary>
 /// Crea uno Stabile valido
 /// </summary>
 public SottoConto(Conto contoRiferimento, string descrizione)
 {
     _descrizione = descrizione;
     _contoRiferimento = contoRiferimento;
     if (contoRiferimento != null)
         contoRiferimento.SottoConti.Add(this);
 }
示例#2
0
        /// <summary>
        /// Crea un Versamento Condomino valido.
        /// </summary>
        public VersamentoSoggetto(Esercizio esercizio, SoggettoCondominio soggetto, Conto conto, DateTime data, decimal importo, int numeroProtocollo, TipoVersamentoSoggettoEnum tipo, LogTransazione logTransazione, TipoVersamentoDopoChiusuraEnum? tipoVersamentoDopoChiusura = null, TipoVersamentoPrimaAperturaEnum? tipoVersamentoPrimaApertura = null)
        {
            Esercizio = esercizio;
            Soggetto = soggetto;
            ContoPatrimoniale = conto;
            Data = data;
            Importo = importo;
            Tipo = tipo;
            NumeroProtocollo = numeroProtocollo;
            TipoVersamentoDopoChiusura = tipoVersamentoDopoChiusura;
            TipoVersamentoPrimaApertura = tipoVersamentoPrimaApertura;

            if (Esercizio != null && Esercizio.Gestione == GestioneEsercizioEnum.Straordinario)
            {
                TipoVersamentoDopoChiusura = null;
                TipoVersamentoPrimaApertura = null;
            }

            if (Soggetto != null)
                Soggetto.Versamenti.Add(this);

            LogTransazione = logTransazione;
            if (LogTransazione != null)
                LogTransazione.Versamenti.Add(this);
        }
 /// <summary>
 /// Crea un Dettaglio di spesa valido
 /// </summary>
 public RipartoConsuntivoSoggettoCondominio(SoggettoCondominio soggetto, Esercizio esercizio, Conto conto, decimal? importo)
 {
     Importo = importo;
     Soggetto = soggetto;
     Esercizio = esercizio;
     Conto = conto;
 }
 /// <summary>
 /// Crea una Testata di movimento contabile valida
 /// </summary>
 public TestataRipartoContatoreCondominiale(Esercizio esercizio, Contatore contatoreCondominiale, Conto contoAddebito, SottoConto sottocontoAddebito, string descrizioneMovimentoAddebito)
 {
     Esercizio = esercizio;
     ContatoreCondominiale = contatoreCondominiale;
     ContoAddebito = contoAddebito;
     SottocontoAddebito = sottocontoAddebito;
     DescrizioneMovimentoAddebito = descrizioneMovimentoAddebito;
 }
示例#5
0
        /// <summary>
        /// Crea un Versamento Condomino valido.
        /// </summary>
        public VersamentoSoggetto(Esercizio esercizio, SoggettoCondominio soggetto, Conto conto, DateTime data, decimal importo, FileCBI file, DatiBancariCondomini contoBancario, LogTransazione logTransazione, TipoVersamentoDopoChiusuraEnum? tipoVersamentoDopoChiusura = null, TipoVersamentoPrimaAperturaEnum? tipoVersamentoPrimaApertura = null)
            : this(esercizio, soggetto, conto, data, importo, 0, TipoVersamentoSoggettoEnum.CBI, logTransazione, tipoVersamentoDopoChiusura, tipoVersamentoPrimaApertura)
        {
            ContoBancario = contoBancario;

            File = file;
            if (File != null)
                File.Versamenti.Add(this);
        }
示例#6
0
 /// <summary>
 /// Crea un movimento contabile valido.
 /// E' relativo al conto economico connesso alla registrazione di una spesa
 /// </summary>
 public RipartizioneSpesa(Spesa spesa, Conto conto, SottoConto sottoConto, decimal? importo, string segno, string descrizione)
 {
     Spesa = spesa;
     ContoRiferimento = conto;
     SottoContoRiferimento = sottoConto;
     Importo = importo;
     Segno = segno;
     Descrizione = descrizione;
 }
示例#7
0
 /// <summary>
 /// Crea uno Stabile valido
 /// </summary>
 public Millesimo(Conto contoRiferimento, UnitaImmobiliare unita)
 {
     _unitaRiferimento = unita;
     _contoRiferimento = contoRiferimento;
     if (contoRiferimento != null)
     {
         contoRiferimento.Millesimi.Add(this);
         unita.Millesimi.Add(this);
     }
 }
示例#8
0
        /// <summary>
        /// Crea un punto di Ordine del Giorno valido
        /// </summary>
        public OrdineGiornoAssemblea(Assemblea assemblea, string descrizione, Conto contomillesimiRiferimento, int progressivo)
        {
            Assemblea = assemblea;
            Descrizione = descrizione;
            //MillesimiRiferimento = MillesimiRiferimento.Proprieta;
            ContoMillesimiRiferimento = contomillesimiRiferimento;
            Progressivo = progressivo;

            if (Assemblea != null)
                Assemblea.PuntoOrdineGiorno.Add(this);
        }
示例#9
0
        public DettaglioSubentro(Subentro subentro, Conto conto, SoggettoCondominio soggetto, decimal? importo, int giorni, TipoDettaglioSubentro tipo)
        {
            Subentro = subentro;
            Conto = conto;
            Soggetto = soggetto;
            Importo = importo;
            Giorni = giorni;
            Tipo = tipo;

            if (Subentro != null)
                Subentro.Dettagli.Add(this);
        }
        /// <summary>
        /// Crea il dettaglio di ripartizione conti per un modello di ripartizione
        /// </summary>
        public ContiModelloRegistrazioneContabile(ModelloRegistrazioneContabile modello, Conto contoRiferimento, SottoConto sottoContoRiferimento, decimal? percentuale, LogTransazione logTransazione)
        {
            if (modello != null)
            {
                _modello = modello;
                _contoRiferimento = contoRiferimento;
                _sottoContoRiferimento = sottoContoRiferimento;
                _percentualeRipartizione = percentuale;
                _modello.Conti.Add(this);
            }

            if (LogTransazione != null)
                LogTransazione.ContiModelliContabili.Add(this);
        }
示例#11
0
        public TestataMovimentoContabile SetMovimentiAddebitoCompetenze(Esercizio esercizio, AddebitoCompetenza addebito, DateTime dataRegistrazione, Conto conto, SottoConto sottoConto, string descrizione)
        {
            try
            {
                // controllo data registrazione
                var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
                if (message.Count > 0)
                {
                    var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
                    _log.ErrorFormat("Data di registrazione non valida - {0} - data:{1} - addebito:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), dataRegistrazione, addebito.ID, esercizio.ID);
                    throw ex;
                }

                // se la testata è automatica non è possibile aggiornare gli importi nel dettaglio, se manuale è possibile l'aggiornamento.
                // per ora la testata viene inserita come manuale.
                //TestataMovimentoContabile testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, Sfera.Enums.TipoTestataMovimentoContabileEnum.Automatica);
                var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Manuale, null) {Descrizione = descrizione, IsAllowUpdate = true};

                var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("IA");
                var numeroRiga = 0;

                // Contropartita
                numeroRiga++;
                var contoContropartita = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, "913");
                new MovimentoContabile(testata, causale, numeroRiga, contoContropartita, addebito.Dettaglio.Sum(item => item.Importo), "A") {Descrizione = descrizione};

                foreach (var item in addebito.Dettaglio)
                {
                    try
                    {
                        numeroRiga++;
                        var movimento = new MovimentoContabile(testata, causale, numeroRiga, conto, item.Importo, "D")
                        {
                            SottoContoRiferimento = sottoConto,
                            Descrizione = descrizione,
                            CondominoRiferimento = item.Soggetto
                        };
                        item.MovimentoContabile = movimento;
                    
                        switch (item.Soggetto.Tipo)
                        {
                            case TipoSoggetto.Proprietario:
                                movimento.PercentualeProprieta = 1;
                                break;
                            case TipoSoggetto.Conduttore:
                                movimento.PercentualeProprieta = 0;
                                break;
                        }

                        movimento.IsRipartoPersonalizzato = true;
                        new SpeseUnita(item.Importo, null, item.Soggetto, movimento);

                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato nella creazione del movimento di addebito competenze per sollecito - SINGOLO DETTAGLIO - {0} - item:{1}", ex, Utility.GetMethodDescription(), item.ID);
                        throw;
                    }
                }

                addebito.TestataMovimento = testata;
                _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

                return testata;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella creazione del movimento di addebito competenze per sollecito - {0} - esercizio:{1} - dataRegistrazione:{2} - addebito:{3} - conto:{4} - sottoconto:{5} - descrizione:{6}", ex, Utility.GetMethodDescription(), esercizio != null ? esercizio.ID.ToString() : "<NULL>", dataRegistrazione, addebito != null ? addebito.ID.ToString() : "<NULL>", conto != null ? conto.ID.ToString() : "<NULL>", sottoConto != null ? sottoConto.ID.ToString() : "<NULL>", descrizione);
                throw;
            }
        }
示例#12
0
        public string SetMovimentoAccreditoInteressiMora(Esercizio esercizio, TestataMovimentoContabile testata, Conto conto, string descrizione, decimal importo, DateTime dataRegistrazione)
        {
            try
            {
                var message = string.Empty;

                var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("RI");
                if (testata == null)
                    testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null) {IsAllowUpdate = true};

                // controllo data registrazione
                var messageData = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, testata.DataRegistrazione.GetValueOrDefault());
                if (messageData.Count > 0)
                {
                    var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", testata.DataRegistrazione.GetValueOrDefault()));
                    _log.ErrorFormat("Data di registrazione non valida - {0} - data:{1} - conto:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), testata.DataRegistrazione.GetValueOrDefault(), conto.ID, esercizio.ID);
                    throw ex;
                }

                var movimento = new MovimentoContabile(testata, causale, testata.Movimenti.Count() + 1, conto, importo, "A") {Descrizione = descrizione};
                _ripartizioneService.ReloadRipartizioneByMovimento(movimento);

                return message;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella creazione del movimento di accredito per interessi di mora - {0} - esercizio:{1}", ex, Utility.GetMethodDescription(), esercizio.ID);
                throw;
            }
        }
示例#13
0
        public TestataMovimentoContabile SetMovimentiSollecito(Esercizio esercizio, IList<Sollecito> solleciti, DateTime dataRegistrazione, Conto conto, SottoConto sottoconto)
        {
            try
            {
                // controllo data registrazione
                var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
                if (message.Count > 0)
                {
                    var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
                    _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - conto:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), dataRegistrazione, conto.ID, esercizio.ID);
                    throw ex;
                }

                var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null)
                {
                    Descrizione = "Addebito solleciti del " + dataRegistrazione.ToShortDateString(),
                    IsAllowUpdate = true
                };

                var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("IA");
                var numeroRiga = 0;

                // Contropartita
                numeroRiga++;
                var contoContropartita = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, "913");
                new MovimentoContabile(testata, causale, numeroRiga, contoContropartita, solleciti.Sum(item => item.ImportoCompetenza.GetValueOrDefault()), "A");

                foreach (var soll in solleciti)
                {
                    numeroRiga++;
                    var movimento = new MovimentoContabile(testata, causale, numeroRiga, conto, soll.ImportoCompetenza, "D") {SottoContoRiferimento = sottoconto};
                    if (soll.Soggetto != null)
                        movimento.CondominoRiferimento = soll.Soggetto;
                    soll.MovimentoEconomico = movimento;

                    movimento.IsRipartoPersonalizzato = true;

                    var soggetto = soll.Soggetto ?? soll.Persona.SoggettiCondominio.FirstOrDefault(item => item.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID == soll.Esercizio.CondominioRiferimento.ID);
                    if (soggetto != null)
                    {
                        movimento.CondominoRiferimento = soggetto;
                        switch (soggetto.Tipo)
                        {
                            case TipoSoggetto.Proprietario:
                                movimento.PercentualeProprieta = 1;
                                break;
                            case TipoSoggetto.Conduttore:
                                movimento.PercentualeProprieta = 0;
                                break;
                        }
                        new SpeseUnita(soll.ImportoCompetenza, null, soggetto, movimento);
                    }
                }

                _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

                return testata;
            }
            catch (Exception ex)
            {
                
                _log.Fatal("Errore inaspettato nella creazione del movimento di addebito competenze per sollecito - " + Utility.GetMethodDescription() + " - IdEsercizio:" + esercizio.ID.ToString(), ex);
                throw;
            }
        }
示例#14
0
        public TestataMovimentoContabile SetMovimentoSpesaPersonale(Esercizio esercizio, TestataMovimentoContabile testata, SoggettoCondominio soggetto, Conto conto, string descrizione, decimal importo, DateTime dataRegistrazione)
        {
            var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("IA");
            if (testata == null)
            {
                testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null) {Descrizione = "Calcolo interessi di mora", IsAllowUpdate = true};
            }

            // controllo data registrazione
            var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, testata.DataRegistrazione.GetValueOrDefault());
            if (message.Count > 0)
            {
                var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", testata.DataRegistrazione.GetValueOrDefault()));
                _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - soggetto:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), testata.DataRegistrazione.GetValueOrDefault(), soggetto.ID, esercizio.ID);
                throw ex;
            }

            var movimento = new MovimentoContabile(testata, causale, testata.Movimenti.Count() + 1, conto, importo, "D") {Descrizione = descrizione};
            switch (soggetto.Tipo)
            {
                case TipoSoggetto.Proprietario:
                    movimento.PercentualeProprieta = 1;
                    break;
                case TipoSoggetto.Conduttore:
                    movimento.PercentualeProprieta = 0;
                    break;
            }

            movimento.IsRipartoPersonalizzato = true;
            new SpeseUnita(importo, null, soggetto, movimento);

            _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

            return testata;
        }
示例#15
0
        public TestataMovimentoContabile SetMovimentiContatoreCondominiale(Esercizio esercizio, IList<ImportoMovimento> importiAccredito, IList<ImportiDTO> addebitiContatoriDivisionali, DateTime dataRegistrazione, Conto contoAddebito, SottoConto sottoContoAddebito, string descrizione)
        {
            // controllo data registrazione
            var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
            if (message.Count > 0)
            {
                var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
                _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), dataRegistrazione, esercizio.ID);
                throw ex;
            }

            var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null)
            {
                Descrizione = descrizione,
                IsAbilitataArchiviazioneOttica = false,
                IsAllowUpdate = true
            };
            _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

            var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("SC");

            // -------------------------------------------------
            // Calcolo Importo
            // ------------------------------------------------
            var importo = importiAccredito.Sum(item => item.Importo);

            // -------------------------------------------------
            // Segno Movimento
            // ------------------------------------------------
            var segnoContoEconomico = "D";
            if (importo < 0)
            {
                segnoContoEconomico = "A";
                importo = importo * -1;
            }

            // ------------------------------------------------
            // Conto economico da addebitare
            // ------------------------------------------------
            var movimentoContoEconomicoAddebito = new MovimentoContabile(testata, causale, 1, contoAddebito, importo, segnoContoEconomico)
            {
                SottoContoRiferimento = sottoContoAddebito,
                Descrizione = descrizione,
                IsRipartoPersonalizzato = true
            };
            _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAddebito);

            // ------------------------------------------------
            // Conto economico da accreditare
            // ------------------------------------------------
            foreach (var item in importiAccredito)
            {
                var movimentoContoEconomicoAccredito = new MovimentoContabile(testata, causale, 2, _daoFactory.GetContoDao().GetById(item.IdConto, false), item.Importo, invertiSegno(segnoContoEconomico)) { Descrizione = descrizione, IsRipartoPersonalizzato = true };
                if(item.IdSottoConto > 0)
                    movimentoContoEconomicoAccredito.SottoContoRiferimento = _daoFactory.GetSottoContoDao().GetById(item.IdSottoConto.GetValueOrDefault(), false);
                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAccredito);

                // Ripartizione tra le unità immobiliari
                var totaleMillesimi = addebitiContatoriDivisionali.Sum(mill => mill.Importo);
                foreach (var importiDTO in addebitiContatoriDivisionali)
                {
                    var unita = _daoFactory.GetUnitaImmobiliareDao().GetById(importiDTO.Id, false);
                    var importoUnita = (movimentoContoEconomicoAccredito.GetImportoConSegno() * importiDTO.Importo) / totaleMillesimi;
                    var spesaUnita = new SpeseUnita(importoUnita, unita, null, movimentoContoEconomicoAccredito);
                    _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(spesaUnita);

                }
            }

            return testata;
        }
示例#16
0
 public AperturaEsercizio(AnnoGestionale annoGestionale, Esercizio esercizio, Conto contoVersamentoCondomini)
 {
     AnnoGestionale = annoGestionale;
     Esercizio = esercizio;
     ContoVersamentoCondomini = contoVersamentoCondomini;
 }
示例#17
0
        public IList<TestataMovimentoContabile> SetMovimentiVersamentoCondomino(TestataMovimentoContabile testata, MovimentoContabile movimentoPatrimonialeAttivo, Esercizio esercizio, VersamentoSoggetto versamento, DateTime dataRegistrazione, CausaleContabile causale, Conto contoVersamentoCondomini, int? idMovimentoBancario, FileCBI file, LogTransazione logTransazione)
        {
            var testate = new List<TestataMovimentoContabile>();
            if(causale == null)
                causale = _daoFactory.GetCausaleContabileDao().GetByCodice("RR");
            if (contoVersamentoCondomini == null)
                contoVersamentoCondomini = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoVersamentiCondomini());
            bool evasioneBancaria = false;
            
            // ================================================================================
            //  Registrazione Movimenti Contabili per Versamento Condomino
            // ================================================================================
            var rateVersate = string.Empty;
            foreach (var versamentoRata in versamento.Rate)
            {
                if (!string.IsNullOrEmpty(rateVersate))
                    rateVersate += ", ";
                rateVersate += versamentoRata.Rata.PianoRatealeDettaglio.Progressivo;
            }
            if (!string.IsNullOrEmpty(rateVersate))
                rateVersate = "(" + rateVersate + ")";

            var descrizione = $"Versamento Rata di {versamento.Soggetto.DisplayName} {rateVersate}";
            
            // ------------------------------------------------
            // Testata
            // ------------------------------------------------
            if (testata == null)
            {
                testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, file, logTransazione)
                {
                    Descrizione = descrizione
                };
            }

            testate.Add(testata);
            var message = IsAllowDataRegistrazione(new List<int>(), testata.EsercizioRiferimento, testata.DataRegistrazione.GetValueOrDefault());
            if (message.Count > 0)
            {
                var ex = new InvalidDataException($"La data di registrazione {testata.DataRegistrazione.GetValueOrDefault()} non è valida");
                _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - versamento:{2} - message:{3}", ex, Utility.GetMethodDescription(), testata.DataRegistrazione.GetValueOrDefault(), versamento.ID, message.Aggregate(string.Empty, (current, str) => current + string.Format("{0}{1}", message, Environment.NewLine)));
                throw ex;
            }

            var numeroRiga = testata.Movimenti.Count;

            // ------------------------------------------------
            // Crediti V/S Condomini - a Saldo
            // ------------------------------------------------
            numeroRiga++;
            var movimentoPatrimoniale = new MovimentoContabile(testata, causale, numeroRiga, contoVersamentoCondomini, versamento.Importo, "A")
            {
                CondominoRiferimento = versamento.Soggetto, 
                Descrizione = descrizione
            };

            // ------------------------------------------------
            // Banca / Cassa
            // ------------------------------------------------
            if (movimentoPatrimonialeAttivo == null)
            {
                evasioneBancaria = true;
                numeroRiga++;
                movimentoPatrimonialeAttivo = new MovimentoContabile(testata, causale, numeroRiga, versamento.ContoPatrimoniale, versamento.Importo, "D")
                {
                    Descrizione = descrizione,
                    SottoContoRiferimento = versamento.SottoContoPatrimoniale,
                    ContoCorrenteBancario = versamento.ContoBancario,
                    NumeroAssegno = versamento.NumeroAssegno
                };
            }
            else
                movimentoPatrimonialeAttivo.Importo = movimentoPatrimonialeAttivo.GetImportoSenzaSegno() + versamento.Importo;

            // ================================================================================
            //  SOLO ESERCIZI ORDINARI
            //  Se la data di registrazione è successiva alla data di chiusura dell'esercizio
            //  registro i movimenti, usando un contro transitorio, che permette di rilevare
            //  il versamento nello stato patrimoniale dell'esercizio.
            // ================================================================================
            if (versamento.TipoVersamentoDopoChiusura.GetValueOrDefault() == TipoVersamentoDopoChiusuraEnum.Giroconto  && esercizio.Gestione == GestioneEsercizioEnum.Ordinario)
            {
                var esercizioPrecedente = esercizio.GetEsercizioPrecedente();
                if (esercizioPrecedente != null)
                {
                    var causaleVersamentiCondominiDopoChiusura = _daoFactory.GetCausaleContabileDao().GetByCodice("VS");
                    var contoVersamentiDopoChiusura = _pianoContiService.GetContoVersamentiSuccessiviAllaChiusura(esercizio);
                    try
                    {
                        if (movimentoPatrimoniale.CondominoRiferimento != null)
                        {
                            var descrizioneStorno = string.Format("Versamento dopo data chiusura - {0} del {1} {2}", movimentoPatrimoniale.CondominoRiferimento.DisplayName, movimentoPatrimoniale.Testata.DataRegistrazione.GetValueOrDefault().ToShortDateString(), rateVersate);

                            // ---------------------------------------------------------------------------------------
                            // Movimenti per storno e riconoscimento versamenti ai condomini
                            // Nuova testata nell'esercizio precedente per registrare lo storno
                            // ---------------------------------------------------------------------------------------
                            var numeroRigaStorno = 0;
                            var testataStorno = new TestataMovimentoContabile(esercizioPrecedente, esercizioPrecedente.DataChiusura, TipoTestataMovimentoContabileEnum.Automatica, file, logTransazione)
                            {
                                Descrizione = descrizioneStorno
                            };
                            testate.Add(testataStorno);

                            numeroRigaStorno++;
                            var movimentoVersamento = new MovimentoContabile(testataStorno, causaleVersamentiCondominiDopoChiusura, numeroRigaStorno, movimentoPatrimoniale.ContoRiferimento, movimentoPatrimoniale.Importo, movimentoPatrimoniale.Segno)
                            {
                                CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                Descrizione = descrizioneStorno
                            };

                            numeroRigaStorno++;
                            var movimentoContoTemporaneo = new MovimentoContabile(testataStorno, causaleVersamentiCondominiDopoChiusura, numeroRigaStorno, contoVersamentiDopoChiusura, movimentoPatrimoniale.Importo, invertiSegno(movimentoPatrimoniale.Segno))
                            {
                                CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                Descrizione = descrizioneStorno
                            };

                            // ---------------------------------------------------------------------------------------
                            // Nella stessa testata del versamento originale aggiungo il movimento di chiusura del conto temporaneo
                            // ---------------------------------------------------------------------------------------
                            numeroRiga++;
                            var descrizioneChiusuraStorno = string.Format("Chiusura dello storno del versamento dopo data chiusura - {0} del {1} {2}", movimentoPatrimoniale.CondominoRiferimento.DisplayName, movimentoPatrimoniale.Testata.DataRegistrazione.GetValueOrDefault().ToShortDateString(), rateVersate);
                            var movimentoVersamentoChiusura = new MovimentoContabile(testata, causaleVersamentiCondominiDopoChiusura, numeroRiga, movimentoPatrimoniale.ContoRiferimento, movimentoPatrimoniale.Importo, invertiSegno(movimentoPatrimoniale.Segno))
                            {
                                CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                Descrizione = descrizioneChiusuraStorno
                            };

                            numeroRiga++;
                            var movimentoContoTemporaneoChiusura = new MovimentoContabile(testata, causaleVersamentiCondominiDopoChiusura, numeroRiga, contoVersamentiDopoChiusura, movimentoPatrimoniale.Importo, movimentoPatrimoniale.Segno)
                            {
                                CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                Descrizione = descrizioneChiusuraStorno
                            };
                            versamento.TestataMovimentoDopoChiusura = testataStorno;
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato durante la registrazione dei movimenti per i versamenti eseguiti dopo la chiusura - SINGOLO MOVIMENTO - {0} - esercizio:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), esercizio.ID, movimentoPatrimoniale.ID);
                        throw;
                    }
                }
                else
                {
                    _log.ErrorFormat("Esercizio precedente a null - {0} - versamento:{1} - esercizio:{2}", Utility.GetMethodDescription(), versamento.ID, esercizio.ID);
                }
            }

            // ================================================================================
            //  SOLO ESERCIZI ORDINARI - bugid#6223
            //  Se la data di registrazione è antecedente alla data di apertura dell'esercizio
            //  registro i movimenti, usando un contro transitorio, che permette di rilevare
            //  il versamento nello stato patrimoniale dell'esercizio.
            // ================================================================================
            if (versamento.TipoVersamentoPrimaApertura.GetValueOrDefault() == TipoVersamentoPrimaAperturaEnum.Giroconto && esercizio.Gestione == GestioneEsercizioEnum.Ordinario)
            {
                var annoSuccessivo = _daoFactory.GetAnnoGestionaleDao().GetAnnoSuccessivo(esercizio.AnnoGestionale.ID);
                if (annoSuccessivo != null)
                {
                    if (annoSuccessivo.EsercizioOrdinario != null)
                    {
                        var causaleVersamentiCondominiPrimaApertura = _daoFactory.GetCausaleContabileDao().GetByCodice("VA");
                        var contoVersamentiPrecedentiAllaApertura = _pianoContiService.GetContoVersamentiPrecedentiAllaApertura(esercizio);
                        try
                        {
                            if (movimentoPatrimoniale.CondominoRiferimento != null)
                            {
                                var descrizioneStorno = string.Format("Versamento prima della data di apertura - {0} del {1} {2}", movimentoPatrimoniale.CondominoRiferimento.DisplayName, movimentoPatrimoniale.Testata.DataRegistrazione.GetValueOrDefault().ToShortDateString(), rateVersate);

                                // ---------------------------------------------------------------------------------------
                                // Movimenti per storno e riconoscimento versamenti ai condomini
                                // Nuova testata nell'esercizio successivo per registrare lo storno
                                // ---------------------------------------------------------------------------------------
                                var numeroRigaStorno = 0;
                                var testataStorno = new TestataMovimentoContabile(annoSuccessivo.EsercizioOrdinario, annoSuccessivo.EsercizioOrdinario.DataApertura, TipoTestataMovimentoContabileEnum.Automatica, file, logTransazione)
                                {
                                    Descrizione = descrizioneStorno
                                };
                                testate.Add(testataStorno);

                                numeroRigaStorno++;
                                var movimentoVersamento = new MovimentoContabile(testataStorno, causaleVersamentiCondominiPrimaApertura, numeroRigaStorno, movimentoPatrimoniale.ContoRiferimento, movimentoPatrimoniale.Importo, movimentoPatrimoniale.Segno)
                                {
                                    CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                    Descrizione = descrizioneStorno
                                };

                                numeroRigaStorno++;
                                var movimentoContoTemporaneo = new MovimentoContabile(testataStorno, causaleVersamentiCondominiPrimaApertura, numeroRigaStorno, contoVersamentiPrecedentiAllaApertura, movimentoPatrimoniale.Importo, invertiSegno(movimentoPatrimoniale.Segno))
                                {
                                    CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                    Descrizione = descrizioneStorno
                                };

                                // ---------------------------------------------------------------------------------------
                                // Nella stessa testata del versamento originale aggiungo il movimento di chiusura del conto temporaneo
                                // ---------------------------------------------------------------------------------------
                                numeroRiga++;
                                var descrizioneChiusuraStorno = string.Format("Chiusura dello storno del versamento prima della data di apertura - {0} del {1} {2}", movimentoPatrimoniale.CondominoRiferimento.DisplayName, movimentoPatrimoniale.Testata.DataRegistrazione.GetValueOrDefault().ToShortDateString(), rateVersate);
                                var movimentoVersamentoChiusura = new MovimentoContabile(testata, causaleVersamentiCondominiPrimaApertura, numeroRiga, movimentoPatrimoniale.ContoRiferimento, movimentoPatrimoniale.Importo, invertiSegno(movimentoPatrimoniale.Segno))
                                {
                                    CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                    Descrizione = descrizioneChiusuraStorno
                                };

                                numeroRiga++;
                                var movimentoContoTemporaneoChiusura = new MovimentoContabile(testata, causaleVersamentiCondominiPrimaApertura, numeroRiga, contoVersamentiPrecedentiAllaApertura, movimentoPatrimoniale.Importo, movimentoPatrimoniale.Segno)
                                {
                                    CondominoRiferimento = movimentoPatrimoniale.CondominoRiferimento,
                                    Descrizione = descrizioneChiusuraStorno
                                };
                                versamento.TestataMovimentoDopoChiusura = testataStorno;
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante la registrazione dei movimenti per i versamenti eseguiti dopo la chiusura - SINGOLO MOVIMENTO - {0} - esercizio:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), esercizio.ID, movimentoPatrimoniale.ID);
                            throw;
                        }                        
    
                    }
                }
                else
                {
                    _log.ErrorFormat("Esercizio successivo a null - {0} - versamento:{1} - esercizio:{2}", Utility.GetMethodDescription(), versamento.ID, esercizio.ID);
                }
            }

            // ================================================================================
            //  Evado il corrispondente Movimento Bancario
            // ================================================================================
            if (evasioneBancaria && idMovimentoBancario != null)
            {
                EvadiMovimento(string.Format("Evasione automatica per contabilizzazione versamento condomino del {0}", dataRegistrazione.ToShortDateString()), new List<MovimentoContabile> { movimentoPatrimonialeAttivo }, new List<int> { idMovimentoBancario.Value }, dataRegistrazione, logTransazione);
                _log.DebugFormat("Evasione automatica per contabilizzazione versamento condomino - {0} - movimento economico:{1} - movimento bancario:{2} - data registrazione:{3}", Utility.GetMethodDescription(), movimentoPatrimoniale.ID, idMovimentoBancario.GetValueOrDefault(), dataRegistrazione);
            }
            versamento.MovimentoContabilePatrimoniale = movimentoPatrimonialeAttivo;

            return testate;
        }
示例#18
0
 private decimal getMillesimoRiferimento(UnitaImmobiliare unitaImmobiliare, Conto contoMillesimiRiferimento)
 {
     decimal valoreMillesimo = 0;
     if (contoMillesimiRiferimento != null)
     {
         var millesimo = _daoFactory.GetMillesimoDao().GetByContoSoggetto(contoMillesimiRiferimento.ID, unitaImmobiliare.ID);
         if (millesimo != null)
             valoreMillesimo = millesimo.Valore.GetValueOrDefault();
     }
     return valoreMillesimo;
 }
示例#19
0
        public decimal? GetRipartoImporto(UnitaImmobiliare unita, Conto conto, decimal importo, IList<MillesimoDTO> millesimi, Esercizio esercizio, IList<int> idUnitaImmobiliari)
        {
            try
            {
                decimal? importoRiparto = null;

                if (conto != null && unita != null)
                {
                    // Totale Millesimi
                    decimal totaleMillesimi;
                    int numeroMillesimi;
                    decimal? valore = null;
                    if (millesimi == null)
                    {
                        var millesimi2 = GetByConto(conto, null, null, esercizio);
                        if(idUnitaImmobiliari != null)
                            millesimi2 = millesimi2.Where(item => idUnitaImmobiliari.Contains(item.IdUnitaRiferimento)).ToList();

                        totaleMillesimi = millesimi2.Sum(mill => mill.Valore.GetValueOrDefault());
                        numeroMillesimi = millesimi2.Count;
                        var millesimo = _daoFactory.GetMillesimoDao().GetByContoSoggetto(conto.ID, unita.ID);
                        if(millesimo != null)
                            valore = millesimo.Valore;
                    }
                    else
                    {
                        totaleMillesimi = millesimi.Sum(mill => mill.Valore.GetValueOrDefault());
                        numeroMillesimi = millesimi.Count;
                        var millesimo = (millesimi.Where(mill => mill.IdContoRiferimento == conto.ID && mill.IdUnitaRiferimento == unita.ID)).SingleOrDefault();
                        if (millesimo != null)
                            valore = millesimo.Valore;
                    }

                    if (valore != null)
                    {
                        if (totaleMillesimi != 0)
                        {
                            var valoreMillesimo = (valore.GetValueOrDefault() * 1000) / totaleMillesimi;
                            importoRiparto = (importo * valoreMillesimo) / 1000m;
                        }
                        else
                            importoRiparto = importo / numeroMillesimi;
                    }
                }
                else
                {
                    _log.WarnFormat("Conto o Unità a NULL - {0} - unità:{1} - conto:{2} - importo:{3} - esercizio:{4}", Utility.GetMethodDescription(), unita?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", conto?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", importo, esercizio?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>");
                }

                return importoRiparto;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel calcolo del riparto dell'importo - {0} - unità:{1} - conto:{2} - importo:{3} - esercizio:{4}", ex, Utility.GetMethodDescription(), unita?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", conto?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", importo, esercizio?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>");
                throw;
            }
        }
示例#20
0
        public virtual Conto ConvertToConto(Condominio condominio)
        {
            var conto = new Conto(condominio, Tipo, TipoPeriodoCompetenzaContabile.Esercizio, Descrizione, Ripartizione, UtilizzabileRegistrazioneSpese, UtilizzabileVersamentoCondomini)
            {
                DescrizioneBilancio = DescrizioneBilancio,
                Codice = Codice,
                PercentualeProprieta = PercentualeProprieta,
                PresenteBilancio = PresenteBilancio,
                Ordine = Ordine,
                UtilizzabilePagamentoFornitori = UtilizzabilePagamentoFornitori,
                CustomField = CustomField,
                IsSpesePersonali = IsSpesePersonali,
                IsLiquido = IsLiquido
            };

            foreach (var pianoSottoConto in SottoConti)
            {
                var sottoConto = pianoSottoConto.ConvertToSottoConto(conto);
                sottoConto.CustomField = pianoSottoConto.CustomField;
                conto.SottoConti.Add(sottoConto);
            }

            return conto;
        }
示例#21
0
 public virtual SottoConto ConvertToSottoConto(Conto conto)
 {
     return new SottoConto(conto, Descrizione) { Codice = Codice };
 }
示例#22
0
        private Conto loadContoSottoconto(DataRow row, Condominio condominio, Conto conto, Dictionary<int, Conto> loadedConti, string prefix, ref int indexConto)
        {
            int psConto = int.Parse(row["PS_CONTO"].ToString());
            if (psConto <= 20)
            {
                if (int.Parse(row["PS_SOTTOC"].ToString()) == 0)
                {
                    if (row["PS_DES_CONTO"] != DBNull.Value && !string.IsNullOrEmpty(row["PS_DES_CONTO"].ToString()))
                    {
                        var nomeConto = String.Concat(prefix, ((string)row["PS_DES_CONTO"]).Trim());
                        if(nomeConto.Length > 50)
                            nomeConto = nomeConto.Substring(0, 50);
                        conto = new Conto(condominio, TipoContoEconomicoEnum.Economico, TipoPeriodoCompetenzaContabile.Esercizio, nomeConto, true, true, false) {PresenteBilancio = true, CodiceImportazione = psConto.ToString()};

                        indexConto = indexConto + 10;
                        conto.Ordine = indexConto;
                        conto.Codice = conto.Ordine.ToString().PadLeft(3, '0');

                        loadedConti.Add(psConto, conto);
                    }
                }
                else if (conto != null)
                {
                    if (row["PS_DES_SOTTOC"] != DBNull.Value && !string.IsNullOrEmpty(row["PS_DES_SOTTOC"].ToString()))
                    {
                        var indexSottoConto = 0;
                        var ultimoSottoconto = conto.SottoConti.OrderBy(item => item.Codice).LastOrDefault();
                        if (ultimoSottoconto != null)
                            indexSottoConto = int.Parse(ultimoSottoconto.Codice.Split('.')[1]) + 1;

                        new SottoConto(conto, (string) row["PS_DES_SOTTOC"])
                            {
                                Codice = conto.Codice + "." + indexSottoConto.ToString().PadLeft(3, '0'),
                                CodiceImportazione = row["PS_SOTTOC"].ToString()
                            };
                    }
                }
            }

            return conto;
        }
示例#23
0
        public int CalcolaGiorniCompetenza(Esercizio esercizio, Conto conto, DateTime dataIniziale, DateTime dataFinale)
        {
            try
            {
                var result = 0;
                if(conto != null && esercizio != null)
                {
                    var periodoCompetenza = GetPeriodoCompetenza(conto.TipoCompetenza, esercizio, conto.DataInizioCompetenza, conto.DataFineCompetenza);
                    var dataInizioCompetenza = periodoCompetenza.DataInizioCompetenza;
                    var dataFineCompetenza = periodoCompetenza.DataFineCompetenza;
                    if (dataFineCompetenza < dataInizioCompetenza)
                        dataFineCompetenza = dataFineCompetenza.AddYears(1);

                    // Loop per tutti i giorni dell'intervallo per calcolare i giorni di competenza
                    var data = dataIniziale;
                    while (data <= dataFinale)
                    {
                        if (controlloCompetenzaData(data, dataInizioCompetenza, dataFineCompetenza))
                            result++;
                        data = data.AddDays(1);
                    }
                }

                return result;
            }
            catch (Exception ex)
            {
                var idConto = "<NULL>";
                if (conto != null)
                    idConto = conto.ID.ToString();

                var idEsercizio = "<NULL>";
                if (esercizio != null)
                    idEsercizio = esercizio.ID.ToString();

                _log.ErrorFormat("Errore inaspettato durante il calcolo dei giorni di competenza - {0} - esercizio:{1} - conto:{2} - dataIniziale:{3} - dataFinale:{4}", ex, Library.Utility.GetMethodDescription(), idEsercizio, idConto, dataIniziale, dataFinale);
                throw;
            }
        }
示例#24
0
        public Conto GetContoVersamentiPrecedentiAllaApertura(Esercizio esercizio)
        {
            var conto = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, GetCodiceContoVersamentiPrecedentiAllaApertura());
            if (conto == null)
            {
                conto = new Conto(esercizio.CondominioRiferimento, TipoContoEconomicoEnum.Patrimoniale, TipoPeriodoCompetenzaContabile.Esercizio, "Versamenti di competenza esercizio successivo", false, false, false)
                {
                    CustomField = false,
                    Codice = GetCodiceContoVersamentiPrecedentiAllaApertura()
                };

                _daoFactory.GetContoDao().SaveOrUpdate(conto);
            }

            return conto;
        }
示例#25
0
        public Conto GetContoChiusuraStraordinario(Esercizio esercizio)
        {
            var conto = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, GetCodiceContoChiusuraTemporaneaStraordinari());
            if (conto == null)
            {
                conto = new Conto(esercizio.CondominioRiferimento, TipoContoEconomicoEnum.Patrimoniale, TipoPeriodoCompetenzaContabile.Esercizio, string.Format("Bilancio di apertura: {0}", esercizio.DisplayName), false, false, false)
                {
                    CustomField = false,
                    Codice = GetCodiceContoChiusuraTemporaneaStraordinari()
                };

                _daoFactory.GetContoDao().SaveOrUpdate(conto);
            }

            return conto;
        }
示例#26
0
        public Conto GetContoArrotondamenti(Esercizio esercizio)
        {
            var conto = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, GetCodiceContoArrontondamenti());
            if (conto == null)
            {
                conto = new Conto(esercizio.CondominioRiferimento, TipoContoEconomicoEnum.Patrimoniale, TipoPeriodoCompetenzaContabile.Esercizio, "Arrotondamenti", false, true, false)
                {
                    CustomField = false,
                    Codice = GetCodiceContoArrontondamenti(),
                    IsArrotondamento = true
                };
            }

            return conto;
        }
 /// <summary>
 /// Crea una ripartizione tra i diversi soggetti valida
 /// </summary>
 public SoggettoCondominioRipartizione(Conto conto, SoggettoCondominio soggetto, decimal percentualeRipartizione)
 {
     Conto = conto;
     Soggetto = soggetto;
     PercentualeRipartizione = percentualeRipartizione;
 }
示例#28
0
        public TestataMovimentoContabile SetMovimentiRitenuta(Pagamento pagamento, Ritenuta ritenuta, Conto contoPatrimoniale, int? idSottoConto, DateTime dataRegistrazione, string descrizione, string descrizioneAddebitoInteressi, string descrizioneAddebitoSanzioni, decimal? importo)
        {
            var esercizio = _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(pagamento.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento, dataRegistrazione);
            if (esercizio == null || esercizio.Stato == StatoEsercizioEnum.Chiuso)
            {
                throw new InvalidDataException(string.Format("La data di registrazione {0:d} del versamento della ritenuta per {1:c} non è valida per il condominio:'{2}' perchè non è stato trovato un esercizio aperto di competenza", dataRegistrazione, ritenuta.Importo, pagamento.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName));
            }

            var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
            if (message.Count == 0)
            {
                var numeroRiga = 0;
                var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("VR");

                var importoRitenuta = ritenuta.Importo.GetValueOrDefault();
                if (importo != null)
                    importoRitenuta = importo.Value;
                importoRitenuta = Math.Round(importoRitenuta, 2);

                // ------------------------------------------------
                // Testata
                // ------------------------------------------------
                var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null) { SpesaRiferimento = pagamento.ScadenzaRiferimento.SpesaRiferimento };
                _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

                var contoRitenuta = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoRitenuta());

                var spesa = pagamento.ScadenzaRiferimento.SpesaRiferimento;
                var firstDettaglio = spesa.Dettagli.FirstOrDefault();
                TestataMovimentoContabile testataFattura = null;
                if (firstDettaglio != null)
                {
                    var firstMovimento = firstDettaglio.Movimenti.FirstOrDefault();
                    if (firstMovimento != null)
                        testataFattura = firstMovimento.Testata;
                }

                // ------------------------------------------------
                // Interessi per Ravvedimento Operoso
                // ------------------------------------------------
                if (ritenuta.ImportoInteressi > 0)
                {
                    if (testataFattura != null && !testataFattura.AperturaBilancio)
                    {
                        foreach (var dettaglio in spesa.Dettagli)
                        {
                            if (dettaglio.Movimenti.Count > 0)
                            {

                                foreach (var movimento in dettaglio.Movimenti)
                                {
                                    var importoMovimento = movimento.GetImportoConSegno().GetValueOrDefault();
                                    if (movimento.ContoRiferimento.Tipo == TipoContoEconomicoEnum.Patrimoniale)
                                        importoMovimento = importoMovimento * -1;

                                    numeroRiga++;
                                    var interesseCompetenza = ritenuta.ImportoInteressi.GetValueOrDefault();
                                    if (spesa.ImportoLordo != 0)
                                        interesseCompetenza = (ritenuta.ImportoInteressi.GetValueOrDefault() * importoMovimento) / spesa.ImportoLordo;
                                    var movimentoInteresse = new MovimentoContabile(testata, causale, numeroRiga, movimento.ContoRiferimento, interesseCompetenza, "D")
                                    {
                                        SottoContoRiferimento = movimento.SottoContoRiferimento,
                                        FornitoreRiferimento = movimento.FornitoreRiferimento
                                    };

                                    if (!string.IsNullOrEmpty(descrizioneAddebitoInteressi))
                                        movimentoInteresse.Descrizione = descrizioneAddebitoInteressi.Replace("<DescrizioneSpesa>", movimento.GetDescrizione());

                                    _ripartizioneService.CloneRipartizioneByMovimento(movimentoInteresse, movimento);

                                    _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoInteresse);
                                }
                            }
                            else
                            {
                                numeroRiga++;
                                var movimentoInteresse = new MovimentoContabile(testata, causale, numeroRiga, contoRitenuta, ritenuta.ImportoInteressi, "D")
                                {
                                    FornitoreRiferimento = spesa.FornitoreRiferimento,
                                    Descrizione = "Interesse versamento ritenuta"
                                };

                                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoInteresse);
                            }

                        }                        
                    }
                    else
                    {
                        numeroRiga++;
                        var sottoContoInteressiSanzioni = _daoFactory.GetSottoContoDao().GetInteressiSanzioniByEsercizio(testata.EsercizioRiferimento.ID, testata.EsercizioRiferimento.CondominioRiferimento.ID);
                        if (sottoContoInteressiSanzioni != null)
                        {
                            var movimentoInteresse = new MovimentoContabile(testata, causale, numeroRiga, sottoContoInteressiSanzioni.ContoRiferimento, ritenuta.ImportoInteressi, "D")
                            {
                                SottoContoRiferimento = sottoContoInteressiSanzioni,
                                FornitoreRiferimento = spesa.FornitoreRiferimento,
                                Descrizione = "Interesse versamento ritenuta"
                            };

                            _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoInteresse);
                        }
                        else
                        {
                            ritenuta.ImportoInteressi = 0;
                        }
                        
                    }

                }

                // ------------------------------------------------
                // Sanzione per Ravvedimento Operoso
                // ------------------------------------------------
                if (ritenuta.ImportoSanzione > 0)
                {
                    if (testataFattura != null && !testataFattura.AperturaBilancio)
                    {
                        foreach (var dettaglio in spesa.Dettagli)
                        {
                            if (dettaglio.Movimenti.Count > 0)
                            {

                                foreach (var movimento in dettaglio.Movimenti)
                                {
                                    var importoMovimento = movimento.GetImportoConSegno().GetValueOrDefault();
                                    if (movimento.ContoRiferimento.Tipo == TipoContoEconomicoEnum.Patrimoniale)
                                        importoMovimento = importoMovimento*-1;

                                    numeroRiga++;
                                    var sanzioneCompetenza = ritenuta.ImportoSanzione.GetValueOrDefault();
                                    if (spesa.ImportoLordo != 0)
                                        sanzioneCompetenza = (ritenuta.ImportoSanzione.GetValueOrDefault()*
                                                              importoMovimento)/spesa.ImportoLordo;
                                    var movimentoSanzione = new MovimentoContabile(testata, causale, numeroRiga,
                                        movimento.ContoRiferimento, sanzioneCompetenza, "D")
                                    {
                                        SottoContoRiferimento = movimento.SottoContoRiferimento,
                                        FornitoreRiferimento = movimento.FornitoreRiferimento
                                    };

                                    if (!string.IsNullOrEmpty(descrizioneAddebitoSanzioni))
                                        movimentoSanzione.Descrizione = descrizioneAddebitoSanzioni.Replace("<DescrizioneSpesa>", movimento.GetDescrizione());

                                    _ripartizioneService.CloneRipartizioneByMovimento(movimentoSanzione, movimento);

                                    _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoSanzione);
                                }
                            }
                            else
                            {
                                numeroRiga++;
                                var movimentoSanzione = new MovimentoContabile(testata, causale, numeroRiga, contoRitenuta, ritenuta.ImportoSanzione, "D")
                                {
                                    FornitoreRiferimento = spesa.FornitoreRiferimento,
                                    Descrizione = "Sanzione versamento ritenuta"
                                };

                                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoSanzione);
                            }
                        }
                    }
                    else
                    {
                        numeroRiga++;
                        var sottoContoInteressiSanzioni = _daoFactory.GetSottoContoDao().GetInteressiSanzioniByEsercizio(testata.EsercizioRiferimento.ID, testata.EsercizioRiferimento.CondominioRiferimento.ID);
                        if (sottoContoInteressiSanzioni != null)
                        {
                            var movimentoSanzione = new MovimentoContabile(testata, causale, numeroRiga, sottoContoInteressiSanzioni.ContoRiferimento, ritenuta.ImportoSanzione, "D")
                            {
                                SottoContoRiferimento = sottoContoInteressiSanzioni,
                                FornitoreRiferimento = spesa.FornitoreRiferimento,
                                Descrizione = "Sanzione versamento ritenuta"
                            };

                            _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoSanzione);
                        }
                        else
                        {
                            ritenuta.ImportoSanzione = 0;
                        }
                    }
                }

                // ------------------------------------------------
                // Ritenuta
                // ------------------------------------------------
                numeroRiga++;
                var movimentoPatrimoniale = new MovimentoContabile(testata, causale, numeroRiga, contoRitenuta, importoRitenuta, "D")
                {
                    FornitoreRiferimento = pagamento.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento,
                    Descrizione = "Ritenuta " + pagamento.GetDescrizione()
                };
                if (!string.IsNullOrEmpty(descrizione))
                    movimentoPatrimoniale.Descrizione += " - " + descrizione;
                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoPatrimoniale);

                // ------------------------------------------------
                // Conto Patrimoniale
                // ------------------------------------------------
                numeroRiga++;

                var movimentoBancario = new MovimentoContabile(testata, causale, numeroRiga, contoPatrimoniale, importoRitenuta + ritenuta.ImportoInteressi.GetValueOrDefault() + ritenuta.ImportoSanzione.GetValueOrDefault(), "A")
                {
                    FornitoreRiferimento = movimentoPatrimoniale.FornitoreRiferimento,
                    Descrizione = movimentoPatrimoniale.Descrizione
                };
                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoBancario);

                if (idSottoConto != null)
                {
                    if (idSottoConto > 0)
                        movimentoBancario.SottoContoRiferimento = _daoFactory.GetSottoContoDao().GetById(idSottoConto.Value, false);
                    if (idSottoConto < 0)
                        movimentoBancario.ContoCorrenteBancario = _daoFactory.GetDatiBancariCondominiDao().GetById(idSottoConto.Value*-1, false);
                }

                if (contoPatrimoniale.Codice == _pianoContiService.GetCodiceContoBancario() &&
                    movimentoBancario.ContoCorrenteBancario == null)
                    movimentoBancario.ContoCorrenteBancario = esercizio.CondominioRiferimento.DatiBancariPrincipale;

                testata.Descrizione = movimentoPatrimoniale.Descrizione;
                ritenuta.MovimentoContabilePagamento = movimentoBancario;

                return testata;
            }

            var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
            
            _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - pagamento:{2} - conto:{3}", ex, Utility.GetMethodDescription(), dataRegistrazione, pagamento.ID, contoPatrimoniale.ID);
            throw ex;
        }
示例#29
0
        public IList<MillesimoDTO> GetByConto(Conto conto, List<int> stabili, List<int> gruppi, Esercizio esercizio)
        {
            IList<MillesimoDTO> millesimiDto = new List<MillesimoDTO>();
            if (conto.ContatoreRiferimento == null)
            {
                var millesimi = conto.GetMillesimiAttivi(stabili, gruppi);
                foreach (var millesimo in millesimi)
                {
                    try
                    {
                        if (millesimo.UnitaRiferimento.GruppoStabileRiferimento != null)
                        {
                            millesimiDto.Add(new MillesimoDTO
                            {
                                ID = millesimo.ID,
                                IdUnitaRiferimento = millesimo.UnitaRiferimento.ID,
                                IdGruppoRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.ID,
                                IdStabileRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.ID,
                                IdLottoRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento?.ID ?? 0,
                                IdContoRiferimento = conto.ID,
                                Valore = millesimo.Valore,
                                UnitaMisura = "PC"
                            });
                        }
                        else
                        {
                            throw new InvalidDataException($"L'unità immobiliare {millesimo.UnitaRiferimento.Ordine} - {millesimo.UnitaRiferimento.Descrizione} non è associata a nessuna scala");
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore nella creazione del dto di millesimo - {0} - id:{1}", ex, Utility.GetMethodDescription(), millesimo.ID);
                        throw;
                    }
                }
            }
            else
            {
                var dataIniziale = esercizio.DataApertura.GetValueOrDefault();
                //var esercizioPrecedente = esercizio.GetEsercizioPrecedente();
                //if (esercizioPrecedente != null)
                //    dataIniziale = esercizioPrecedente.DataChiusura.GetValueOrDefault();

                var letture = conto.ContatoreRiferimento.Letture.Where(
                    item =>
                    (item.Data == dataIniziale ||
                    item.Data == esercizio.DataChiusura.GetValueOrDefault()) &&
                    (
                        (stabili == null || stabili.Contains(item.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID)) &&
                        (gruppi == null || gruppi.Contains(item.UnitaImmobiliare.GruppoStabileRiferimento.ID))
                    )).ToList();

                foreach (var lettura in letture.Where(item => item.Data == dataIniziale))
                {
                    var valoreIniziale = lettura.Valore;
                    var letturaFinale = letture.FirstOrDefault(item => item.Data == esercizio.DataChiusura.GetValueOrDefault() && item.UnitaImmobiliare.ID == lettura.UnitaImmobiliare.ID);

                    var valoreFinale = 0m;
                    if (letturaFinale != null)
                        valoreFinale = letturaFinale.Valore;

                    // Cambio contatore rilevato
                    if (valoreFinale < valoreIniziale)
                        valoreIniziale = 0;

                    var dto = new MillesimoDTO
                    {
                        IdUnitaRiferimento = lettura.UnitaImmobiliare.ID,
                        InternoUnitaRiferimento = lettura.UnitaImmobiliare.InternoCompleto,
                        IdGruppoRiferimento = lettura.UnitaImmobiliare.GruppoStabileRiferimento.ID,
                        IdStabileRiferimento = lettura.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID,
                        IdLottoRiferimento = lettura.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento?.ID ?? 0, 
                        IdContoRiferimento = conto.ID,
                        DescrizioneContoRiferimento = conto.Descrizione,
                        CodiceConto = conto.Codice,
                        Valore = valoreFinale - valoreIniziale,
                        UnitaMisura = "MC",
                        ID = 0
                    };
                    millesimiDto.Add(dto);
                }
            }

            return millesimiDto;
        }
示例#30
0
 public RendicontoAnnualeConto(RendicontoAnnuale rendiconto, Conto conto, decimal? importo)
 {
     Rendiconto = rendiconto;
     ContoRiferimento = conto;
     Importo = importo;
 }