Ejemplo n.º 1
0
        /// <summary>
        /// Crea il Dettaglio delle unità immobiliari partecipanti ad un modello di ripartizione
        /// </summary>
        public DettaglioEmissioneRate(EmissioneRate testataEmissioneRate)
        {
            TestataEmissioneRate = testataEmissioneRate;
            Stato = StatoMavEnum.Emesso;

            if (TestataEmissioneRate != null)
                TestataEmissioneRate.Rate.Add(this);
        }
Ejemplo n.º 2
0
        private EmissioneRate getRateDaEmettere(int idEsercizio, List<RataNotaDTO> lista, string causale, decimal? spesePostali, DateTime? dataEmissione)
        {
            // ----------------------------------------------------------
            //  Creazione testata emissione e aggiornamento stato rate
            // ----------------------------------------------------------
            if (dataEmissione == null)
                dataEmissione = DateTime.Now;

            var testata = new EmissioneRate(_daoFactory.GetEsercizioDao().GetById(idEsercizio, false), dataEmissione) { Causale = causale };
            _daoFactory.GetEmissioneRateDao().SaveOrUpdate(testata);

            const string hql = "FROM RataSoggetto R WHERE R.ID IN (:lista)";
            var rate = _daoFactory.GetRataSoggettoDao().GetByQuery(hql, new QueryParam("lista", lista.Select(item => item.Id).ToList()));

            // Accorpo le rate per unità immobiliare
            var rateAccorpate = accorpaRate(rate);
            foreach (var rata in rateAccorpate)
            {
                var nota = lista.FirstOrDefault(item => item.Id == rata.IdRataSingola);

                var dettaglioRata = new DettaglioEmissioneRate(testata){ SpeseIncasso = spesePostali };

                if (rata.Rate.Count == 0)
                {
                    var rataPrincipale = _daoFactory.GetRataSoggettoDao().GetById(rata.IdRataSingola, false);
                    dettaglioRata.RateCollegate.Add(rataPrincipale);
                    rataPrincipale.Emissione = dettaglioRata;
                    rataPrincipale.SetStato(StatoRataEnum.Spedita);
                }
                else
                {
                    foreach (var rataAccorpata in rata.Rate)
                    {
                        var rataSecondaria = _daoFactory.GetRataSoggettoDao().GetById(rataAccorpata.ID, false);
                        dettaglioRata.RateCollegate.Add(rataSecondaria);
                        rataSecondaria.SetStato(StatoRataEnum.Spedita);
                        rataSecondaria.Emissione = dettaglioRata;
                    }
                }

                if (nota != null && (!string.IsNullOrEmpty(nota.Nota) || (nota.ImportoNota != null && nota.ImportoNota.Value > 0)))
                {
                    dettaglioRata.Nota = nota.Nota;
                    dettaglioRata.ImportoNota = nota.ImportoNota;
                }

                _daoFactory.GetDettaglioEmissioneRateDao().SaveOrUpdate(dettaglioRata);
                testata.Rate.Add(dettaglioRata);
            }

            return testata;
        }
Ejemplo n.º 3
0
        public byte[] EmissioneRateDaRichiamare(int idEsercizio, int idBanca, List<int> lista, string causale, string intestazioneAzienda)
        {
            // ----------------------------------------------------------
            //  Creazione testata emissione e aggiornamento stato rate
            // ----------------------------------------------------------
            var testata = new EmissioneRate(_daoFactory.GetEsercizioDao().GetById(idEsercizio, false), DateTime.Now) {Causale = causale};
            _daoFactory.GetEmissioneRateDao().SaveOrUpdate(testata);

            const string hql = "FROM RataSoggetto R WHERE R.Importo > 0 AND R.ID IN (:lista)";
            var rate = _daoFactory.GetRataSoggettoDao().GetByQuery(hql, new QueryParam("lista", lista));

            // Accorpo le rate per unità immobiliare
            foreach (var rata in rate)
            {
                var dettaglioRata = new DettaglioEmissioneRate(testata);
                dettaglioRata.RateCollegate.Add(rata);
                rata.Emissione = dettaglioRata;
                rata.SetStato(StatoRataEnum.Spedita);

                testata.Rate.Add(dettaglioRata);
            }

            // ----------------------------------------------------------
            //  Creazione file CBI
            // ----------------------------------------------------------
            var banca = _daoFactory.GetDatiBancariCondominiDao().GetById(idBanca, false);
            byte[] testoFile = _esecuzioneEmissioneRateService.RichiamoMav(testata, banca, intestazioneAzienda);
            if (testoFile != null)
            {
                // ----------------------------------------------------------
                //  LA CREAZIONE DEI MOVIMENTI CONTABILI DI STORNO AVVIENE 
                //  ALLA CONFERMA DEL SUBENTRO - SubentroService.Conferma()
                // ----------------------------------------------------------
                //_movimentoContabileService.SetMovimentiEmissioneRata(testata);

                return testoFile;
            }
            _persistenceContext.RollbackAndCloseSession(Login.Instance.CurrentLogin().LoginName);
            _persistenceContext.BeginTransaction(Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);

            return null;
        }
Ejemplo n.º 4
0
        public virtual IUpdatableBusinessEntity Copy()
        {
            EmissioneRate emissione = new EmissioneRate(Esercizio, Data);

            return emissione;
        }
Ejemplo n.º 5
0
        // =======================================================================================================================
        //  Azienda Mittente --> Condominio
        //  Banca Assuntrice --> Banca del Condominio che deve ricevere i pagamenti e a cui devovo essere inviare le disposizioni
        //  Destinatario     --> Banca del Fornitore (beneficiario)
        // =======================================================================================================================
        public byte[] EmissioneMav(EmissioneRate testataEmissione, DatiBancariCondomini banca, string intestazioneAzienda)
        {
            _testata = testataEmissione;
            byte[] bytes = null; 
            StreamWriter sw = null;
            try
            {
                _impostazioniAzienda = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(testataEmissione.Esercizio.CondominioRiferimento.Azienda.ID) ?? new ImpostazioniAzienda(testataEmissione.Esercizio.CondominioRiferimento.Azienda) { TipoIndirizzoComunicazioni = TipoIndirizzo.Residenza};
                if(_impostazioniAzienda == null)
                    _log.ErrorFormat("Non sono definite le impostazioni dell'azienda - {0} - azienda:{1}", Utility.GetMethodDescription(), testataEmissione.Esercizio.CondominioRiferimento.Azienda.ID);

                var fileName = Path.GetTempPath() + "\\" + Guid.NewGuid();
                if (ApplicationDeployment.IsNetworkDeployed)
                    fileName = ApplicationDeployment.CurrentDeployment.DataDirectory + "\\" + Guid.NewGuid();
                if (File.Exists(fileName))
                    File.Delete(fileName);

                // =============================================================================================
                // Creo il file
                // =============================================================================================
                using (sw = File.CreateText(fileName))
                {
                    // Creo le riga di testa
                    writeTestataIM(testataEmissione.Esercizio, banca, sw);

                    decimal importoTotale = 0;
                    var numeroRighe = 1;

                    var numeroDisposizione = 0;
                    foreach (var rata in testataEmissione.Rate)
                    {
                        try
                        {
                            var rataPrincipale = rata.RateCollegate.FirstOrDefault(item => item.Soggetto.SoggettoPrincipale == null);
                            if (rataPrincipale == null)
                            {
                                rataPrincipale = rata.RateCollegate.FirstOrDefault();
                                _log.WarnFormat("Non trovata nessun rata principale - {0} - rata:{1}", Utility.GetMethodDescription(), rata.ID);                    
                            }

                            importoTotale += rata.RateCollegate.Sum(rt => rt.Importo);
                            numeroDisposizione++;

                            numeroRighe++;
                            writeMovimento14(rata, banca, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento16(rataPrincipale, banca, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento20(rataPrincipale, sw, numeroDisposizione, intestazioneAzienda);
                            numeroRighe++;
                            writeMovimento30(rataPrincipale, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento40(rataPrincipale, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento50(rataPrincipale, testataEmissione, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento51(rata, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento70(sw, numeroDisposizione);
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante la elaborazione di una singola riga per la creazione del file CBI dei MAV - {0} - rata:{1}", ex, Utility.GetMethodDescription(), rata.ID);
                            throw;
                        }
                    }

                    numeroRighe++;
                    writeCodaEF(testataEmissione.Esercizio, banca, sw, numeroDisposizione, importoTotale, numeroRighe);
                }

                _notifier.Notify("Il file dei MAV è stato correttamente creato.");

                var infile = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                bytes = new byte[infile.Length];
                infile.Read(bytes, 0, bytes.Length);

                testataEmissione.File = Conversione.ToString(bytes);

                return bytes;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione del file CBI dei MAV - {0}", ex, Utility.GetMethodDescription());
                _notifier.Notify("Si sono verificati problemi inaspettati durante la creazione del file CBI dei MAV." + Environment.NewLine + "Controllare il log per ulteriori dettagli.");
                return bytes;
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                    sw.Dispose();
                }
            }
        }
Ejemplo n.º 6
0
        public byte[] RichiamoMav(EmissioneRate testataEmissione, DatiBancariCondomini banca, string intestazioneAzienda)
        {
            _testata = testataEmissione;
            byte[] bytes = null;
            StreamWriter sw = null;
            try
            {
                var fileName = Path.GetTempPath() + "\\" + Guid.NewGuid();
                if (ApplicationDeployment.IsNetworkDeployed)
                    fileName = ApplicationDeployment.CurrentDeployment.DataDirectory + "\\" + Guid.NewGuid().ToString();
                if (File.Exists(fileName))
                    File.Delete(fileName);

                // =============================================================================================
                // Creo il file
                // =============================================================================================
                using (sw = File.CreateText(fileName))
                {
                    // Creo le riga di testa
                    writeTestataIM(testataEmissione.Esercizio, banca, sw);

                    decimal importoTotale = 0;
                    int numeroRighe = 1;

                    int numeroDisposizione = 0;
                    foreach (var rata in testataEmissione.Rate)
                    {
                        var rataPrincipale = IesiGenericCollections<RataSoggetto>.GetByIndex(rata.RateCollegate, 0);
                        importoTotale += rata.RateCollegate.Sum(rt => rt.Importo);
                        numeroDisposizione++;

                        numeroRighe++;
                        writeMovimentoRichiamo14(rataPrincipale, banca, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento16(rataPrincipale, banca, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento20(rataPrincipale, sw, numeroDisposizione, intestazioneAzienda);
                        numeroRighe++;
                        writeMovimento30(rataPrincipale, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento40(rataPrincipale, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento50(rataPrincipale, testataEmissione, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento51(rata, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimentoRichiamo70(sw, numeroDisposizione);
                    }

                    numeroRighe++;
                    writeCodaEF(testataEmissione.Esercizio, banca, sw, numeroDisposizione, importoTotale, numeroRighe);
                }

                _notifier.Notify("Il file dei MAV è stato correttamente creato.");

                var infile = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                bytes = new byte[infile.Length];
                infile.Read(bytes, 0, bytes.Length);

                return bytes;
            }
            catch (Exception ex)
            {
                _log.FatalFormat("Errore inaspettato durante la creazione del file CBI per il richiamo dei MAV - {0} - intestazioneAzienda:{1}", ex, Utility.GetMethodDescription(), intestazioneAzienda);
                _notifier.Notify("Si sono verificati problemi inaspettati durante la creazione del file CBI per il richiamo dei MAV." + Environment.NewLine + "Controllare il log per ulteriori dettagli.");
                return bytes;
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                    sw.Dispose();
                }
            }
        }
Ejemplo n.º 7
0
        private void writeMovimento50(RataSoggetto rata, EmissioneRate testata, StreamWriter sw, int numeroDisposizione)
        {
            try
            {
                var sb = new StringBuilder(120);

                // Tipo Record
                sb.Append(" 50");

                // Numero Disposizione
                sb.Append(numeroDisposizione.ToString().PadLeft(7, '0'));

                // -----------------------------------------------------------------------------
                // Riferimenti al debito (è suddiviso in due segmenti di 40 caratteri ciascuno)
                // -----------------------------------------------------------------------------
                var descrizioneMav = rata.GetDescrizioneMAV(testata.Causale);
                sb.Append(descrizioneMav[0].PadRight(40, ' '));
                sb.Append(descrizioneMav[1].PadRight(40, ' '));

                // filler
                sb.Append(string.Empty.PadLeft(30));

                sw.WriteLine(sb.ToString());
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione di una singola riga di MAV - {0} - esercizio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), rata?.Esercizio.ID, rata?.Esercizio.CondominioRiferimento.Azienda.ID);
                throw;
            }
        }