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