Пример #1
0
        public object Clone()
        {
            var dto = new ReportRipartoAcquaDTO
            {
                IdRiparto = IdRiparto,
                IdUnitaImmobiliare = IdUnitaImmobiliare,
                DescrizioneUnitaImmobiliare = DescrizioneUnitaImmobiliare,
                OrdineUnitaImmobiliare = OrdineUnitaImmobiliare,
                TipoUnitaImmobiliare = TipoUnitaImmobiliare,
                InternoUnitaImmobiliare = InternoUnitaImmobiliare,
                IdStabile = IdStabile,
                DescrizioneStabile = DescrizioneStabile,
                OrdineStabile = OrdineStabile,
                IdGruppoStabile = IdGruppoStabile,
                DescrizioneGruppoStabile = DescrizioneGruppoStabile,
                OrdineGruppoStabile = OrdineGruppoStabile,
                ImportoDepurazione = ImportoDepurazione,
                ImportoFognatura = ImportoFognatura,
                ImportoQuotaFissa = ImportoQuotaFissa,
                ConsumoTotaleAcquaCalda = ConsumoTotaleAcquaCalda,
                ImportoAddebitoTotaleAcquaCalda = ImportoAddebitoTotaleAcquaCalda,
                ConsumoTotaleAcquaFredda = ConsumoTotaleAcquaFredda,
                ImportoIva = ImportoIva,
                ImportoBilancio = ImportoBilancio,
                ImportoAccreditoContatoreCondominiale = ImportoAccreditoContatoreCondominiale
            };

            return dto;
        }
        public IList<ReportRipartoAcquaDTO> GetReportRipartoAcqua(int idEsercizio, int idTipoUtenza)
        {
            try
            {
                var result = new List<ReportRipartoAcquaDTO>();
                var testata = _daoFactory.GetTestataRipartoBolletteDao().GetByEsercizioTipoUtenza(idEsercizio, idTipoUtenza).FirstOrDefault();
                if (testata != null)
                {
                    int? idContoAcquaRiscaldata = null;
                    if (testata.ContoAcquaRiscaldamento != null)
                        idContoAcquaRiscaldata = testata.ContoAcquaRiscaldamento.ID;

                    int? idContoRiscaldamento = null;
                    if (testata.ContoRiscaldamento != null)
                        idContoRiscaldamento = testata.ContoRiscaldamento.ID;

                    int? idContoSpalo = null;
                    if (testata.ContoSpalo != null)
                        idContoSpalo = testata.ContoSpalo.ID;

                    // Valorizzo i parametri per riparto del contatore condominiale
                    // -------------------------------------------------------------------
                    var esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio, false);
                    var parametri = new List<ParametriAddebitoMovimento>();
                    var utenze = _daoFactory.GetUtenzaDao().GetByCondominio(esercizio.CondominioRiferimento);
                    foreach (var utenza in utenze)
                    {
                        foreach (var contatore in utenza.Contatori)
                        {
                            if(contatore.IsCondominiale)
                            {
                                var parametriContatoreCondominiale = _daoFactory.GetTestataRipartoContatoreCondominialeDao().GetByEsercizioContatore(idEsercizio, contatore.ID);
                                if(parametriContatoreCondominiale.Count > 0)
                                {
                                    var parametro = parametriContatoreCondominiale.FirstOrDefault();
                                    if(parametro != null)
                                        parametri.Add(new ParametriAddebitoMovimento(parametro.ContatoreCondominiale.ID, parametro.ContoAddebito.ID, parametro.SottocontoAddebito.ID, parametro.DescrizioneMovimentoAddebito));                                    
                                }
                            }
                        }
                    }

                    var message = CalcoloRipartoAcqua(idEsercizio, _daoFactory.GetTipoUtenzaDao().GetById(idTipoUtenza, false), idContoAcquaRiscaldata, idContoRiscaldamento, idContoSpalo, testata.DescrizioneMovimentoAcqua, testata.DescrizioneMovimentoRiscaldamento, testata.TariffaRiscaldamentoAcqua, testata.TariffaAcquaFredda, parametri, testata.DataRegistrazione);

                    var testateContabileCondominiale = esercizio.TestateContabiliRipartoContatoreCondominiale;
                    var ripartizioneAccrediti = testateContabileCondominiale.SelectMany(item => item.Movimenti).SelectMany(item => item.DettaglioRipartizione).ToList();

                    testata = _daoFactory.GetTestataRipartoBolletteDao().GetByEsercizioTipoUtenza(idEsercizio, idTipoUtenza).FirstOrDefault();
                    if (string.IsNullOrEmpty(message.FatalMessage))
                    {
                        if (testata != null)
                        {
                            var listaRiparto = testata.Riparto;
                            foreach (var riparto in listaRiparto.Where(item => item.UnitaImmobiliare != null))
                            {
                                var riparto2 = riparto;
                                var dto = new ReportRipartoAcquaDTO
                                {
                                    IdRiparto = riparto.ID,
                                    IdUnitaImmobiliare = riparto.UnitaImmobiliare.ID,
                                    DescrizioneUnitaImmobiliare = riparto.UnitaImmobiliare.GetDisplayName(riparto.Testata.Esercizio.DataChiusura.GetValueOrDefault()) + " R." + riparto.UnitaImmobiliare.NumeroResidenti,
                                    OrdineUnitaImmobiliare = riparto.UnitaImmobiliare.Ordine.GetValueOrDefault(),
                                    TipoUnitaImmobiliare = riparto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione,
                                    InternoUnitaImmobiliare = riparto.UnitaImmobiliare.InternoCompleto,
                                    IdStabile = riparto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID,
                                    DescrizioneStabile = riparto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione,
                                    OrdineStabile = riparto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine,
                                    IdGruppoStabile = riparto.UnitaImmobiliare.GruppoStabileRiferimento.ID,
                                    DescrizioneGruppoStabile = riparto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione,
                                    OrdineGruppoStabile = riparto.UnitaImmobiliare.GruppoStabileRiferimento.Ordine,
                                    ImportoDepurazione = riparto.Depurazione.GetValueOrDefault(),
                                    ImportoFognatura = riparto.Fognatura.GetValueOrDefault(),
                                    ImportoQuotaFissa = riparto.QuotaFissa.GetValueOrDefault(),
                                    ConsumoTotaleAcquaCalda = riparto.ConsumoAcquaCalda.GetValueOrDefault(),
                                    ImportoAddebitoTotaleAcquaCalda = riparto.ImportoAcquaCalda.GetValueOrDefault(),
                                    ImportoIva = riparto.ImportoIva.GetValueOrDefault(),
                                    ImportoBilancio = riparto.ImportoBilancio.GetValueOrDefault(),
                                    ImportoAccreditoContatoreCondominiale = ripartizioneAccrediti.Where(item => item.UnitaRiferimento.ID == riparto2.UnitaImmobiliare.ID).Sum(item => item.Importo.GetValueOrDefault())
                                };

                                // Valorizzo gli importi e i consumi
                                var importiConsumo = new decimal[5];
                                var index = -1;

                                // ==============================================================================
                                //  Per ora son previste solo 5 fasce in stampa le eccedenti le sommo all'ultima
                                // ==============================================================================
                                foreach (var dettaglio in riparto.DettaglioRipartoConsumo)
                                {
                                    if(index <= 3)
                                        index++;
                                    importiConsumo[index] += dettaglio.ImportoAddebitato;
                                }
                                // ==============================================================================

                                var indexLetture = 0;
                                decimal letturaInizialeAcquaCalda = 0;
                                decimal letturaFinaleAcquaCalda = 0;
                                foreach (var lettura in riparto.DettaglioLetture)
                                {
                                    var reportDto = (ReportRipartoAcquaDTO) dto.Clone();
                                    if (indexLetture == 0)
                                    {
                                        reportDto.ImportoAddebitoAcquaFascia1 = importiConsumo[0];
                                        reportDto.ImportoAddebitoAcquaFascia2 = importiConsumo[1];
                                        reportDto.ImportoAddebitoAcquaFascia3 = importiConsumo[2];
                                        reportDto.ImportoAddebitoAcquaFascia4 = importiConsumo[3];
                                        reportDto.ImportoAddebitoAcquaFascia5 = importiConsumo[4];
                                        reportDto.ImportoAddebitoTotaleAcquaFredda = importiConsumo.Sum();
                                    }

                                    if (lettura.Contatore.Tipo.TipoCalcolo != TipoCalcoloContatoreEnum.AcquaCalda)
                                    {
                                        reportDto.LetturaIniziale = lettura.LetturaIniziale;
                                        reportDto.DataLetturaIniziale = lettura.DataLetturaIniziale;
                                        reportDto.DataLetturaFinale = lettura.DataLetturaFinale;
                                        reportDto.TipoLetturaIniziale = lettura.TipoLetturaIniziale;
                                        reportDto.LetturaFinale = lettura.LetturaFinale;
                                        reportDto.TipoLetturaFinale = lettura.TipoLetturaFinale;

                                        reportDto.LetturaCambioContatore = lettura.LetturaCambioContatore;
                                        reportDto.DataLetturaCambioContatore = lettura.DataLetturaCambioContatore;

                                        reportDto.ConsumoTotaleAcquaFredda = reportDto.LetturaFinale.GetValueOrDefault() - reportDto.LetturaIniziale.GetValueOrDefault();
                                        if(reportDto.DataLetturaCambioContatore != null)
                                            reportDto.ConsumoTotaleAcquaFredda = reportDto.LetturaCambioContatore.GetValueOrDefault() - reportDto.LetturaIniziale.GetValueOrDefault() + reportDto.LetturaFinale.GetValueOrDefault();

                                        if(lettura.LetturaCambioContatore > 0)
                                            reportDto.DescrizioneUnitaImmobiliare += Environment.NewLine + "(Cambio cont.:" + lettura.LetturaCambioContatore.GetValueOrDefault().ToString("#0") + " - " + lettura.DataLetturaCambioContatore.GetValueOrDefault().ToShortDateString() + ")";

                                        // Già presente la riga valorizzo solo le letture
                                        var report = (from item in result
                                                      where item.IdUnitaImmobiliare == reportDto.IdUnitaImmobiliare
                                                      select item).SingleOrDefault();
                                        if (report != null)
                                        {
                                            reportDto.ImportoAddebitoAcquaFascia1 = 0;
                                            reportDto.ImportoAddebitoAcquaFascia2 = 0;
                                            reportDto.ImportoAddebitoAcquaFascia3 = 0;
                                            reportDto.ImportoAddebitoAcquaFascia4 = 0;
                                            reportDto.ImportoAddebitoAcquaFascia5 = 0;
                                            reportDto.ImportoAddebitoTotaleAcquaCalda = 0;
                                            reportDto.ImportoAddebitoTotaleAcquaFredda = 0;
                                            reportDto.ImportoDepurazione = 0;
                                            reportDto.ImportoFognatura = 0;
                                            reportDto.ImportoIva = 0;
                                            reportDto.ImportoQuotaFissa = 0;
                                            reportDto.DescrizioneUnitaImmobiliare = lettura.Contatore.Descrizione;
                                        }
                                        else
                                        {
                                            reportDto.ImportoTotale = reportDto.ImportoAddebitoTotaleAcquaFredda +
                                                                      //reportDto.ImportoAddebitoTotaleAcquaCalda +
                                                                      reportDto.ImportoDepurazione +
                                                                      reportDto.ImportoFognatura +
                                                                      reportDto.ImportoQuotaFissa;
                                        }
                                        result.Add(reportDto);
                                    }
                                    else
                                    {
                                        letturaInizialeAcquaCalda = lettura.LetturaIniziale;
                                        letturaFinaleAcquaCalda = lettura.LetturaFinale;
                                    }

                                    indexLetture++;
                                }

                                var riparto1 = riparto;
                                var reportCaldaDto = (from item in result
                                                      where item.IdUnitaImmobiliare == riparto1.UnitaImmobiliare.ID
                                                      select item).FirstOrDefault();
                                if (reportCaldaDto != null)
                                {
                                    reportCaldaDto.LetturaInizialeAcquaCalda = letturaInizialeAcquaCalda;
                                    reportCaldaDto.LetturaFinaleAcquaCalda = letturaFinaleAcquaCalda;
                                }
                            }
                        }
                    }
                }

                return result;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato durante la lettura del report del riparto acqua: " + Library.Utility.GetMethodDescription() + " - idEsercizio: " + idEsercizio.ToString(), ex);
                throw;
            }
            
        }