public IList<RiepilogoRataSoggettoDTO> GetRiepilogoInteressiMora(int idEsercizio, int numeroGiorniLimite, decimal importoLimite, decimal tassoInteresse, DateTime dataSituazioneContabile) { try { var riepilogo = new List<RiepilogoRataSoggettoDTO>(); var listaInteressi = new Dictionary<SoggettoCondominio, decimal>(); // ================================================================ // Riparto i versamenti ancora senza rata associata // ================================================================ var message = _versamentiService.AssociaVersamentiSenzaRata(idEsercizio); if (!string.IsNullOrEmpty(message)) { _log.InfoFormat("{0} - {1} - esercizio:{2}", message, Utility.GetMethodDescription(), idEsercizio); } // ================================================================ // Calcolo interessi di mora // ================================================================ var esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio, false); var personeDaNonSollecitare = esercizio.CondominioRiferimento.PersoneDaNonSollecitare; foreach (var rata in esercizio.Rate.Where(item => item.DataScadenza <= dataSituazioneContabile)) { // ------------------------------------------------------------ // Calcolo interessi per versamenti ritardatari // ------------------------------------------------------------ foreach (var versamento in rata.Versamenti) { int giorniRitardo = (versamento.Versamento.Data - rata.DataScadenza).Days; if (giorniRitardo > numeroGiorniLimite) { decimal interesse = (versamento.Importo * tassoInteresse * giorniRitardo) / 365; if (listaInteressi.ContainsKey(rata.Soggetto)) listaInteressi[rata.Soggetto] += interesse; else listaInteressi.Add(rata.Soggetto, interesse); } } // ------------------------------------------------------------ // Calcolo interessi per versamenti NON effettuati // ------------------------------------------------------------ var importoResiduo = rata.Importo - rata.GetImportoVersato(null); if (importoResiduo > 0) { var dataLimiteCalcolo = esercizio.DataChiusura.GetValueOrDefault(); if (DateTime.Today < dataLimiteCalcolo) dataLimiteCalcolo = DateTime.Today; var giorniRitardo = (dataLimiteCalcolo - rata.DataScadenza).Days; if (giorniRitardo > numeroGiorniLimite) { var interesse = (importoResiduo * tassoInteresse * giorniRitardo) / 365; if (listaInteressi.ContainsKey(rata.Soggetto)) listaInteressi[rata.Soggetto] += interesse; else listaInteressi.Add(rata.Soggetto, interesse); } } } // ================================================================ // Creo il riepilogo // ================================================================ var importiVersati = _daoFactory.GetVersamentoSoggettoDao().GetTotaleVersamentiByEsercizioSoggettoData(idEsercizio, null, null, null); foreach (var kvp in listaInteressi) { if (kvp.Value > importoLimite) { var personaDaNonSollecitare = personeDaNonSollecitare.FirstOrDefault(item => item.Persona.ID == kvp.Key.Persona.ID); var dettaglioRiepilogo = new RiepilogoRataSoggettoDTO { ID = kvp.Key.Persona.ID, IdPersona = kvp.Key.Persona.ID, NonSollecitare = personaDaNonSollecitare != null ? 1 : 0, MotivoNonSollecitare = personaDaNonSollecitare?.Motivo, DescrizioneUnitaImmobiliare = kvp.Key.UnitaImmobiliare.Descrizione, IdSoggettoCondominio = kvp.Key.ID, IdUnitaImmobiliare = kvp.Key.UnitaImmobiliare.ID, IdStabile = kvp.Key.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, IdGruppoStabile = kvp.Key.UnitaImmobiliare.GruppoStabileRiferimento.ID, Stabile = kvp.Key.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, GruppoStabile = kvp.Key.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, Interno = kvp.Key.UnitaImmobiliare.InternoCompleto, Piano = kvp.Key.UnitaImmobiliare.Piano, ImportoMora = kvp.Value, Nominativo = kvp.Key.DisplayName, Ordine = kvp.Key.UnitaImmobiliare.Ordine.GetValueOrDefault(), IdEsercizio = esercizio.ID, DescrizioneEsercizio = esercizio.DisplayName, IdCondominio = esercizio.CondominioRiferimento.ID, DescrizioneCondominio = esercizio.CondominioRiferimento.DisplayName, NumeroSolleciti = kvp.Key.Solleciti.Count(item => item.Esercizio.ID == idEsercizio), SelectColumn = true, TipoSoggettoCondominio = kvp.Key.Tipo, Importo = (esercizio.Rate.Where(rata => rata.DataScadenza <= dataSituazioneContabile && rata.Soggetto.ID == kvp.Key.ID)).Sum(item => item.Importo) }; var contatti = new ContattoCollection(kvp.Key.Persona.Contatti); var contattoEmail = contatti.GetFirstContatto<Email>(); if (contattoEmail != null) dettaglioRiepilogo.Email = contattoEmail.Valore; var contattoEmailCertificato = contatti.GetFirstContatto<EmailCertificata>(); if (contattoEmailCertificato != null) dettaglioRiepilogo.EmailCertificata = contattoEmailCertificato.Valore; var contattoCellulare = contatti.GetFirstContatto<Cellulare>(); if (contattoCellulare != null) dettaglioRiepilogo.Cellulare = contattoCellulare.Valore; var contattoFax = contatti.GetFirstContatto<Fax>(); if (contattoFax != null) dettaglioRiepilogo.Fax = contattoFax.Valore; var importoVersato = (from versato in importiVersati where versato.Id == kvp.Key.ID select versato).SingleOrDefault(); if (importoVersato != null) dettaglioRiepilogo.ImportoVersato = importoVersato.Importo; if (kvp.Key.UnitaImmobiliare.Ordine != null) dettaglioRiepilogo.Ordine = kvp.Key.UnitaImmobiliare.Ordine.Value; riepilogo.Add(dettaglioRiepilogo); } } return riepilogo; } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato nel calcolo degli interessi di mora - {0} - esercizio:{1}", ex, Utility.GetMethodDescription(), idEsercizio); throw; } }
public IList<RiepilogoRataSoggettoDTO> GetRiepilogoVersamentiByPersonaUnitaImmobiliari(int idEsercizio, int idPersona, IList<int> unitaImmobiliari, DateTime? dataLimite) { var esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio, false); var personeDaNonSollecitare = esercizio.CondominioRiferimento.PersoneDaNonSollecitare; // ======================================================================= // Identifico i soggetti di cui viene richiesto il riepilogo versamenti // ======================================================================= var soggetti = _daoFactory.GetSoggettoCondominioDao().GetByCondominioPersona(esercizio.CondominioRiferimento.ID, idPersona); var idSoggetti = new List<int>(soggetti.Count); var soggettiPartecipanti = new List<SoggettoCondominio>(soggetti.Count); foreach (var soggetto in soggetti) { if (unitaImmobiliari.Contains(soggetto.UnitaImmobiliare.ID)) { idSoggetti.Add(soggetto.ID); soggettiPartecipanti.Add(soggetto); } } // ======================================================================= // Leggo rate e versamenti // ======================================================================= if (idSoggetti.Count > 0) { var importiRate = _daoFactory.GetRataSoggettoDao().GetTotaleRateByEsercizioDataSoggetti(idEsercizio, idSoggetti, dataLimite); var importiRateSoggettoEffettivo = _daoFactory.GetRataSoggettoDao().GetTotaleRateByEsercizioDataSoggettiEffettivo(idEsercizio, idSoggetti, dataLimite); foreach (var importiDTO in importiRateSoggettoEffettivo) { var dto = importiDTO; var importoVersato = importiRate.FirstOrDefault(item => item.Id == dto.Id); if (importoVersato != null) importoVersato.Importo += importiDTO.Importo; else importiRate.Add(importiDTO); } IList<ImportiDTO> importiVersati = (from importo in _daoFactory.GetVersamentoSoggettoDao().GetTotaleVersamentiByEsercizioSoggettoData(idEsercizio, null, null, dataLimite) where idSoggetti.Contains(importo.Id) select importo).ToList(); IList<ImportiDTO> importiVersatiSoggettoEffettivo = (from importo in _daoFactory.GetVersamentoSoggettoDao().GetTotaleVersamentiByEsercizioSoggettoEffettivoData(idEsercizio, dataLimite) where idSoggetti.Contains(importo.Id) select importo).ToList(); foreach (var importiDTO in importiVersatiSoggettoEffettivo) { var dto = importiDTO; var importoVersato = importiVersati.FirstOrDefault(item => item.Id == dto.Id); if (importoVersato != null) importoVersato.Importo += importiDTO.Importo; else importiVersati.Add(importiDTO); } // ===================================================================================== // Per ogni soggetto calcolo totale delle rate emesse e totale dei versamenti eseguiti // Tenere presente che un versamento può NON avere una rata associata // ===================================================================================== var riepilogoRate = new List<RiepilogoRataSoggettoDTO>(soggettiPartecipanti.Count); foreach (var soggetto in soggettiPartecipanti) { var personaDaNonSollecitare = personeDaNonSollecitare.FirstOrDefault(item => item.Persona.ID == soggetto.Persona.ID); var soggetto1 = soggetto; var riepilogo = new RiepilogoRataSoggettoDTO { ID = soggetto.ID, DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione, IdPersona = soggetto.Persona.ID, NonSollecitare = personaDaNonSollecitare != null ? 1 : 0, MotivoNonSollecitare = personaDaNonSollecitare?.Motivo, IdSoggettoCondominio = soggetto.ID, TipoSoggettoCondominio = soggetto.Tipo, IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID, IdStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, IdGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, Stabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, GruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, Nominativo = soggetto.DisplayName, Ordine = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(), Interno = soggetto.UnitaImmobiliare.InternoCompleto, Piano = soggetto.UnitaImmobiliare.Piano, IdEsercizio = esercizio.ID, DescrizioneEsercizio = esercizio.DisplayName, IdCondominio = esercizio.CondominioRiferimento.ID, DescrizioneCondominio = esercizio.CondominioRiferimento.DisplayName, NumeroSolleciti = soggetto.Solleciti.Count(item => item.Esercizio.ID == idEsercizio), SelectColumn = true, Importo = importiRate.Where(imp => imp.Id == soggetto1.ID).Sum(imp => imp.Importo), ImportoVersato = importiVersati.Where(imp => imp.Id == soggetto1.ID).Sum(imp => imp.Importo) }; var contatti = new ContattoCollection(soggetto.Persona.Contatti); var contattoEmail = contatti.GetFirstContatto<Email>(); if (contattoEmail != null) riepilogo.Email = contattoEmail.Valore; var contattoEmailCertificato = contatti.GetFirstContatto<EmailCertificata>(); if (contattoEmailCertificato != null) riepilogo.EmailCertificata = contattoEmailCertificato.Valore; var contattoCellulare = contatti.GetFirstContatto<Cellulare>(); if (contattoCellulare != null) riepilogo.Cellulare = contattoCellulare.Valore; var contattoFax = contatti.GetFirstContatto<Fax>(); if (contattoFax != null) riepilogo.Fax = contattoFax.Valore; if (riepilogo.ImportoVersato > 0 || riepilogo.Importo > 0) riepilogoRate.Add(riepilogo); } return riepilogoRate; } return new List<RiepilogoRataSoggettoDTO>(); }
public List<RiepilogoRataSoggettoDTO> GetRiepilogoRataSoggettoByEsercizio(int idEsercizio, bool? rateDaRichiamare) { var lista = new List<RiepilogoRataSoggettoDTO>(); var esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio, false); var personeDaNonSollecitare = esercizio.CondominioRiferimento.PersoneDaNonSollecitare; var rate = _daoFactory.GetRataSoggettoDao().GetByEsercizioSoggetti(esercizio.ID, null, null, null, rateDaRichiamare); foreach (var rata in rate) { if (rata.Importo > 0) { var personaDaNonSollecitare = personeDaNonSollecitare.FirstOrDefault(item => item.Persona.ID == rata.Soggetto.Persona.ID); var rata1 = rata; var riepilogoRata = (from riepiloghiRate in lista where riepiloghiRate.IdSoggettoCondominio == rata1.Soggetto.ID select riepiloghiRate).SingleOrDefault(); if (riepilogoRata == null) { riepilogoRata = new RiepilogoRataSoggettoDTO { DescrizioneUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.Descrizione, DisplayName = rata.Soggetto.DisplayName, ID = rata.Soggetto.ID, IdSoggettoCondominio = rata.Soggetto.ID, IdPersona = rata.Soggetto.Persona.ID, IdUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.ID, IdStabile = rata.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, IdGruppoStabile = rata.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, Stabile = rata.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, GruppoStabile = rata.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, Interno = rata.Soggetto.UnitaImmobiliare.InternoCompleto, Piano = rata.Soggetto.UnitaImmobiliare.Piano, Importo = rata.Importo, Nominativo = rata.Soggetto.DisplayName, IdEsercizio = rata.Esercizio.ID, DescrizioneEsercizio = rata.Esercizio.DisplayName, IdCondominio = rata.Esercizio.CondominioRiferimento.ID, DescrizioneCondominio = rata.Esercizio.CondominioRiferimento.DisplayName, NonSollecitare = personaDaNonSollecitare != null ? 1 : 0, MotivoNonSollecitare = personaDaNonSollecitare?.Motivo, NumeroSolleciti = rata.Solleciti.Count, TipoSoggettoCondominio = rata.Soggetto.Tipo }; var contatti = new ContattoCollection(rata.Soggetto.Persona.Contatti); var contattoEmail = contatti.GetFirstContatto<Email>(); if(contattoEmail != null) riepilogoRata.Email = contattoEmail.Valore; var contattoEmailCertificato = contatti.GetFirstContatto<EmailCertificata>(); if(contattoEmailCertificato != null) riepilogoRata.EmailCertificata = contattoEmailCertificato.Valore; var contattoCellulare = contatti.GetFirstContatto<Cellulare>(); if (contattoCellulare != null) riepilogoRata.Cellulare = contattoCellulare.Valore; var contattoFax = contatti.GetFirstContatto<Fax>(); if (contattoFax != null) riepilogoRata.Fax = contattoFax.Valore; if (rata.Soggetto.UnitaImmobiliare.Ordine != null) riepilogoRata.Ordine = rata.Soggetto.UnitaImmobiliare.Ordine.Value; riepilogoRata.SelectColumn = rata.Soggetto.VersamentoMav; lista.Add(riepilogoRata); } else { riepilogoRata.Importo += rata.Importo; riepilogoRata.NumeroSolleciti += rata.Solleciti.Count; } } } return lista; }
private RiepilogoRataSoggettoDTO getItemTemplate(SoggettoCondominio soggetto, ImpostazioniAzienda impostazioni, DateTime data) { var riepilogo = new RiepilogoRataSoggettoDTO { ID = soggetto.ID, TipoSoggettoCondominio = soggetto.Tipo, DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione, IdPersona = soggetto.Persona.ID, IdSoggettoCondominio = soggetto.ID, IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID, IdStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, IdGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, Stabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, GruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, Nominativo = soggetto.DisplayName, Ordine = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(), Interno = soggetto.UnitaImmobiliare.InternoCompleto, Piano = soggetto.UnitaImmobiliare.Piano, IdCondominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID, DescrizioneCondominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.DisplayName, SelectColumn = true }; var contatti = new ContattoCollection(soggetto.Persona.Contatti); var contattoEmail = contatti.GetFirstContatto<Email>(); if (contattoEmail != null) riepilogo.Email = contattoEmail.Valore; var contattoEmailCertificato = contatti.GetFirstContatto<EmailCertificata>(); if (contattoEmailCertificato != null) riepilogo.EmailCertificata = contattoEmailCertificato.Valore; var contattoCellulare = contatti.GetFirstContatto<Cellulare>(); if (contattoCellulare != null) riepilogo.Cellulare = contattoCellulare.Valore; var contattoFax = contatti.GetFirstContatto<Fax>(); if (contattoFax != null) riepilogo.Fax = contattoFax.Valore; setIndirizzo(riepilogo, soggetto.Persona, impostazioni); return riepilogo; }
private RiepilogoRataSoggettoDTO getItemTemplate(Persona persona, ImpostazioniAzienda impostazioni) { var riepilogo = new RiepilogoRataSoggettoDTO { ID = persona.ID, IdPersona = persona.ID, Nominativo = persona.DisplayName, TipoSoggettoCondominio = TipoSoggetto.Proprietario, SelectColumn = true }; var contatti = new ContattoCollection(persona.Contatti); var contattoEmail = contatti.GetFirstContatto<Email>(); if (contattoEmail != null) riepilogo.Email = contattoEmail.Valore; var contattoEmailCertificato = contatti.GetFirstContatto<EmailCertificata>(); if (contattoEmailCertificato != null) riepilogo.EmailCertificata = contattoEmailCertificato.Valore; var contattoCellulare = contatti.GetFirstContatto<Cellulare>(); if (contattoCellulare != null) riepilogo.Cellulare = contattoCellulare.Valore; var contattoFax = contatti.GetFirstContatto<Fax>(); if (contattoFax != null) riepilogo.Fax = contattoFax.Valore; setIndirizzo(riepilogo, persona, impostazioni); return riepilogo; }
private void setIndirizzo(RiepilogoRataSoggettoDTO dto, Persona persona, ImpostazioniAzienda impostazioni) { // ================================================================== // Indirizzo // ================================================================== dto.Indirizzo = new AddressComunicazioneDTO { RecapitoResidenza = impostazioni.TipoIndirizzoComunicazioni }; if (persona.IndirizzoResidenza != null) { dto.Indirizzo.CapResidenza = persona.IndirizzoResidenza.Cap; dto.Indirizzo.LocalitaResidenza = persona.IndirizzoResidenza.Localita; // Località per ora viene stampata com campo singolo // personaDto.Indirizzo.ComuneResidenza = soggetto.Persona.IndirizzoResidenza.Localita; if (persona.IndirizzoResidenza.Comune != null) { if (!string.IsNullOrEmpty(dto.Indirizzo.ComuneResidenza)) dto.Indirizzo.ComuneResidenza += " - "; dto.Indirizzo.ComuneResidenza += persona.IndirizzoResidenza.Comune.Descrizione + " " + persona.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice; } dto.Indirizzo.ViaCivicoResidenza = persona.IndirizzoResidenza.Indirizzo + " " + persona.IndirizzoResidenza.Civico; if (!string.IsNullOrEmpty(persona.IndirizzoResidenza.Presso)) dto.Indirizzo.ViaCivicoResidenza += " - c/o:" + persona.IndirizzoResidenza.Presso; } if (persona.Recapito != null) { dto.Indirizzo.CapRecapito = persona.Recapito.Cap; dto.Indirizzo.LocalitaRecapito = persona.Recapito.Localita; // Località per ora viene stampata com campo singolo // personaDto.Indirizzo.ComuneRecapito = soggetto.Persona.Recapito.Localita; if (persona.Recapito.Comune != null) { if (!string.IsNullOrEmpty(dto.Indirizzo.ComuneRecapito)) dto.Indirizzo.ComuneRecapito += " - "; dto.Indirizzo.ComuneRecapito += persona.Recapito.Comune.Descrizione + " " + persona.Recapito.Comune.ProvinciaAppartenenza.Codice; } dto.Indirizzo.ViaCivicoRecapito = persona.Recapito.Indirizzo + " " + persona.Recapito.Civico; if (!string.IsNullOrEmpty(persona.Recapito.Presso)) dto.Indirizzo.ViaCivicoRecapito += " - c/o:" + persona.Recapito.Presso; } else { dto.Indirizzo.ViaCivicoRecapito = dto.Indirizzo.ViaCivicoResidenza; dto.Indirizzo.CapRecapito = dto.Indirizzo.CapResidenza; dto.Indirizzo.ComuneRecapito = dto.Indirizzo.ComuneResidenza; } dto.ViaCivico = dto.Indirizzo.ViaCivicoRecapito; dto.Cap = dto.Indirizzo.CapRecapito; dto.Comune = dto.Indirizzo.ComuneRecapito; dto.Localita = dto.Indirizzo.LocalitaRecapito; // ================================================================== }
private void apriDettaglioPersona(RiepilogoRataSoggettoDTO riepilogo) { if (riepilogo != null) { if (riepilogo.IdPersona > 0) { var form = getDettaglioPersonaService().GetFormDettaglio(riepilogo.IdPersona); if (_condominio != null) { getDettaglioPersonaService().AfterUpdatePersona -= listaPersoneUCAfterUpdatePersona; getDettaglioPersonaService().AfterUpdatePersona += listaPersoneUCAfterUpdatePersona; } form.ShowDialog(); form.Dispose(); } } }
private void listaMouseUp(object sender, MouseEventArgs e) { _personaClick = null; if (e.Button == MouseButtons.Right) { DataGridHelper.GetCellEvent(listaRiepilogo, e); _personaClick = DataGridHelper.GetCellEvent<RiepilogoRataSoggettoDTO>(listaRiepilogo, e); if (_personaClick != null) contextMenuStrip1.Show(listaRiepilogo, e.X, e.Y); } }