/* private IStampeService getStampeService() { return _stampeService ?? (_stampeService = ResolveComponent<IStampeService>()); } */ #endregion Service #region Helper Methods private void setBorder(ReportRataSoggettoDTO itemReport, XRTableCell cell, List<IGrouping<string, ReportRataSoggettoDTO>> dataSource, int indexItem, int idPartecipantePrecedente) { var skip = false; if (itemReport.TipoNominativo == "PROP") { try { if (dataSource.Count > indexItem + 1) { var nextNominativo = dataSource[indexItem + 1].OrderBy(item => itemReport.NumeroRata).FirstOrDefault(); if (nextNominativo != null && itemReport.IdSoggettoCondominio != nextNominativo.IdSoggettoCondominio) skip = true; } } catch (Exception ex) { _log.ErrorFormat("Errore nell'impostazione del border - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Security.Login.Instance.CurrentLogin().Azienda); throw; } } if (!skip) { if (_impostazioniReport.BorderInsideGroup && (itemReport.TipoNominativo == "PROP" || itemReport.IdSoggettoCondominio == idPartecipantePrecedente)) setCellBorder(cell, dataSource.Count, indexItem, itemReport.IdSoggettoCondominio == idPartecipantePrecedente); } }
public IList<ReportRataSoggettoDTO> GetReportByEsercizio(int idEsercizio, int? idLotto, int? idStabile, int? idScala, IList<ImportoSaldoSoggettoDTO> saldi, TipoAccorpamentoRateEnum tipoAccorpamento) { var rateReport = new List<ReportRataSoggettoDTO>(); var esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio, false); var impostazioni = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(esercizio.CondominioRiferimento.Azienda.ID); var totalePreventivo = new Dictionary<int, decimal>(); var importoPreventivo = _bilancioService.GetImportiPreventivoCorrente(idEsercizio, tipoAccorpamento); // ===================================================================================== // Piano rateale // ===================================================================================== var rate = _daoFactory.GetRataSoggettoDao().GetByEsercizioLottoStabileScala(idEsercizio, idLotto, idStabile, idScala); foreach (var rata in rate) { var soggetto = rata.Soggetto; if (tipoAccorpamento == TipoAccorpamentoRateEnum.Personalizzato && soggetto.SoggettoPrincipale != null) soggetto = soggetto.SoggettoPrincipale; var importoRata = rata.Importo; var rataReport = new ReportRataSoggettoDTO { DataScadenza = rata.DataScadenza, NumeroRata = rata.PianoRatealeDettaglio.Progressivo, DescrizioneRata = rata.PianoRatealeDettaglio.Descrizione, IdDettaglioRata = rata.PianoRatealeDettaglio.ID, DescrizioneSoggettoCondominio = soggetto.DisplayName, DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione, IdSoggettoCondominio = soggetto.ID, TipoNominativo = soggetto.Tipo.ToString(), IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID, TipoUnitaImmobiliare = soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione, SubalternoUnitaImmobiliare = soggetto.UnitaImmobiliare.Subalterno, PianoUnitaImmobiliare = soggetto.UnitaImmobiliare.Piano, Importo = importoRata, Progressivo = rata.PianoRatealeDettaglio.Progressivo, IdGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, DescrizioneGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, IdStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, DescrizioneStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, OrdineGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Ordine, OrdineStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine, OrdineUnitaImmobiliare = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(), InternoUnitaImmobiliare = soggetto.UnitaImmobiliare.InternoCompleto, TipoSoggettoCondominio = soggetto.Tipo.ToString().Substring(0, 1), IdPersona = soggetto.Persona.ID, Nominativo = soggetto.DisplayName }; rateReport.Add(rataReport); // Aggiorno il totale preventivo if (totalePreventivo.ContainsKey(rataReport.IdSoggettoCondominio)) totalePreventivo[rataReport.IdSoggettoCondominio] += rataReport.Importo; else totalePreventivo.Add(rataReport.IdSoggettoCondominio, rataReport.Importo); } // ===================================================================================== // Saldi Inizio Esercizio // ===================================================================================== foreach (var saldo in saldi) { if (saldo.Importo != 0) { var soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(saldo.IdSoggettoCondominio, false); if (tipoAccorpamento == TipoAccorpamentoRateEnum.Personalizzato && soggetto.SoggettoPrincipale != null) soggetto = soggetto.SoggettoPrincipale; else if (tipoAccorpamento == TipoAccorpamentoRateEnum.Persona && rate.First().PianoRatealeDettaglio.PianoRatealeRiferimento.Tipo == TipoAccorpamentoRateEnum.Persona) soggetto = getSoggettoFromRate(rate, soggetto); if ((idScala == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID == idScala.Value) && (idStabile == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID == idStabile.Value) && (idLotto == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento.ID == idLotto.Value)) { var rataReport = new ReportRataSoggettoDTO { DataScadenza = null, NumeroRata = -20, IdDettaglioRata = -1, DescrizioneRata = "Saldo Esercizio Precedente", DescrizioneSoggettoCondominio = soggetto.DisplayName, DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione, IdSoggettoCondominio = soggetto.ID, TipoNominativo = soggetto.Tipo.ToString(), IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID, TipoUnitaImmobiliare = soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione, SubalternoUnitaImmobiliare = soggetto.UnitaImmobiliare.Subalterno, PianoUnitaImmobiliare = soggetto.UnitaImmobiliare.Piano, Importo = saldo.Importo, Progressivo = 0, IdGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, DescrizioneGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, IdStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, DescrizioneStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, OrdineGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Ordine, OrdineStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine, OrdineUnitaImmobiliare = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(), InternoUnitaImmobiliare = soggetto.UnitaImmobiliare.InternoCompleto, TipoSoggettoCondominio = soggetto.Tipo.ToString().Substring(0, 1), IdPersona = soggetto.Persona.ID, Nominativo = soggetto.DisplayName }; rateReport.Add(rataReport); // Inverto l'importo visualizzato se richiesto if (impostazioni.InversioneSaldiRate) rataReport.Importo = rataReport.Importo * -1; } } } // ===================================================================================== // Totale Preventivo // ===================================================================================== foreach (var importoDto in importoPreventivo) { if (importoDto.Importo != 0) { var soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(importoDto.Id, false); if (tipoAccorpamento == TipoAccorpamentoRateEnum.Personalizzato && soggetto.SoggettoPrincipale != null) soggetto = soggetto.SoggettoPrincipale; else if (tipoAccorpamento == TipoAccorpamentoRateEnum.Persona && rate.Any() && rate.First().PianoRatealeDettaglio.PianoRatealeRiferimento.Tipo == TipoAccorpamentoRateEnum.Persona) soggetto = getSoggettoFromRate(rate, soggetto); if ((idScala == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID == idScala.Value) && (idStabile == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID == idStabile.Value) && (idLotto == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento.ID == idLotto.Value)) { var rataReport = new ReportRataSoggettoDTO { DataScadenza = null, NumeroRata = -30, IdDettaglioRata = -2, DescrizioneRata = "Totale Preventivo", DescrizioneSoggettoCondominio = soggetto.DisplayName, DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione, IdSoggettoCondominio = soggetto.ID, TipoNominativo = soggetto.Tipo.ToString(), IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID, TipoUnitaImmobiliare = soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione, SubalternoUnitaImmobiliare = soggetto.UnitaImmobiliare.Subalterno, PianoUnitaImmobiliare = soggetto.UnitaImmobiliare.Piano, Importo = importoDto.Importo, Progressivo = -1, IdGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, DescrizioneGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, IdStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, DescrizioneStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, OrdineGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Ordine, OrdineStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine, OrdineUnitaImmobiliare = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(), InternoUnitaImmobiliare = soggetto.UnitaImmobiliare.InternoCompleto, TipoSoggettoCondominio = soggetto.Tipo.ToString().Substring(0, 1), IdPersona = soggetto.Persona.ID, Nominativo = soggetto.DisplayName }; rateReport.Add(rataReport); } } } // ===================================================================================== // Totale da versare // ===================================================================================== foreach (var kvp in totalePreventivo) { var soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(kvp.Key, false); if (tipoAccorpamento == TipoAccorpamentoRateEnum.Personalizzato && soggetto.SoggettoPrincipale != null) soggetto = soggetto.SoggettoPrincipale; if ((idScala == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID == idScala.Value) && (idStabile == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID == idStabile.Value) && (idLotto == null || soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento.ID == idLotto.Value)) { var rataReport = new ReportRataSoggettoDTO { DataScadenza = null, IdDettaglioRata = -3, NumeroRata = -10, DescrizioneRata = "Totale da Versare", DescrizioneSoggettoCondominio = soggetto.DisplayName, DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione, IdSoggettoCondominio = soggetto.ID, TipoNominativo = soggetto.Tipo.ToString(), IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID, TipoUnitaImmobiliare = soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione, SubalternoUnitaImmobiliare = soggetto.UnitaImmobiliare.Subalterno, PianoUnitaImmobiliare = soggetto.UnitaImmobiliare.Piano, Importo = kvp.Value, Progressivo = 100, IdGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, DescrizioneGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, IdStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, DescrizioneStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, OrdineGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Ordine, OrdineStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine, OrdineUnitaImmobiliare = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(), InternoUnitaImmobiliare = soggetto.UnitaImmobiliare.InternoCompleto, TipoSoggettoCondominio = soggetto.Tipo.ToString().Substring(0, 1), IdPersona = soggetto.Persona.ID, Nominativo = soggetto.DisplayName }; rateReport.Add(rataReport); } } // ===================================================================================== // Se richiesto inverto l'importo del 'Totale da versare' // ===================================================================================== if(impostazioni.InversioneSaldiRate) { foreach (var reportRataSoggettoDTO in rateReport.Where(item => item.Progressivo == 100)) reportRataSoggettoDTO.Importo = reportRataSoggettoDTO.Importo*-1; } // ===================================================================================== // Se richiesto eseguo l'accorpamento per persona // ===================================================================================== if (tipoAccorpamento == TipoAccorpamentoRateEnum.Persona) { var ratePerPersona = new List<ReportRataSoggettoDTO>(rateReport.Count); foreach (var reportRataSoggettoDTO in rateReport.OrderBy(item => item.OrdineUnitaImmobiliare)) { var itemPerPersona = ratePerPersona.SingleOrDefault(item => item.IdPersona == reportRataSoggettoDTO.IdPersona && item.IdDettaglioRata == reportRataSoggettoDTO.IdDettaglioRata); if (itemPerPersona == null) ratePerPersona.Add(reportRataSoggettoDTO); else itemPerPersona.Importo += reportRataSoggettoDTO.Importo; } return ratePerPersona; } return rateReport.OrderBy(rata => rata.DataScadenza).ThenBy(rata => rata.OrdineUnitaImmobiliare).ThenBy(rata => rata.TipoSoggettoCondominio).ToList(); }