Ejemplo n.º 1
0
/*
        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);
            }
        }
Ejemplo n.º 2
0
        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();
        }