Exemplo n.º 1
0
        public IList<RataPersonaDTO> GetRataByPersona(int idEsercizio, int idPersona)
        {
            try
            {
                var rate = _daoFactory.GetRataSoggettoDao().GetByEsercizioPersonaUnitaImmobiliari(idEsercizio, idPersona, null);
                var rateDto = new List<RataPersonaDTO>(rate.Count);
                Esercizio esercizio = null;

                // ==========================================
                // Aggiungo tutte le rate
                // ==========================================
                foreach (var rata in rate)
                {
                    esercizio = rata.Esercizio;
                    var dto = new RataPersonaDTO
                    {
                        IdSoggetto = rata.Soggetto.ID,
                        DescrizioneRata = (rata.PianoRatealeDettaglio != null) ? rata.PianoRatealeDettaglio.Descrizione : string.Empty,
                        Progressivo = rata.PianoRatealeDettaglio?.Progressivo ?? 0,
                        TipoSoggetto = rata.Soggetto.Tipo,
                        DataScadenza = rata.DataScadenza,
                        DescrizioneUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.Descrizione,
                        ID = rata.ID,
                        IdEsercizio = esercizio.ID,
                        DescrizioneEsercizio = esercizio.DisplayName,
                        ImportoRata = rata.Importo,
                        StatoRata = rata.Stato,
                        IdPersona = rata.Soggetto.Persona.ID,
                        IdUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.ID,
                        ImportoVersato = rata.Versamenti.Sum(vers => vers.Importo),
                        ImportoVersamento = 0,
                        IsDeleteAllow = false,
                        TipoUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione,
                        OrdineUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(),
                        NumeroSolleciti = rata.Solleciti.Count,
                        Selezionabile = true,
                        Alert = false,
                        Stato = rata.Stato.ToString()
                    };

                    setStatoRataDisplay(dto, rata);

                    if (rata.Emissione != null)
                    {
                        dto.DataEmissione = rata.Emissione.TestataEmissioneRate.Data;
                        dto.IdDettaglioEmissione = rata.Emissione.ID;
                        dto.IdTestataEmissione = rata.Emissione.TestataEmissioneRate.ID;
                    }

                    if (rata.PianoRatealeDettaglio != null)
                    {
                        dto.IdPianoDettaglioRatealeRiferimento = rata.PianoRatealeDettaglio.ID;
                        dto.DisplayName = rata.PianoRatealeDettaglio.Descrizione;
                    }

                    if (rata.Emissione?.Stato == StatoMavEnum.Radiato && rata.Stato != StatoRataEnum.Pagata && rata.Stato != StatoRataEnum.ParzialmentePagata)
                        dto.Alert = true;

                    if (rata.Versamenti.Count > 0)
                    {
                        var firstOrDefault = rata.Versamenti.OrderByDescending(item => item.Versamento.Data).FirstOrDefault();
                        if (firstOrDefault != null)
                            dto.DataUltimoVersamento = firstOrDefault.Versamento.Data;
                    }

                    rateDto.Add(dto);
                }

                // ==========================================
                // Aggiungo i versamenti fuori piano rateale
                // ==========================================
                var versamenti = _versamentiCondominiService.GetVersamentiSenzaRata(idEsercizio, idPersona);
                foreach (var versamento in versamenti)
                {
                    var dto = new RataPersonaDTO
                    {
                        ID = 0,
                        IdEsercizio = idEsercizio,
                        DescrizioneEsercizio = esercizio?.DisplayName,
                        IdTestataEmissione = null,
                        IdDettaglioEmissione = null,
                        IdPianoDettaglioRatealeRiferimento = 0,
                        IdSoggetto = versamento.Soggetto.ID,
                        TipoSoggetto = versamento.Soggetto.Tipo,
                        Selezionabile = false,
                        Alert = false,
                        DataEmissione = null,
                        DataUltimoVersamento = versamento.Data,
                        DescrizioneUnitaImmobiliare = versamento.Soggetto.UnitaImmobiliare.Descrizione,
                        OrdineUnitaImmobiliare = versamento.Soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(),
                        TipoUnitaImmobiliare = versamento.Soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione,
                        IdUnitaImmobiliare = versamento.Soggetto.UnitaImmobiliare.ID,
                        IdPersona = versamento.Soggetto.Persona.ID,
                        NumeroSolleciti = 0,
                        ImportoVersato = versamento.Importo - versamento.Rate.Sum(item => item.Importo),
                        ImportoVersamento = 0,
                        StatoRata = StatoRataEnum.Pagata,
                        DisplayName = "Versamento fuori piano rateale"
                    };
                    rateDto.Add(dto);
                }

                // ==========================================
                // Calcolo i progressivi
                // ==========================================
                decimal progressivo = 0;
                foreach (var dto in rateDto.OrderBy(item => item.DataScadenza))
                {
                    progressivo += dto.ImportoRata.GetValueOrDefault() - dto.ImportoVersato.GetValueOrDefault();
                    dto.ImportoProgressivo = progressivo;
                }

                return rateDto.OrderBy(rata => rata.DataScadenza.GetValueOrDefault()).ToList();
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la lettura delle rate per persona - {0} - esercizio:{1} - persona:{2}", ex, Utility.GetMethodDescription(), idEsercizio, idPersona);
                throw;
            }
        }
Exemplo n.º 2
0
        public void setStatoRataDisplay(RataPersonaDTO dto, RataSoggetto rata)
        {
            switch (rata.Stato)
            {
                case StatoRataEnum.Pagata:
                    dto.StatoRataDisplay = StatoRataEnumDisplay.Pagata;
                    break;

                case StatoRataEnum.ParzialmentePagata:
                    dto.StatoRataDisplay = StatoRataEnumDisplay.ParzialmentePagata;
                    break;

                case StatoRataEnum.Inserita:
                case StatoRataEnum.Spedita:
                case StatoRataEnum.ParzialmenteSpedita:
                    if (dto.DataScadenza < DateTime.Today)
                        dto.StatoRataDisplay = StatoRataEnumDisplay.Scaduta;
                    else if (dto.DataScadenza < DateTime.Today.AddDays(7))
                        dto.StatoRataDisplay = StatoRataEnumDisplay.InScadenza;
                    else
                        dto.StatoRataDisplay = StatoRataEnumDisplay.Inserita;
                    break;
            }
        }