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; } }