Ejemplo n.º 1
0
        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 RisultatoRegistrazione CreateUtente(int idAzienda, string username, string password)
        {
            var message = string.Empty;
            string codiceUtente = null;

            try
            {
                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);
                if(azienda.Amministratore?.PersonaRiferimento == null)
                    return new RisultatoRegistrazione("KO", "Non è possibile creare l'utente per le funzioni di messaggistica perchè non è stato definito l'amministratore dello studio.");

                if (azienda.IndirizzoSede?.Comune == null)
                    return new RisultatoRegistrazione("KO", "Non è possibile creare l'utente per le funzioni di messaggistica perchè non è l'indirizzo dello studio è incompleto.");

                if (string.IsNullOrEmpty(azienda.PartitaIva))
                    return new RisultatoRegistrazione("KO", "Non è possibile creare l'utente per le funzioni di messaggistica perchè non è presente la partita iva dello studio.");

                var contatti = new ContattoCollection(azienda.Amministratore.PersonaRiferimento.Contatti);
                var emailContatto = contatti.GetFirstContatto<Email>();
                var telefonoContatto = contatti.GetFirstContatto<Telefono>();
                string email;
                string telefono;
                if (emailContatto == null || telefonoContatto == null)
                    return new RisultatoRegistrazione(null, "Non è possibile creare l'utenza di messaggistica perchè non è presente la mail o il telefono dell'amministratore nell'anagrafica dello studio");
                else
                {
                    email = emailContatto.Valore;
                    telefono = telefonoContatto.Valore;
                }

                var service = new Users();
                var result = service.SignUp(username, password, azienda.Descrizione, azienda.Amministratore.PersonaRiferimento.Nome, azienda.Amministratore.PersonaRiferimento.Cognome, azienda.IndirizzoSede.Indirizzo, azienda.IndirizzoSede.Comune.Descrizione, "Italy", azienda.IndirizzoSede.Cap, "Italy", null, telefono, null, null, null, email, null, null, null);
                if (result.success)
                {
                    _log.InfoFormat("E' stato creato l'utente: {0} - {1} - azienda:{2} - email:{3} - password:{4}", email, Library.Utility.GetMethodDescription(), idAzienda, email, password);
                    codiceUtente = result.description;
                    
                    //message = service.AssociateUserWithAgent(email, password, 4);
                    //if (!message.StartsWith("OK"))
                    //{
                    //    _log.WarnFormat("Fallita l'associazione tra utente e agente per il servizio di messaggistica - {0} - result:{1} - azienda:{2} - email:{3} - password:{4}", Library.Utility.GetMethodDescription(), message, idAzienda, email, password);
                    //}
                }
                else
                {
                    _log.FatalFormat("Errore inaspettato durante la creazione dell'utente per il servizio di messaggistica - {0} - result:{1} - azienda:{2} - email:{3} - password:{4}", Library.Utility.GetMethodDescription(), message, idAzienda, email, password);
                    message = result.description;
                    //var errore = _daoFactory.GetMessaggioErroreMessaggisticaDao().Find(result.CodeError, false);
                    //if (errore != null)
                    //    message = errore.Descrizione;
                }
            }
            catch(Exception ex)
            {
                _log.FatalFormat("Errore inaspettato durante la creazione dell'utente per il servizio di messaggistica - {0} - azienda:{1} - email:{2} - password:{3}", ex, Library.Utility.GetMethodDescription(), idAzienda, username, password);
                message = "La registrazione non è andata a buon fine.";
            }

            return new RisultatoRegistrazione { Message = message, Codice = codiceUtente };
        }
Ejemplo n.º 3
0
        public IEnumerable<PersonaContattoDTO> SetContattoDto(Persona item, TipoNominativo? tipoNominativo, DateTime? dataRiferimento, TipoIndirizzo? tipoIndirizzo, ImpostazioniAzienda impostazioniAzienda)
        {
            try
            {
                var listaDto = new List<PersonaContattoDTO>();
                var mainDTO = new PersonaContattoDTO
                {
                    ID = item.ID,
                    Azienda = item.AziendaID.GetValueOrDefault(),
                    Iban = item.Iban,
                    CodiceFiscale = item.CodiceFiscale,
                    Cognome = item.Cognome,
                    DataNascita = item.DataNascita,
                    DisplayName = item.DisplayName,
                    Nome = item.Nome,
                    Note = item.Note,
                    PartitaIva = item.PartitaIva,
                    RagioneSociale = item.RagioneSociale,
                    Sesso = item.Sesso,
                    TipoPersona = item.TipoPersona,
                    Titolo = item.Titolo,
                    IsDeleteAllow = false,
                    Username = item.DatiAutenticazione?.Username,
                    Password = item.DatiAutenticazione?.Password,
                    Barcode = item.GetBarcode(),
                    Version = item.Version
                };

                if (string.IsNullOrEmpty(mainDTO.Cognome) && string.IsNullOrEmpty(mainDTO.Nome))
                    mainDTO.Cognome = mainDTO.RagioneSociale;

                var gruppi = string.Empty;
                foreach (var personaGruppo in item.Gruppi)
                {
                    if (!string.IsNullOrEmpty(gruppi))
                        gruppi += ", ";
                    gruppi += personaGruppo.Gruppo.DescrizioneBreve;
                }
                mainDTO.Gruppi = gruppi;

                if (item.ComuneNascita != null)
                {
                    try
                    {
                        mainDTO.ComuneNascita = item.ComuneNascita.Descrizione;
                    }
                    catch (Exception ex)
                    {
                        _log.WarnFormat("Errore nel caricamento delle persone - COMUNE NASCITA - {0} - id:{1}", ex, Utility.GetMethodDescription(), item.ID);
                    }

                }

                // Indirizzi
                setIndirizzo(mainDTO, item, tipoIndirizzo, impostazioniAzienda);
                //if ((tipoIndirizzo == TipoIndirizzo.Residenza && item.IndirizzoResidenza != null) || (tipoIndirizzo == TipoIndirizzo.Recapito && item.Recapito == null))
                //{
                //    var indirizzo = _locRep.GetAddressByDomainEntity(item.IndirizzoResidenza);
                //    mainDTO.Indirizzo = indirizzo.DisplayName;
                //    mainDTO.Comune = indirizzo.DescrizioneComune + " " + indirizzo.CodiceProvincia;
                //    mainDTO.Localita = indirizzo.Localita;
                //    mainDTO.Cap = indirizzo.Cap;
                //    mainDTO.Presso = indirizzo.Presso;
                //}
                //else if (item.Recapito != null)
                //{
                //    var recapito = _locRep.GetAddressByDomainEntity(item.Recapito);
                //    mainDTO.Recapito = recapito.DisplayName;
                //    mainDTO.Indirizzo = recapito.DisplayName;
                //    mainDTO.Comune = recapito.DescrizioneComune + " " + recapito.CodiceProvincia;
                //    mainDTO.Localita = recapito.Localita;
                //    mainDTO.Cap = recapito.Cap;
                //    mainDTO.Presso = recapito.Presso;
                //}

                // Contatti
                var contatti = new ContattoCollection(item.Contatti);
                var tel = contatti.GetFirstContatto<Telefono>();
                if (tel != null)
                {
                    mainDTO.Telefono = tel.Valore;
                    if(!string.IsNullOrEmpty(tel.Descrizione))
                        mainDTO.Telefono += " (" + tel.Descrizione + ")";
                }
                
                var cell = contatti.GetFirstContatto<Cellulare>();
                if (cell != null)
                {
                    mainDTO.Cellulare = cell.Valore;
                    if (!string.IsNullOrEmpty(cell.Descrizione))
                        mainDTO.Cellulare += " (" + cell.Descrizione + ")";
                }
                
                var mail = contatti.GetFirstContatto<Email>();
                if (mail != null)
                {
                    mainDTO.Email = mail.Valore;
                    if (!string.IsNullOrEmpty(mail.Descrizione))
                        mainDTO.Email += " (" + mail.Descrizione + ")";
                }

                var mailCertificata = contatti.GetFirstContatto<EmailCertificata>();
                if (mailCertificata != null)
                {
                    mainDTO.EmailCertificata = mailCertificata.Valore;
                    if (!string.IsNullOrEmpty(mailCertificata.Descrizione))
                        mainDTO.EmailCertificata += " (" + mailCertificata.Descrizione + ")";
                }
                
                var fax = contatti.GetFirstContatto<Fax>();
                if (fax != null)
                {
                    mainDTO.Fax = fax.Valore;
                    if (!string.IsNullOrEmpty(fax.Descrizione))
                        mainDTO.Fax += " (" + fax.Descrizione + ")";
                }

                // Dati condominio
                if (item.SoggettiCondominio.Count > 0)
                {
                    SoggettoCondominio soggetto = null;
                    if(item.SoggettiCondominio.Count(soggettoItem => soggettoItem.DataFine == null) == 1)
                        soggetto = item.SoggettiCondominio.Where(soggettoItem => soggettoItem.DataFine == null).OrderBy(pers => pers.Tipo).FirstOrDefault();
                    if(soggetto == null)
                        soggetto = item.SoggettiCondominio.OrderBy(soggettoItem => soggettoItem.Tipo).ThenByDescending(soggettoItem => soggettoItem.DataFine).ThenByDescending(soggettoItem => soggettoItem.DataInizio).ThenBy(soggettoItem => soggettoItem.UnitaImmobiliare.Ordine.GetValueOrDefault()).FirstOrDefault();
                    if(soggetto != null)
                    {
                        if (soggetto.UnitaImmobiliare != null)
                        {
                            if (tipoNominativo.GetValueOrDefault() != TipoNominativo.CondominoAttivo || dataRiferimento == null || soggetto.DataFine == null || soggetto.DataFine.GetValueOrDefault() > dataRiferimento.GetValueOrDefault())
                            {
                                var dto = mainDTO.Clone() as PersonaContattoDTO;
                                if (dto != null)
                                {
                                    dto.IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID;
                                    dto.IdSoggetto = soggetto.ID;
                                    dto.DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione;
                                    dto.OrdineUnitaImmobiliare = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault();
                                    dto.Interno = soggetto.UnitaImmobiliare.InternoCompleto;
                                    dto.TipoCondomino = soggetto.Tipo.ToString();
                                    dto.TipoSoggetto = TipoNominativo.Condomino;
                                    dto.DescrizioneSoggetto = soggetto.DescrizioneAggiuntiva;
                                    dto.IsResidente = soggetto.IsResidente;
                                    dto.IsConsigliere = soggetto.Consigliere;
                                    dto.SoggettoAccorpamento = soggetto.GetDescrizioneAccorpamento();
                                    dto.ModalitaConvocazione = soggetto.ModalitaConvocazione;
                                    dto.FoglioCatastale = soggetto.UnitaImmobiliare.FoglioCatastale;
                                    dto.Mappale = soggetto.UnitaImmobiliare.Mappale;
                                    dto.Subalterno = soggetto.UnitaImmobiliare.Subalterno;

                                    if(soggetto.FrazionePossesso != null)
                                        dto.Possesso = soggetto.FrazionePossesso.ToString();

                                    if (soggetto.UnitaImmobiliare.GruppoStabileRiferimento != null)
                                    {
                                        dto.IdGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID;
                                        dto.DescrizioneGruppoStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione;
                                        dto.IdStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID;
                                        dto.DescrizioneStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione;
                                        dto.IdCondominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID;
                                        dto.DescrizioneCondominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.DisplayName;
                                    }

                                    listaDto.Add(dto);
                                }
                            }
                        }
                        else
                        {
                            _log.WarnFormat("Attenzione presente soggetto condominio senza unità immobiliare - {0} - soggetto:{1} - persona:{2}", Utility.GetMethodDescription(), soggetto.ID, item.ID);
                        }
                    }
                }

                // Dati Fornitore
                if (item.Fornitori.Count > 0)
                {
                    foreach (var fornitore in item.Fornitori)
                    {
                        var dto = mainDTO.Clone() as PersonaContattoDTO;
                        if (dto != null)
                        {
                            dto.IdFornitore = fornitore.ID;
                            dto.TipoFornitore = fornitore.Tipo?.Descrizione;
                            dto.TipoSoggetto = TipoNominativo.Fornitore;
                            listaDto.Add(dto);
                        }
                    }
                }

                // Dati Referente
                if (item.Referenti.Count > 0)
                {
                    foreach (var dto in item.Referenti.Select(referente => mainDTO.Clone()).OfType<PersonaContattoDTO>())
                    {
                        dto.TipoSoggetto = TipoNominativo.Referente;
                        listaDto.Add(dto);
                    }
                }

                if (listaDto.Count == 0 && tipoNominativo.GetValueOrDefault() != TipoNominativo.CondominoAttivo)
                {
                    if (item.Attivita.Count == 0)
                        mainDTO.IsDeleteAllow = true;
                    mainDTO.TipoSoggetto = TipoNominativo.Contatto;
                    listaDto.Add(mainDTO);
                }

                return listaDto;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento delle persone - {0} - id:{1}", ex, Utility.GetMethodDescription(), item.ID);
                throw;
            }
        }
Ejemplo n.º 4
0
        public string MailMerge(string rtf, ParametriStampaUnione parametriStampaUnione, int idAzienda)
        {
            var condominio = _daoFactory.GetCondominioDao().Find(parametriStampaUnione.IdCondominio.GetValueOrDefault(), false);
            var tipoIndirizzo = parametriStampaUnione.TipoIndirizzo;
            var telefonoDaContattare = string.Empty;
            var segnalatoreProblema = string.Empty;

            Persona persona = null;
            if(parametriStampaUnione.IdPersona != null)
                persona = _daoFactory.GetPersonaDao().Find(parametriStampaUnione.IdPersona.GetValueOrDefault(), false);
            if(persona == null)
                persona = _daoFactory.GetPersonaDao().Find(parametriStampaUnione.IdPersonaAttiva.GetValueOrDefault(), false);

            DatiBancariCondomini datiBancari = null;
            if (parametriStampaUnione.IdDatiBancari > 0)
            {
                datiBancari = _daoFactory.GetDatiBancariCondominiDao().Find(parametriStampaUnione.IdDatiBancari.GetValueOrDefault(), false);
                if (condominio == null)
                    condominio = datiBancari.CondominioRiferimento;
            }
            else if (condominio != null)
                datiBancari = condominio.DatiBancariPrincipale;

            //===============================================
            // Azienda
            //===============================================
            var amministratore = string.Empty;
            var codiceFiscaleAmministratore = string.Empty;
            var partitaIvaAmministratore = string.Empty;
            var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);
            if (azienda.Amministratore != null)
            {
                amministratore = azienda.Amministratore.PersonaRiferimento.DisplayName;
                codiceFiscaleAmministratore = azienda.Amministratore.PersonaRiferimento.CodiceFiscale;
                partitaIvaAmministratore = azienda.Amministratore.PersonaRiferimento.PartitaIva;
            }

            // ===========================================
            //  Condominio
            // ===========================================
            var codiceCondominio = string.Empty;
            var descrizioneCondominio = string.Empty;
            var codiceFiscaleCondominio = string.Empty;
            var indirizzoCondominio = string.Empty;
            var localitaCondominio = string.Empty;

            var ibanCondominio = string.Empty;
            var contoCorrente = string.Empty;
            var cin = string.Empty;
            var abi = string.Empty;
            var cab = string.Empty;
            var banca = string.Empty;

            var capCondominio = string.Empty;
            var comuneCondominio = string.Empty;
            var provinciaCondominio = string.Empty;
            var foglioCatastale = string.Empty;
            var mappaleCatastale = string.Empty;
            var codiceCatastale = string.Empty;
            var responsabileCondominio = string.Empty;

            if (datiBancari != null)
            {
                contoCorrente = datiBancari.ContoCorrente;
                cin = datiBancari.Cin;
                abi = datiBancari.Abi;
                cab = datiBancari.Cab;
                ibanCondominio = datiBancari.Iban;

                var abiCab = _daoFactory.GetAbiCabDao().Find(new AbiCabId(abi, cab), false);
                banca = abiCab != null ? $"{abiCab.DescrizioneAbi} - {abiCab.DescrizioneCab}" : datiBancari.DisplayName;
            }

            if (condominio != null)
            {
                codiceCondominio = condominio.Codice;
                descrizioneCondominio = condominio.Descrizione;
                foglioCatastale = condominio.FoglioCatastale.ToString();
                mappaleCatastale = condominio.MappaleCatastale.ToString();

                codiceFiscaleCondominio = condominio.CodiceFiscale;
                if (condominio.Indirizzo != null)
                {
                    indirizzoCondominio = condominio.Indirizzo.GetIndirizzoCompleto();
                    capCondominio = condominio.Indirizzo.Cap;
                    if (condominio.Indirizzo.Comune != null)
                    {
                        comuneCondominio = condominio.Indirizzo.Comune.Descrizione;
                        localitaCondominio = condominio.Indirizzo.Comune.Descrizione;
                        provinciaCondominio = condominio.Indirizzo.Comune.ProvinciaAppartenenza.Codice;
                        codiceCatastale = condominio.Indirizzo.Comune.CodiceCatastale;
                    }
                }

                if (condominio.Responsabile != null)
                    responsabileCondominio = condominio.Responsabile.DisplayName;
            }

            // ===========================================
            //  Esercizio
            // ===========================================
            var esercizio = string.Empty;
            var tipoRange = string.Empty;
            if (parametriStampaUnione.IdEsercizio != null)
            {
                tipoRange = "Esercizio";
                var es = _daoFactory.GetEsercizioDao().Find(parametriStampaUnione.IdEsercizio.GetValueOrDefault(), false);
                esercizio = es.DisplayName;
            }
            else if (parametriStampaUnione.DataIniziale != null && parametriStampaUnione.DataFinale != null)
            {
                tipoRange =
                    $"Data iniziale: {parametriStampaUnione.DataIniziale} - Data finale:{parametriStampaUnione.DataFinale}";
            }

            //===============================================
            // Fornitore
            //===============================================
            var fornitore = string.Empty;
            if (parametriStampaUnione.IdFornitore != null)
            {
                var forn = _daoFactory.GetFornitoreDao().Find(parametriStampaUnione.IdFornitore.GetValueOrDefault(), false);
                if (forn != null)
                {
                    fornitore = forn.DisplayName;
                }
                else
                    _log.WarnFormat("Fornitore NON trovato - {0} - fornitore:{1}", Utility.GetMethodDescription(), parametriStampaUnione.IdFornitore.GetValueOrDefault());
            }

            //===============================================
            // Responsabile
            //===============================================
            var responsabile = string.Empty;
            if (parametriStampaUnione.IdResponsabile != null)
            {
                var resp = _daoFactory.GetPersonaDao().Find(parametriStampaUnione.IdResponsabile.GetValueOrDefault(), false);
                if (resp != null)
                {
                    responsabile = resp.DisplayName;
                }
                else
                    _log.WarnFormat("Responsabile NON trovato - {0} - responsabile:{1}", Utility.GetMethodDescription(), parametriStampaUnione.IdResponsabile);
            }

            //===============================================
            // Incaricato
            //===============================================
            var incaricato = string.Empty;
            if (parametriStampaUnione.IdIncaricatoAttivita != null)
            {
                var inc = _daoFactory.GetPersonaDao().Find(parametriStampaUnione.IdIncaricatoAttivita.GetValueOrDefault(), false);
                if (inc != null)
                {
                    incaricato = inc.DisplayName;
                }
                else
                    _log.WarnFormat("Incaricato NON trovato - {0} - incaricato:{1}", Utility.GetMethodDescription(), parametriStampaUnione.IdIncaricatoAttivita);
            }

            //===============================================
            // Persona
            //===============================================
            var titolo = string.Empty;
            var nominativoCompleto = string.Empty;
            var nominativo = string.Empty;
            var nome = string.Empty;
            var cognome = string.Empty;
            var indirizzo = string.Empty;
            var cap = string.Empty;
            var comune = string.Empty;
            var provincia = string.Empty;
            var presso = string.Empty;
            var localita = string.Empty;
            var localitaCompleta = string.Empty;
            var ragioneSociale = string.Empty;
            var username = string.Empty;
            var password = string.Empty;
            var email = string.Empty;

            if (persona != null)
            {
                titolo = Decodifica.Instance.GetElement("TitoloPersona", persona.Titolo).Descrizione;
                if (!string.IsNullOrEmpty(persona.Nome))
                    nome = persona.Nome;
                if (!string.IsNullOrEmpty(persona.Cognome))
                    cognome = persona.Cognome;
                if (string.IsNullOrEmpty(cognome) && !string.IsNullOrEmpty(persona.RagioneSociale))
                    cognome = persona.RagioneSociale;
                if (!string.IsNullOrEmpty(persona.RagioneSociale))
                    ragioneSociale = persona.RagioneSociale;

                if (tipoIndirizzo == TipoIndirizzo.Residenza || persona.Recapito == null)
                {
                    if (persona.IndirizzoResidenza != null)
                    {
                        cap = persona.IndirizzoResidenza.Cap;
                        presso = persona.IndirizzoResidenza.Presso;
                        indirizzo = persona.IndirizzoResidenza.GetIndirizzoCompleto();
                        if (persona.IndirizzoResidenza.Comune != null)
                        {
                            localita = persona.IndirizzoResidenza.Comune.Descrizione;
                            comune = persona.IndirizzoResidenza.Comune.Descrizione;
                            provincia = persona.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice;
                        }

                        if (!string.IsNullOrEmpty(persona.IndirizzoResidenza.Localita))
                            localitaCompleta = $"{persona.IndirizzoResidenza.Localita} - ";
                        localitaCompleta += persona.IndirizzoResidenza.Cap;
                        if (persona.IndirizzoResidenza.Comune != null)
                            localitaCompleta += " " + persona.IndirizzoResidenza.Comune.Descrizione + " " + persona.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice;
                    }
                }
                else if (persona.Recapito != null)
                {
                    cap = persona.Recapito.Cap;
                    presso = persona.Recapito.Presso;
                    indirizzo = persona.Recapito.GetIndirizzoCompleto();
                    if (persona.Recapito.Comune != null)
                    {
                        localita = persona.Recapito.Comune.Descrizione;
                        comune = persona.Recapito.Comune.Descrizione;
                        provincia = persona.Recapito.Comune.ProvinciaAppartenenza.Codice;
                    }

                    if (!string.IsNullOrEmpty(persona.Recapito.Localita))
                        localitaCompleta = $"{persona.Recapito.Localita} - ";
                    localitaCompleta += persona.Recapito.Cap;
                    if (persona.Recapito.Comune != null)
                        localitaCompleta += " " + persona.Recapito.Comune.Descrizione + " " + persona.Recapito.Comune.ProvinciaAppartenenza.Codice;
                }

                var contatti = new ContattoCollection(persona.Contatti);
                var emailContattoCertificata = contatti.GetFirstContatto<EmailCertificata>();
                if (emailContattoCertificata != null)
                    email = emailContattoCertificata.Valore;
                else
                {
                    var emailContatto = contatti.GetFirstContatto<Email>();
                    if (emailContatto != null)
                        email = emailContatto.Valore;
                }

                if (persona.DatiAutenticazione != null)
                {
                    username = persona.DatiAutenticazione.Username;
                    password = persona.DatiAutenticazione.Password;
                }

                nominativo = cognome;
                if (!string.IsNullOrEmpty(nome) && !string.IsNullOrEmpty(cognome))
                    nominativo = $"{nome} {cognome}";
                if (!string.IsNullOrEmpty(titolo))
                    nominativo = $"{titolo}{Environment.NewLine}{nominativo}";

                nominativoCompleto = nominativo;
                if (!string.IsNullOrEmpty(presso))
                    presso = $"c/o {presso}";
                if(!string.IsNullOrEmpty(presso))
                    nominativoCompleto = $"{nominativo}{Environment.NewLine}{presso}";
            }

            // ===========================================
            //  Unità immobiliare
            // ===========================================
            var descrizioneUnitaImmobiliare = string.Empty;
            var pianoUnitaImmobiliare = string.Empty;
            var progressivoUnitaImmobiliare = string.Empty;
            var internoUnitaImmobiliare = string.Empty;
            var tipoUnitaImmobiliare = string.Empty;
            var indirizzoUnitaImmobiliare = string.Empty;
            var gruppoStabile = string.Empty;
            var stabile = string.Empty;

            if (parametriStampaUnione.IdUnitaImmobiliare == null && parametriStampaUnione.IdPersona != null && parametriStampaUnione.IdCondominio != null)
            {
                var soggetto = _daoFactory.GetSoggettoCondominioDao().GetByCondominioPersona(parametriStampaUnione.IdCondominio.Value, parametriStampaUnione.IdPersona.Value).FirstOrDefault();
                if (soggetto != null)
                    parametriStampaUnione.IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID;
            }

            if (parametriStampaUnione.IdUnitaImmobiliare != null)
            {
                var unitaImmobiliare = _daoFactory.GetUnitaImmobiliareDao().Find(parametriStampaUnione.IdUnitaImmobiliare.GetValueOrDefault(), false);
                if (unitaImmobiliare != null)
                {
                    descrizioneUnitaImmobiliare = unitaImmobiliare.Descrizione;
                    pianoUnitaImmobiliare = unitaImmobiliare.Piano;
                    progressivoUnitaImmobiliare = unitaImmobiliare.Ordine.ToString();
                    internoUnitaImmobiliare = unitaImmobiliare.InternoCompleto;

                    if (unitaImmobiliare.TipoUnitaImmobiliare != null)
                        tipoUnitaImmobiliare = unitaImmobiliare.TipoUnitaImmobiliare.Descrizione;

                    if (unitaImmobiliare.GruppoStabileRiferimento?.Indirizzo != null)
                        indirizzoUnitaImmobiliare = unitaImmobiliare.GruppoStabileRiferimento.Indirizzo.DisplayNameArray.FirstOrDefault();

                    if (unitaImmobiliare.GruppoStabileRiferimento != null)
                    {
                        gruppoStabile = unitaImmobiliare.GruppoStabileRiferimento.Descrizione;
                        stabile = unitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione;
                    }

                    if (persona != null)
                    {
                        var soggettoCondominio = unitaImmobiliare.Soggetti.FirstOrDefault(item => item.Persona.ID == persona.ID);
                        if (!string.IsNullOrEmpty(soggettoCondominio.Descrizione))
                            nominativo = soggettoCondominio.Descrizione;
                    }
                }
            }

            // ===========================================
            //  Da Contattare
            // ===========================================
            if (!string.IsNullOrEmpty(parametriStampaUnione.TelefonoDaContattare))
                telefonoDaContattare = parametriStampaUnione.TelefonoDaContattare;
            if (parametriStampaUnione.IdPersonaRichiedente.GetValueOrDefault() > 0)
            {
                var richiedente = _daoFactory.GetPersonaDao().Find(parametriStampaUnione.IdPersonaRichiedente.GetValueOrDefault(), false);
                if (richiedente != null)
                {
                    if (!string.IsNullOrEmpty(richiedente.DisplayName))
                        segnalatoreProblema = richiedente.DisplayName;
                    else
                        _log.WarnFormat("Persona con display name <NULL> - {0} - idPersona:{1}", Utility.GetMethodDescription(), richiedente.ID);
                }
                else
                    _log.WarnFormat("Richiedente NON trovato - {0} - idPersona:{1}", Utility.GetMethodDescription(), parametriStampaUnione.IdPersonaRichiedente.GetValueOrDefault());
            }

            // ===========================================
            //  Testo Lettera (BODY)
            // ===========================================
            var body = ApplicaStampaUnione(parametriStampaUnione.Body, parametriStampaUnione, idAzienda);
                
           // ===========================================
            //  Importi
            // ===========================================
            var importo = string.Empty;
            var importoTotale = string.Empty;
            var importoLettere = string.Empty;
            var importoTotaleLettere = string.Empty;
            var versamenti = string.Empty;
            var saldoEsercizioPrecedente = string.Empty;

            if (parametriStampaUnione.Importo != null)
            {
                importo = parametriStampaUnione.Importo.Value.ToString("C");
                importoLettere = Library.BusinessData.CifreLettere.CalcolaLettere(parametriStampaUnione.Importo.Value);
            }
            if (parametriStampaUnione.ImportoTotale != null)
            {
                importoTotale = parametriStampaUnione.ImportoTotale.Value.ToString("C");
                importoTotaleLettere = Library.BusinessData.CifreLettere.CalcolaLettere(parametriStampaUnione.ImportoTotale.Value);
            }

            if (parametriStampaUnione.Versamenti != null)
                versamenti = parametriStampaUnione.Versamenti.Value.ToString("C");
            if (parametriStampaUnione.SaldoEsercizioPrecedente != null)
                saldoEsercizioPrecedente = parametriStampaUnione.SaldoEsercizioPrecedente.Value.ToString("C");

            // ===========================================
            //  Date
            // ===========================================
            var dataIniziale = string.Empty;
            var dataFinale = string.Empty;
            var dataAttiva = DateTime.Today.ToShortDateString();
            var dataRedazione = DateTime.Today.ToShortDateString();

            if (parametriStampaUnione.DataIniziale != null)
                dataIniziale = parametriStampaUnione.DataIniziale.Value.ToString("d");
            if (parametriStampaUnione.DataFinale != null)
                dataFinale = parametriStampaUnione.DataFinale.Value.ToString("d");
            if (parametriStampaUnione.DataAttiva != null)
                dataAttiva = parametriStampaUnione.DataAttiva.GetValueOrDefault().ToShortDateString();

            Document document;
            try
            {
                document = new Document(Conversione.ToStream(rtf));
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel mail merge del documento - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), azienda);                
                throw;
            }

            // campi standard
            var fieldNames = new[] { "amministratore", "codiceFiscaleAmministratore", "partitaIvaAmministratore", "codiceCondominio", "condominio", "esercizio", "iban", "codiceFiscaleCondominio", "indirizzoCondominio", "localitaCondominio", "comuneCondominio", "contoCorrente", "cin", "abi", "cab", "banca", "capCondominio", "provinciaCondominio", "foglioCatastale", "mappaleCatastale", "codiceCatastale", "tipoReport", "importo", "importoTotale", "versamenti", "saldo", "dataIniziale", "dataFinale", "tipoRange", "dataAttiva", "dataRedazione", "oggetto", "respCond" };
            var objectValues = new object[] { amministratore, codiceFiscaleAmministratore, partitaIvaAmministratore, codiceCondominio, descrizioneCondominio, esercizio, ibanCondominio, codiceFiscaleCondominio, indirizzoCondominio, localitaCondominio, comuneCondominio, contoCorrente, cin, abi, cab, banca, capCondominio, provinciaCondominio, foglioCatastale, mappaleCatastale, codiceCatastale, parametriStampaUnione.TipoReport, importo, importoTotale, versamenti, saldoEsercizioPrecedente, dataIniziale, dataFinale, tipoRange, dataAttiva, dataRedazione, parametriStampaUnione.Oggetto, responsabileCondominio };
            document.MailMerge.Execute(fieldNames, objectValues);

            // campi relativi alla persona destinataria
            // in caso di assemblea eseguo il mail merge solo se la persona è presente altrimenti vengono lasciati inalterati i campi
            if (parametriStampaUnione.IdAssemblea == null || persona != null)
            {
                fieldNames = new[] { "titolo", "nominativoCompleto", "nome", "cognome", "ragioneSociale", "nominativo", "indirizzo", "presso", "localita", "localita-cap-citta-provincia", "cap", "comune", "pr", "email", "username", "password" };
                objectValues = new object[] { titolo, nominativoCompleto, nome, cognome, ragioneSociale, nominativo, indirizzo, presso, localita, localitaCompleta, cap, comune, provincia, email, username, password };
                document.MailMerge.Execute(fieldNames, objectValues);
            }

            // campi relativi alla unità immobiliare
            fieldNames = new[] { "descrizioneUnita", "piano", "interno", "ordineUnita", "tipoUnita", "indirizzoUnita", "scala", "stabile" };
            objectValues = new object[] { descrizioneUnitaImmobiliare, pianoUnitaImmobiliare, internoUnitaImmobiliare, progressivoUnitaImmobiliare, tipoUnitaImmobiliare, indirizzoUnitaImmobiliare, gruppoStabile, stabile };
            document.MailMerge.Execute(fieldNames, objectValues);

            // campi relativi alla gestione pratiche
            fieldNames = new[] { "telefonoContattare", "segnalatoreProblema", "fornitore", "responsabile", "incaricato", "numeroFaxInvio", "oggettoFax", "mittente", "faxDestinatario", "identificativo" };
            objectValues = new object[] { telefonoDaContattare, segnalatoreProblema, fornitore, responsabile, incaricato, parametriStampaUnione.ContattiDestinatario, parametriStampaUnione.Oggetto, azienda.Descrizione, parametriStampaUnione.FaxDestinatario, parametriStampaUnione.Identificativo };
            document.MailMerge.Execute(fieldNames, objectValues);

            // campi relativi ad importi
            fieldNames = new[] { "importoLettere", "importoTotaleLettere", "detrazione" };
            objectValues = new object[] { importoLettere, importoTotaleLettere, parametriStampaUnione.Detrazione.GetValueOrDefault() };
            document.MailMerge.Execute(fieldNames, objectValues);
            
            // ===========================================
            //  Assemblea
            // ===========================================
            var ordinegiorno = string.Empty;
            if (parametriStampaUnione.IdAssemblea != null)
            {
                var assemblea = _daoFactory.GetAssembleaDao()
                    .Find(parametriStampaUnione.IdAssemblea.GetValueOrDefault(), false);
                if (assemblea != null)
                {
                    var iIndex = 1;
                    foreach (var puntordinegiorno in assemblea.PuntoOrdineGiorno)
                    {
                        if (!string.IsNullOrEmpty(puntordinegiorno.Descrizione))
                        {
                            string sText = puntordinegiorno.Descrizione.Trim();
                            if (sText.StartsWith("{\\rtf"))
                            {
                                if (sText.StartsWith("{\\rtf1")) sText = sText.Substring(6);
                                if (sText.StartsWith("{\\rtf")) sText = sText.Substring(5);
                                sText = sText.Substring(0, sText.Length - 1);
                                //sText = "\\bullet  " + sText + " ";
                                sText = iIndex + ". \\tab" + sText + " "; //"\\line ";
                                iIndex += 1;
                            }
                            ordinegiorno += sText;
                        }
                    }

                    //campi che andranno cambiati solo se presente uno specifico parametro di configurazione...ora li compilo d'ufficio...
                    document.MailMerge.Execute(new[] {"tipoAssemblea"}, new object[] {assemblea.Tipo.ToString()});

                    document.MailMerge.Execute(new[] {"dataPrimaConvocazioneAssemblea"},
                        new object[] {assemblea.DataPrimaConvocazione.ToString("dd MMMM yyyy")});
                    document.MailMerge.Execute(new[] {"giornodataPrimaConvocazioneAssemblea"},
                        new object[] {assemblea.DataPrimaConvocazione.ToString("dd")});
                    document.MailMerge.Execute(new[] { "nomegiornodataPrimaConvocazioneAssemblea" },
                        new object[] { assemblea.DataPrimaConvocazione.ToString("dddd")});
                    document.MailMerge.Execute(new[] {"mesedataPrimaConvocazioneAssemblea"},
                        new object[] {assemblea.DataPrimaConvocazione.ToString("MMMM")});
                    document.MailMerge.Execute(new[] {"annodataPrimaConvocazioneAssemblea"},
                        new object[] {assemblea.DataPrimaConvocazione.ToString("yyyy")});

                    document.MailMerge.Execute(new[] {"dataSecondaConvocazioneAssemblea"},
                        new object[] {assemblea.DataSecondaConvocazione.ToString("dd MMMM yyyy")});
                    document.MailMerge.Execute(new[] {"giornodataSecondaConvocazioneAssemblea"},
                        new object[] {assemblea.DataSecondaConvocazione.ToString("dd")});
                    document.MailMerge.Execute(new[] { "nomegiornodataSecondaConvocazioneAssemblea" },
                        new object[] { assemblea.DataSecondaConvocazione.ToString("dddd") });
                    document.MailMerge.Execute(new[] {"mesedataSecondaConvocazioneAssemblea"},
                        new object[] {assemblea.DataSecondaConvocazione.ToString("MMMM")});
                    document.MailMerge.Execute(new[] {"annodataSecondaConvocazioneAssemblea"},
                        new object[] {assemblea.DataSecondaConvocazione.ToString("yyyy")});

                    document.MailMerge.Execute(new[] {"oraPrimaConvocazioneAssemblea"},
                        new object[] {assemblea.DataPrimaConvocazione.ToString("HH:mm")});
                    document.MailMerge.Execute(new[] {"oraSecondaConvocazioneAssemblea"},
                        new object[] {assemblea.DataSecondaConvocazione.ToString("HH:mm")});
                    document.MailMerge.Execute(new[] {"luogoPrimaConvocazioneAssemblea"},
                        new object[] {assemblea.LuogoPrimaConvocazione});
                    document.MailMerge.Execute(new[] {"luogoSecondaConvocazioneAssemblea"},
                        new object[] {assemblea.LuogoSecondaConvocazione});

                    //cambio ordinegiorno con un tag temporaneo...vedi sotto...
                    document.MailMerge.Execute(new[] {"ordineGiorno"}, new object[] {"%%%%ORDINEGIORNO%%%%"});

                }
            }
            else if(!string.IsNullOrEmpty(body))
            {
                // Solo se non siamo nel caso dell'assemblea per evitare di sbiancare i campi NON compilati
                // testo messaggio
                fieldNames = new[] { "testo", "testoFax", "descrizioneIntervento" };
                objectValues = new object[] { body, body, body };
                document.MailMerge.FieldMergingCallback = new HandleMergeField();
                document.MailMerge.Execute(fieldNames, objectValues);
            }

            // ===========================================
            
            var saveOption = SaveOptions.CreateSaveOptions(SaveFormat.Rtf);

            string result;
            using (var ms = new MemoryStream())
            {
                document.Save(ms, saveOption);
                result = Conversione.ToString(ms);
            }
            
            // ===========================================
            //  Assemblea
            // ===========================================
            //ordinegiorno viene processato come replace perchè è rtf...da valutare in futuro se ci sono strategie migliori(mailmerge non funziona con valori che includono rtf)
            if (!string.IsNullOrEmpty(ordinegiorno)) 
                result = result.Replace("%%%%ORDINEGIORNO%%%%", ordinegiorno);

            return result;
        }
Ejemplo n.º 5
0
        private List<DatiCertificazioneDTO> setDatiCertificazione(List<DatiCertificazioneDTO> dati, Pagamento pag, DateTime? dataPagamentoRitenuta, int anno, bool esenteRegimeMinimo)
        {
            if (pag.RitenutaAcconto != null && (pag.RitenutaAcconto.Importo.GetValueOrDefault() != 0 || esenteRegimeMinimo))
            {
                var datiCertificazione = (from item in dati
                                            where item.IdCondominio == pag.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ID &&
                                            item.IdFornitore == pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.ID
                                            select item).SingleOrDefault();
                if (datiCertificazione == null)
                {
                    datiCertificazione = new DatiCertificazioneDTO
                    {
                        DescrizioneFornitore = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.DisplayName,
                        IdFornitore = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.ID,
                        IdPersona = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ID,
                        CodiceCondominio = pag.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Codice,
                        IdCondominio = pag.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ID,
                        DescrizioneCondominio = pag.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Descrizione,
                        CodiceFiscaleCondominio = pag.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale,
                        CodiceFiscaleFornitore = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.CodiceFiscale,
                        PartitaIvaFornitore = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.PartitaIva,
                        EsenteRegimeMinimo = esenteRegimeMinimo
                    };

                    var contatti = new ContattoCollection(pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Contatti);
                    var contattoEmail = contatti.GetFirstContatto<Email>();
                    if (contattoEmail != null)
                        datiCertificazione.Email = contattoEmail.Valore;
                    var contattoEmailCertificato = contatti.GetFirstContatto<EmailCertificata>();
                    if(contattoEmailCertificato != null)
                        datiCertificazione.EmailCertificata = contattoEmailCertificato.Valore;
                    var contattoFax = contatti.GetFirstContatto<Fax>();
                    if (contattoFax != null)
                        datiCertificazione.Fax = contattoFax.Valore;
                    var contattoCellulare = contatti.GetFirstContatto<Cellulare>();
                    if (contattoCellulare != null)
                        datiCertificazione.Cellulare = contattoCellulare.Valore;

                    if (pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza != null)
                    {
                        var indirizzo = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.DisplayNameArray;
                        datiCertificazione.IndirizzoFornitore = indirizzo[0];
                        datiCertificazione.SecondaRigaIndirizzoFornitore = indirizzo[1];
                        datiCertificazione.CapFornitore = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Cap;
                        if (pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune != null)
                            datiCertificazione.ComuneFornitore = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune.Descrizione;
                    }

                    if (pag.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Indirizzo != null)
                    {
                        var indirizzo = pag.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Indirizzo.DisplayNameArray;
                        datiCertificazione.IndirizzoCondominio = indirizzo[0];
                        datiCertificazione.SecondaRigaIndirizzoCondominio = indirizzo[1];
                    }

                    datiCertificazione.Dettaglio = new List<DettaglioDatiCertificazioneDTO>();

                    dati.Add(datiCertificazione);
                }

                // ========================================================
                //  Dettagli della certificazione
                // ========================================================
                var dettaglioDatiCertificazione = new DettaglioDatiCertificazioneDTO
                {
                    IdCondominio = datiCertificazione.IdCondominio,
                    IdFornitore = datiCertificazione.IdFornitore,
                    CodiceTributo = pag.ScadenzaRiferimento.SpesaRiferimento.FornitoreRiferimento.CodiceTributo,
                    DataFattura = pag.ScadenzaRiferimento.SpesaRiferimento.DataDocumento.GetValueOrDefault(),
                    NumeroFattura = pag.ScadenzaRiferimento.SpesaRiferimento.NumeroDocumento,
                    DataPagamentoFattura = pag.Data.GetValueOrDefault(),
                    DataPagamentoRitenuta = dataPagamentoRitenuta,
                    IdFattura = pag.ScadenzaRiferimento.SpesaRiferimento.ID,
                    ImportoIva = pag.ScadenzaRiferimento.SpesaRiferimento.ImportoIva,
                    ImportoImponibile = pag.ScadenzaRiferimento.SpesaRiferimento.Imponibile,
                    ImportoRitenuta = pag.RitenutaAcconto.Importo.GetValueOrDefault(),
                    PercentualeRitenuta = pag.ScadenzaRiferimento.SpesaRiferimento.AliquotaRitenuta.GetValueOrDefault() * 100,
                    CompensiSoggetti = esenteRegimeMinimo ? 0m : pag.ScadenzaRiferimento.SpesaRiferimento.GetImponibileRitenuta(),
                    CompensiNonSoggetti = esenteRegimeMinimo ? pag.ScadenzaRiferimento.SpesaRiferimento.GetImponibileRitenuta() : pag.ScadenzaRiferimento.SpesaRiferimento.AltreSpese.GetValueOrDefault(),
                    AltreSpeseNonSoggette = pag.ScadenzaRiferimento.SpesaRiferimento.SpeseEsentiRitenuta.GetValueOrDefault(),
                    ImportoTotale = pag.ScadenzaRiferimento.SpesaRiferimento.ImportoLordo,
                    ImportoPagato = pag.Importo.GetValueOrDefault()
                };

                // In casi di pagamento parziale
                if (pag.ScadenzaRiferimento.SpesaRiferimento.ImportoLordo - pag.ScadenzaRiferimento.SpesaRiferimento.ImportoRitenuta.GetValueOrDefault() != pag.Importo)
                {
                    var percentualePagata = 1m;

                    // Nel caso in cui l'importo lordo corrisponde con la ritenuta siamo nel caso di fattura da bilancio di apertura inserita in modo non corretto bugid#7583
                    var denominatore = pag.ScadenzaRiferimento.SpesaRiferimento.ImportoLordo;

                    // Nel caso di fattura inserita in bilancio d'apertura con conto "Ritenuta Fiscale" non devo sottrarre l'importo della ritenuta bugid#9391
                    if (pag.ScadenzaRiferimento.SpesaRiferimento.TipoDocumento.ToUpper() != "FATBILAPP" || pag.ScadenzaRiferimento.SpesaRiferimento.MovimentiBollette.FirstOrDefault() == null || pag.ScadenzaRiferimento.SpesaRiferimento.MovimentiBollette.FirstOrDefault().ContoRiferimento.Codice != "904")
                        denominatore -= pag.ScadenzaRiferimento.SpesaRiferimento.ImportoRitenuta.GetValueOrDefault();

                    if (denominatore != 0)
                        percentualePagata = pag.Importo.GetValueOrDefault() / denominatore;

                    dettaglioDatiCertificazione.ImportoTotale = dettaglioDatiCertificazione.ImportoTotale * percentualePagata;
                    dettaglioDatiCertificazione.CompensiSoggetti = dettaglioDatiCertificazione.CompensiSoggetti * percentualePagata;
                    dettaglioDatiCertificazione.CompensiNonSoggetti = dettaglioDatiCertificazione.CompensiNonSoggetti * percentualePagata;
                    dettaglioDatiCertificazione.ImportoIva = dettaglioDatiCertificazione.ImportoIva * percentualePagata;
                    dettaglioDatiCertificazione.ImportoImponibile = dettaglioDatiCertificazione.ImportoImponibile * percentualePagata;

                    dettaglioDatiCertificazione.AltreSpeseNonSoggette = dettaglioDatiCertificazione.AltreSpeseNonSoggette*percentualePagata;
                }

                // Per le fatture da bilancio di apertura il campo AltreSpeseEsenti viene usato come: SpeseEsentiRitenuta perchè il campo SpeseEsentiRitenuta non è presente
                // occorre quindi sottrarre il valore di tale campo per i CompensiSoggetti bugid#4139
                if (pag.ScadenzaRiferimento.SpesaRiferimento.TipoDocumento == "FATBILAPP")
                {
                    dettaglioDatiCertificazione.CompensiSoggetti -= pag.ScadenzaRiferimento.SpesaRiferimento.AltreSpeseEsenti.GetValueOrDefault();
                }

                datiCertificazione.Dettaglio.Add(dettaglioDatiCertificazione);
            }

            return dati;
        }
Ejemplo n.º 6
0
        public RisultatoInvioMessaggioAllegati InvioMessaggioPersonalizzatoPersone(MotivoMessaggio motivoMessaggio, IList<PersonaMessaggioDTO> persone, string mittente, string emailRapportino, IList<int> documentiAllegati, IList<DocumentInfo> allegatiNuovi, TipoMessaggio tipo, int? idModello, ParametriStampaUnione parametri, ParametriInvioLettera parametriInvioLettera, bool aggiornaContatti, int? idCondominio, int azienda)
        {
            try
            {
                var result = new List<RisultatoInvioMessaggio>();
                var messaggioInviato = new DocumentInfo();
                if (persone.Count > 0)
                {
                    IMessageService service = null;
                    
                    var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

                    Condominio condominio = null;
                    if (idCondominio > 0)
                        condominio = daoFactory.GetCondominioDao().Find(idCondominio.GetValueOrDefault(), false);

                    switch (tipo)
                    {
                        case TipoMessaggio.Fax:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.fax");
                            break;
                        case TipoMessaggio.Email:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.email");
                            break;
                        case TipoMessaggio.Sms:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.sms");
                            break;
                        case TipoMessaggio.Lettera:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.lettera");
                            break;
                        case TipoMessaggio.Manuale:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.manuale");
                            break;
                    }

                    // Recupero l'eventuale modello di lettera (solo per Fax, Email o Lettera tradizionale)
                    ModelloLettera modello = null;
                    if (idModello != null)
                        modello = daoFactory.GetModelloLetteraDao().GetById(idModello.Value, false);

                    var personaService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IPersonaService>();
                    var modelloLetteraService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IModelloLetteraService>();

                    // =========================================================================================
                    // Allegati
                    // =========================================================================================
                    var allegatiMessaggio = new List<DocumentInfo>();
                    var documentoRepository = new DocumentoRepository(_info, _windsorRepository);
                    foreach (var idDocumento in documentiAllegati)
                    {
                        var documento = daoFactory.GetDocumentoDao().Find(idDocumento, false);
                        if (documento != null)
                        {
                            var tipoDocumento = TipoDocumentoArchiviazione.Contratto;
                            if (documento.SpesaRiferimento != null)
                                tipoDocumento = TipoDocumentoArchiviazione.FatturaPassiva;
                            var docInfo = documentoRepository.GetDocumentInfo(idDocumento, tipoDocumento);

                            // Se è un file word lo conveerto in PDF
                            if (tipo != TipoMessaggio.Manuale && (docInfo.FileExtension == ".doc" || docInfo.FileExtension == ".docx"))
                            {
                                var doc = new Document(new MemoryStream(docInfo.Body));
                                var pdfStream = new MemoryStream();
                                doc.Save(pdfStream, SaveFormat.Pdf);
                                docInfo.Body = pdfStream.ToArray();
                                docInfo.FileExtension = ".pdf";
                            }

                        	allegatiMessaggio.Add(docInfo);
						}

                    }

                    // =========================================================================================
                    // Allegati Nuovi
                    // =========================================================================================
                    var allegatiNuoviAry = allegatiNuovi.ToArray();
                    for (var i = 0; i < allegatiNuoviAry.Length; i++)
                    {
                        var documentMessage = getDocumentService().SaveDocument(allegatiNuovi[i].Body, allegatiNuoviAry[i].FileName, allegatiNuoviAry[i].FileExtension, null, _info.Azienda);
                        if (documentMessage.Documento != null)
                        {
                            var checksum = documentMessage.Documento.Checksum;
                            allegatiNuoviAry[i].FileId = checksum;

                            byte[] body = null;
                            var fileExtension = string.Empty;
                            var fileName = string.Empty;

                            if (tipo != TipoMessaggio.Manuale && (allegatiNuoviAry[i].FileExtension == ".doc" || allegatiNuoviAry[i].FileExtension == ".docx" || allegatiNuoviAry[i].FileExtension == ".rtf"))
                            {
                                try
                                {
                                    var doc = new Document(new MemoryStream(allegatiNuovi[i].Body));
                                    var pdfStream = new MemoryStream();
                                    doc.Save(pdfStream, SaveFormat.Pdf);
                                    body = pdfStream.ToArray();
                                    fileExtension = ".pdf";

                                    fileName = allegatiNuoviAry[i].FileName;
                                }
                                catch (Exception ex)
                                {
                                    _log.WarnFormat("Errore nella conversione del file in pdf - {0} - fileName:{1} - fileExtension:{2} - fileId:{3}", ex, Utility.GetMethodDescription(), allegatiNuoviAry[i].FileName, allegatiNuoviAry[i].FileExtension, allegatiNuoviAry[i].FileId);
                                }
                            }

                            // Se la conversione non è stata eseguita o è fallita prendo il file originale
                            if (body == null)
                            {
                                body = allegatiNuovi[i].Body;
                                fileExtension = allegatiNuovi[i].FileExtension;
                                fileName = allegatiNuovi[i].FileName;
                            }

                            var index = fileName.LastIndexOf(".");
                            if (index > -1)
                                fileName = fileName.Substring(0, index);

                            var documento = new DocumentInfo { Body = body, FileId = checksum, FileName = fileName, FileExtension = fileExtension };
                            allegatiMessaggio.Insert(0, documento);
                        }

                    }

                    // =========================================================================================
                    // Per ogni persona invio il messaggio
                    // =========================================================================================
                    foreach (var personaMessaggio in persone)
                    {
                        var allegatiInvio = allegatiMessaggio.ToList();
                        var persona = daoFactory.GetPersonaDao().Find(personaMessaggio.ID, false);
                        if (persona != null)
                        {
                            parametri.IdPersonaAttiva = persona.ID;
                            parametri.Importo = personaMessaggio.Importo;
                            if(idCondominio != null)
                                parametri.IdCondominio = idCondominio.Value;

                            var contattiCollection = new ContattoCollection(persona.Contatti);
                            var contattoFax = contattiCollection.GetFirstContatto<Fax>();
                            if (contattoFax != null)
                                parametri.FaxDestinatario = contattoFax.Valore;

                            var messaggioPrincipale = personaMessaggio.TestoMessaggio;
                            parametri.Body = messaggioPrincipale;
                            switch (tipo)
                            {
                                case TipoMessaggio.Fax:
                                case TipoMessaggio.Lettera:
                                case TipoMessaggio.Email:
                                case TipoMessaggio.Manuale:

                                    // ----------------------------------------------------------------
                                    //  Modello RTF stampa unione
                                    // ----------------------------------------------------------------
                                    if(modello != null)
                                    {
                                        var documentoStampaUnione = modelloLetteraService.GetLetteraCompilata(idModello.GetValueOrDefault(), parametri);

                                        // Salvo il documento nel file system
                                        var documentMessage = getDocumentService().SaveDocument(documentoStampaUnione.Body, documentoStampaUnione.FileName + documentoStampaUnione.FileExtension, documentoStampaUnione.FileExtension, null, _info.Azienda);
                                        if (documentMessage.Documento != null)
                                        {
                                            var checksumModello = documentMessage.Documento.Checksum;
                                            documentoStampaUnione.FileId = checksumModello;
                                            allegatiInvio.Insert(0, documentoStampaUnione);
                                        }
                                    }

                                    // ----------------------------------------------------------------
                                    //  Documento principale (es. lettera di sollecito, subentro ecc...)
                                    // ----------------------------------------------------------------
                                    if (personaMessaggio.DocumentoMessaggio != null)
                                    {
                                        // Salvo il documento nel file system
                                        var documentMessage = getDocumentService().SaveDocument(personaMessaggio.DocumentoMessaggio, personaMessaggio.NomeMessaggio + ".pdf", ".pdf", null, _info.Azienda);
                                        if (documentMessage.Documento != null)
                                        {
                                            var checksumFax = documentMessage.Documento.Checksum;
                                            allegatiInvio.Insert(0, new DocumentInfo(personaMessaggio.DocumentoMessaggio, checksumFax, personaMessaggio.NomeMessaggio, ".pdf") { Length = personaMessaggio.DocumentoMessaggio.Length });
                                        }
                                    }
                                    break;
                            }

                            var destinatari = personaService.GetContattiSelezionatiByTipo(persone.Where(item => item.ID == persona.ID).ToList(), tipo);

                            if (service != null)
                                result.AddRange(service.InvioMessaggio(azienda, personaMessaggio, condominio, parametri.IdUnitaImmobiliare, parametri.IdFornitore, parametri.IdResponsabile, parametri.IdIncaricatoAttivita, motivoMessaggio, personaMessaggio.OggettoMessaggio, messaggioPrincipale, destinatari, mittente, emailRapportino, allegatiInvio, parametriInvioLettera));
                        }
                    }

                    if (parametriInvioLettera.AccodaMessaggio || parametriInvioLettera.ApriFileGenerato)
                    {
                        var zipFile = service.FinalizzaMessaggio(parametri.Oggetto, parametriInvioLettera.AccodaMessaggio, azienda);
                        if (parametriInvioLettera.ApriFileGenerato)
                            messaggioInviato = zipFile;
                    }
                }
                else
                    result.Add(new RisultatoInvioMessaggio(string.Empty, null, false, "Non è presente nessun destinatario", new DocumentInfo()));

                // ========================================
                // Aggiorno i contatti
                // ========================================
                if (aggiornaContatti)
                {
                    var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                    foreach (var personaMessaggio in persone)
                    {
                        var persona = daoFactory.GetPersonaDao().Find(personaMessaggio.ID, false);
                        if (persona != null)
                        {
                            var contattoRepository = new ContattoRepository(persona, _info, _windsorRepository);
                            foreach (var contattoDTO in personaMessaggio.Contatti)
                            {
                                contattoDTO.Stato = "U";
                                contattoRepository.ManageDomainEntity(contattoDTO, true);
                            }
                        }
                    }
                }

                return new RisultatoInvioMessaggioAllegati(result, null, messaggioInviato);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore durante l'invio del messaggio - {0} - idAzienda:{1}", ex, Utility.GetMethodDescription(), azienda);
                throw;
            }
        }
Ejemplo n.º 7
0
        public RisultatoInvioMessaggioAllegati InvioMessaggioPersone(MotivoMessaggio motivoMessaggio, string oggetto, string messaggio, IList<PersonaMessaggioDTO> persone, Dictionary<int, BindingList<ContattoDTO>> contatti, string mittente, string emailRapportino, IList<DocumentoMessaggioDTO> allegati, IList<DocumentInfo> allegatiNuovi, TipoMessaggio tipo, int? idModello, ParametriStampaUnione parametri, ParametriInvioLettera parametriInvioLettera, bool aggiornaContatti, int? idCondominio, int azienda)
        {
            try
            {
                var result = new List<RisultatoInvioMessaggio>();
                var allegatiResult = new List<DocumentInfo>();
                var messaggioInviato = new DocumentInfo();
                if (persone.Count > 0)
                {
                    var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                    var archiviazioneService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IArchiviazioneOtticaService>();
                    var converter = _windsorRepository.GetContainer(_info.Azienda).Resolve<IConverter>();

                    Condominio condominio = null;
                    if (idCondominio > 0)
                        condominio = daoFactory.GetCondominioDao().Find(idCondominio.GetValueOrDefault(), false);

                    IMessageService service = null;

                    switch (tipo)
                    {
                        case TipoMessaggio.Fax:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.fax");
                            break;
                        case TipoMessaggio.Email:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.email");
                            break;
                        case TipoMessaggio.Sms:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.sms");
                            break;
                        case TipoMessaggio.Lettera:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.lettera");
                            break;
                        case TipoMessaggio.Manuale:
                            service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMessageService>("messageservice.manuale");
                            break;
                    }

                    var personaService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IPersonaService>();

                    ModelloLettera modello = null;
                    if (idModello != null)
                        modello = daoFactory.GetModelloLetteraDao().GetById(idModello.Value, false);

                    // =========================================================================================
                    // Allegati
                    // =========================================================================================
                    var allegatiMessaggio = new List<DocumentInfo>(allegati.Count() + 1);
                    var documentoRepository = new DocumentoRepository(_info, _windsorRepository);
                    foreach (var idDocumento in allegati)
                    {
                        Documento documento = null;
                        if(idDocumento.Id != null)
                            documento = daoFactory.GetDocumentoDao().Find(idDocumento.Id.Value, false);
                        if (documento != null)
                        {
                            var tipoDocumento = TipoDocumentoArchiviazione.Contratto;
                            if (documento.SpesaRiferimento != null)
                                tipoDocumento = TipoDocumentoArchiviazione.FatturaPassiva;
                            var docInfo = documentoRepository.GetDocumentInfo(idDocumento.Id.Value, tipoDocumento);

                            if (docInfo.Body != null)
                            {
                                allegatiMessaggio.Add(docInfo);
                                allegatiResult.Add(docInfo);
                            }
                            else
                                _log.ErrorFormat("Tentativo di allegare documento vuoto - {0} - documento:{1}", Utility.GetMethodDescription(), documento.ID);
                        }
                        else if(documento == null && idDocumento.IdSpesa != null)
                        {
                            var spesa = daoFactory.GetSpesaDao().Find(idDocumento.IdSpesa.Value, false);
                            var identificativoArchiviazione = archiviazioneService.GetIdentificativoArchiviazione(spesa, false);
                            var docInfo = documentoRepository.GetDocumentBody(identificativoArchiviazione, TipoDocumentoArchiviazione.FatturaPassiva);
                            if (docInfo.Body != null)
                                allegatiMessaggio.Add(docInfo);
                            else
                                _log.ErrorFormat("Tentativo di allegare documento vuoto - {0} - spesa:{1}", Utility.GetMethodDescription(), idDocumento.IdSpesa);
                        }
                    }

                    // =========================================================================================
                    // Allegati Nuovi
                    // =========================================================================================
                    var allegatiNuoviAry = allegatiNuovi.ToArray();
                    for (var i = 0; i < allegatiNuoviAry.Length; i++)
                    {
                        if (string.IsNullOrEmpty(allegatiNuoviAry[i].BodyText))
                        {
                            var allegatiElaborati = elaboraAllegato(allegatiNuoviAry[i], null, parametri, tipo, converter, azienda);
                            if (allegatiElaborati != null)
                            {
                                allegatiMessaggio.Add(allegatiElaborati.Value.AllegatoDaInviare);
                                allegatiResult.Add(allegatiElaborati.Value.AllegatoResult);
                            }
                        }
                    }

                    // =========================================================================================
                    //  Non è presente nessuna stampa unione
                    // =========================================================================================
                    if ((modello == null || !modello.StampaUnione) && !isStampaUnione(oggetto, messaggio))
                    {
                        if (modello != null && (tipo == TipoMessaggio.Fax || tipo == TipoMessaggio.Lettera || tipo == TipoMessaggio.Manuale || tipo == TipoMessaggio.Email))
                        {
                            var modelloLetteraService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IModelloLetteraService>();
                            var documento = modelloLetteraService.GetLettera(idModello.Value);
                            documento.FileName = "Documento Allegato";

                            if (tipo != TipoMessaggio.Manuale)
                            {
                                var doc = new Document(new MemoryStream(documento.Body));
                                var pdfStream = new MemoryStream();
                                doc.Save(pdfStream, SaveFormat.Pdf);
                                documento.Body = pdfStream.ToArray();
                                documento.FileExtension = ".pdf";
                            }

                            allegatiMessaggio.Insert(0, documento);
                            allegatiResult.Add(documento);
                        }

                        IList<PersonaMessaggioDTO> personeMessaggio = new List<PersonaMessaggioDTO>();
                        foreach (var personaMessaggio in persone)
                        {
                            IList<ContattoDTO> contattiPersona = new List<ContattoDTO>();
                            if (contatti.ContainsKey(personaMessaggio.ID))
                                contattiPersona = contatti[personaMessaggio.ID];
                            personaMessaggio.Contatti = contattiPersona;
                            personeMessaggio.Add(personaMessaggio);
                        }
                        var destinatari = personaService.GetContattiSelezionatiByTipo(personeMessaggio, tipo);
                        if (destinatari.Count > 0)
                        {
                            if (service != null)
                            {
                                var risultatoInvio = service.InvioMessaggio(azienda, null, null, parametri.IdUnitaImmobiliare, parametri.IdFornitore, parametri.IdResponsabile, parametri.IdIncaricatoAttivita, motivoMessaggio, oggetto, messaggio, destinatari, mittente, emailRapportino, allegatiMessaggio, parametriInvioLettera).ToArray();
   
                                // In questo caso lo storico deve essere creato ora per ogni persona
                                foreach (var personaMessaggio in persone)
                                {
                                    var persona = daoFactory.GetPersonaDao().Find(personaMessaggio.ID, false);
                                    if (persona != null)
                                    {
                                        var storicoMessaggio = getMessaggisticaService().StoricizzaMessaggio(persona, condominio, risultatoInvio[0], motivoMessaggio, oggetto, messaggio, destinatari, mittente, emailRapportino, allegatiMessaggio, tipo);
                                        if (storicoMessaggio != null)
                                        {
                                            for (var i = 0; i < risultatoInvio.Length; i++)
                                                risultatoInvio[i].IdMessaggio = storicoMessaggio.ID;
                                        }
                                    }
                                }

                                if (parametriInvioLettera.AccodaMessaggio || parametriInvioLettera.ApriFileGenerato)
                                {
                                    var zipFile = service.FinalizzaMessaggio(oggetto, parametriInvioLettera.AccodaMessaggio, azienda);
                                    if (parametriInvioLettera.ApriFileGenerato)
                                        messaggioInviato = zipFile;
                                }

                                result.AddRange(risultatoInvio);
                            }
                        }
                        else
                            result.Add(new RisultatoInvioMessaggio(string.Empty, null, false, "Non è presente nessun destinatario", new DocumentInfo()));
                    }

                    // =========================================================================================
                    //  E' presente stampa unione con modello oppure direttamente nel testo
                    // =========================================================================================
                    else
                    {
                        Delivery delivery = null;
                        foreach (var personaMessaggio in persone)
                        {
                            var allegatiInvio = allegatiMessaggio.ToList();

                            var persona = daoFactory.GetPersonaDao().Find(personaMessaggio.ID, false);

                            if (persona != null)
                            {

                                var modelloLetteraService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IModelloLetteraService>();
                                parametri.IdPersonaAttiva = personaMessaggio.ID;
                                parametri.Importo = personaMessaggio.Importo;
                                parametri.IdUnitaImmobiliare = personaMessaggio.IdUnitaImmobiliare;
                                if (idCondominio != null)
                                    parametri.IdCondominio = idCondominio.Value;
                                
                                var faxDestinatario = string.Empty;
                                if (tipo == TipoMessaggio.Fax && contatti.ContainsKey(persona.ID) && contatti[persona.ID].Count > 0)
                                    faxDestinatario = contatti[persona.ID].FirstOrDefault().Valore;
                                if (string.IsNullOrEmpty(faxDestinatario))
                                {
                                    var contattiCollection = new ContattoCollection(persona.Contatti);
                                    var contattoFax = contattiCollection.GetFirstContatto<Fax>();
                                    if (contattoFax != null)
                                        faxDestinatario = contattoFax.Valore;
                                }
                                parametri.FaxDestinatario = faxDestinatario;

                                // Se è definita una persona da contattare nella stampa unione deve essere usata quest'ultima
                                var idPersonaStampaUnione = persona.ID;
                                if (parametri.IdPersonaRichiedente != null)
                                    idPersonaStampaUnione = parametri.IdPersonaRichiedente.GetValueOrDefault();
                                var parametriStampaUnione = new ParametriStampaUnione(idPersonaStampaUnione, parametri.IdUnitaImmobiliare, parametri.IdResponsabile, parametri.IdIncaricatoAttivita, parametri.IdFornitore, idCondominio, null, personaMessaggio.TipoIndirizzo, personaMessaggio.Importo, null, null, null, parametri.TelefonoDaContattare, null, null, null, null, null, parametri.IdPersonaRichiedente, null, null, parametri.Descrizione, null, null, null, null, null, null) { IdAssemblea = parametri.IdAssemblea };
                                var messaggioPrincipale = getMessaggisticaService().ApplicaStampaUnione(messaggio, parametriStampaUnione, _info.Azienda);
                                var oggettoPrincipale = getMessaggisticaService().ApplicaStampaUnione(oggetto, parametriStampaUnione, _info.Azienda);

                                parametri.Oggetto = oggettoPrincipale;
                                parametri.TipoIndirizzo = personaMessaggio.TipoIndirizzo;

                                // ------------------------------------------------------------------------
                                //allegatiInvio
                                //devo processare gli allegati nuovi che hanno bodytext non nullo
                                //questi doc possono avere tag di stampa unione per persona
                                // =========================================================================================
                                // Allegati Nuovi
                                // =========================================================================================
                                allegatiNuoviAry = allegatiNuovi.ToArray();
                                for (var i = 0; i < allegatiNuoviAry.Length; i++)
                                {
                                    if (!string.IsNullOrEmpty(allegatiNuoviAry[i].BodyText))
                                    {
                                        var allegatiElaborati = elaboraAllegato(allegatiNuoviAry[i], persona, parametri, tipo, converter, azienda);
                                        if (allegatiElaborati != null)
                                        {
                                            allegatiInvio.Insert(0, allegatiElaborati.Value.AllegatoDaInviare);
                                            allegatiResult.Add(allegatiElaborati.Value.AllegatoResult);
                                        }
                                    }
                                }
                                // ------------------------------------------------------------------------


                                // ------------------------------------------------------------------------
                                //  Modello allegato presente
                                // ------------------------------------------------------------------------
                                if (idModello != null)
                                {
                                    var documentoStampaUnione = modelloLetteraService.GetLetteraCompilata(idModello.Value, parametri);

                                    switch (tipo)
                                    {
                                        case TipoMessaggio.Fax:
                                        case TipoMessaggio.Lettera:
                                        case TipoMessaggio.Email:
                                        case TipoMessaggio.Manuale:

                                            // Se l'invio è manuale con generazione creazione un unico file PDF non deve essere creato un nuovo documento con il modello selezionato
                                            var checkSumDocumento = string.Empty;
                                            if(tipo != TipoMessaggio.Manuale || parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentiSeparati)
                                            {
                                                var documentMessage = getDocumentService().SaveDocument(documentoStampaUnione.Body, documentoStampaUnione.FileName, ".rtf", null, _info.Azienda);
                                                if(documentMessage.Documento != null)
                                                    checkSumDocumento = documentMessage.Documento.Checksum;
                                            }
                                            else if (documentoStampaUnione.Body != null)
                                                checkSumDocumento = Utility.GetFileChecksum(documentoStampaUnione.Body);

                                            if (!string.IsNullOrEmpty(checkSumDocumento))
                                            {
                                                var body = documentoStampaUnione.Body;
                                                var fileExtension = documentoStampaUnione.FileExtension;
                                                if (tipo != TipoMessaggio.Manuale)
                                                {
                                                    var doc = new Document(new MemoryStream(documentoStampaUnione.Body));
                                                    var pdfStream = new MemoryStream();
                                                    doc.Save(pdfStream, SaveFormat.Pdf);
                                                    body = pdfStream.ToArray();
                                                    fileExtension = ".pdf";
                                                }
                                                var documento = new DocumentInfo { Body = body, FileId = checkSumDocumento, FileName = checkSumDocumento, FileExtension = fileExtension };
                                                allegatiInvio.Insert(0, documento);

                                                if (tipo != TipoMessaggio.Manuale || !parametriInvioLettera.ApriFileGenerato)
                                                    allegatiResult.Add(documento);
                                            }

                                            break;
                                    }
                                }

                                IList<ContattoDTO> contattiPersona = new List<ContattoDTO>();
                                if (contatti.ContainsKey(personaMessaggio.ID))
                                    contattiPersona = contatti[personaMessaggio.ID];
                                var personeMessaggio = new List<PersonaMessaggioDTO>(1) { new PersonaMessaggioDTO { ID = personaMessaggio.ID, Contatti = contattiPersona,  } };
                                var destinatari = personaService.GetContattiSelezionatiByTipo(personeMessaggio, tipo);

                                if (service != null)
                                {
                                    int? idDelivery = null;
                                    if (delivery != null)
                                        idDelivery = delivery.Id;

                                    var resultMessage = service.InvioMessaggio(azienda, new PersonaMessaggioDTO {ID = persona.ID, IdDelivery = idDelivery}, condominio, parametri.IdUnitaImmobiliare, parametri.IdFornitore, parametri.IdResponsabile, parametri.IdIncaricatoAttivita, motivoMessaggio, oggettoPrincipale, messaggioPrincipale, destinatari, mittente, emailRapportino, allegatiInvio, parametriInvioLettera);

                                    if (resultMessage.Count > 0)
                                    {
                                        delivery = daoFactory.GetDeliveryPoDao().Find(resultMessage[0].IdDelivery, false);
                                        result.AddRange(resultMessage);
                                    }
                                                                        
                                }
                            }
                        }

                        if (parametriInvioLettera.AccodaMessaggio || parametriInvioLettera.ApriFileGenerato)
                        {
                            var zipFile = service.FinalizzaMessaggio(oggetto, parametriInvioLettera.AccodaMessaggio, azienda);
                            if (parametriInvioLettera.ApriFileGenerato)
                                messaggioInviato = zipFile;
                        }
                    }
                }
                else
                    result.Add(new RisultatoInvioMessaggio(string.Empty, null, false, "Non è presente nessun destinatario", new DocumentInfo()));

                // ========================================
                // Aggiorno i contatti
                // ========================================
                if(aggiornaContatti)
                {
                    var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                    foreach (var kvp in contatti)
                    {
                        var persona = daoFactory.GetPersonaDao().Find(kvp.Key, false);
                        if(persona != null)
                        {
                            var contattoRepository = new ContattoRepository(persona, _info, _windsorRepository);
                            foreach (var contattoDTO in kvp.Value)
                            {
                                var contatto = persona.Contatti.FirstOrDefault(item => item.Valore == contattoDTO.Valore);
                                if (contatto != null)
                                    contattoDTO.ID = contatto.ID;

                                contattoDTO.Stato = "U";
                                contattoRepository.ManageDomainEntity(contattoDTO, true);
                            }
                        }
                    }
                }

                return new RisultatoInvioMessaggioAllegati(result, allegatiResult, messaggioInviato);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore durante l'invio del messaggio - {0} - idAzienda:{1} - oggetto:{2}", ex, Utility.GetMethodDescription(), azienda, oggetto);
                throw;
            }
        }
Ejemplo n.º 8
0
        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>();
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
        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;
        }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        public IList<PersonaComunicazioneDTO> GetPersoneByFilter(DateTime? dataRiferimento, PersonaComunicazioneFilter filter)
        {
            try
            {
                var listaPersone = new List<PersonaComunicazioneDTO>();
                var impostazioniAzienda = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(filter.IdAzienda) ?? new ImpostazioniAzienda(_daoFactory.GetAziendaDao().GetById(filter.IdAzienda, false)) {TipoIndirizzoComunicazioni = TipoIndirizzo.Recapito};
                var comuni = _daoFactory.GetComuneDao().GetAll();

                if(dataRiferimento == null)
                {
                    if (filter.IdCondominio != null)
                    {
                        var esercizioCorrente = _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(_daoFactory.GetCondominioDao().GetById(filter.IdCondominio.Value, false), DateTime.Today);
                        if(esercizioCorrente != null)
                            dataRiferimento = esercizioCorrente.DataApertura;
                    }
                    if (dataRiferimento == null)
                        dataRiferimento = DateTime.Today;
                }

                var hql = new StringBuilder("FROM SoggettoCondominio SOG LEFT JOIN FETCH SOG.Persona PRS LEFT JOIN FETCH SOG.UnitaImmobiliare UNI LEFT JOIN FETCH UNI.GruppoStabileRiferimento GRU LEFT JOIN FETCH GRU.PalazzinaRiferimento PAL LEFT JOIN FETCH PAL.CondominioRiferimento COND LEFT JOIN FETCH PRS.IndirizzoResidenza.Comune COMRES LEFT JOIN FETCH COMRES.ProvinciaAppartenenza PROVRES LEFT JOIN FETCH PRS.Recapito.Comune COMREC LEFT JOIN FETCH COMREC.ProvinciaAppartenenza PROVREC LEFT JOIN FETCH PRS.Contatti CONT LEFT JOIN FETCH PRS.Gruppi AS GRU_PER LEFT JOIN FETCH UNI.Soggetti AS UNI_SOGG LEFT JOIN FETCH UNI_SOGG.Persona PERS_SOGG WHERE COND.Azienda = :azienda AND (SOG.DataFine is null OR SOG.DataFine >= :dataRiferimento) ");
                var parameters = new List<QueryParam>
                {
                    new QueryParam("azienda", filter.IdAzienda),
                    new QueryParam("dataRiferimento", dataRiferimento)
                };

                // ------------------------------------------
                //  Filtri
                // ------------------------------------------
                if(filter.IsResidente != null)
                {
                    hql.Append(" AND SOG.IsResidente = :residente");
                    parameters.Add(new QueryParam("residente", filter.IsResidente.GetValueOrDefault()));
                }

                if (filter.IdCondominio != null)
                {
                    hql.Append(" AND PAL.CondominioRiferimento.ID = :condominio");
                    parameters.Add(new QueryParam("condominio", filter.IdCondominio.Value));
                }
                if (filter.IdStabile != null)
                {
                    hql.Append(" AND PAL.ID = :stabile");
                    parameters.Add(new QueryParam("stabile", filter.IdStabile.Value));
                }
                if (filter.IdGruppo != null)
                {
                    hql.Append(" AND GRU.ID = :gruppo");
                    parameters.Add(new QueryParam("gruppo", filter.IdGruppo.Value));
                }
                if (filter.Consigliere != null)
                {
                    hql.Append(" AND SOG.Consigliere = :consigliere");
                    parameters.Add(new QueryParam("consigliere", filter.Consigliere.Value));
                }

                var soggetti = _daoFactory.GetSoggettoCondominioDao().GetByQuery(hql.ToString(), parameters.ToArray());
                var persone = new List<Persona>();

                var importoRaccomandata = GetImportoRaccomandata(filter.IdAzienda);

                foreach (var soggetto in soggetti.OrderBy(item => item.UnitaImmobiliare.TipoUnitaImmobiliare.ID))
                {
                    try
                    {
                        if (!persone.Contains(soggetto.Persona))
                        {
                            var contatti = new ContattoCollection(soggetto.Persona.Contatti);

                            var personaDto = new PersonaComunicazioneDTO
                            {
                                CodiceCondominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID,
                                CodiceFiscale = soggetto.Persona.CodiceFiscale,
                                DataNascita = soggetto.Persona.DataNascita,
                                DescrizioneStabile = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione,
                                DescrizioneScala = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione,
                                DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione,
                                Possesso = soggetto.FrazionePossesso != null ? soggetto.FrazionePossesso.ToString() : string.Empty,
                                Nominativo = soggetto.DisplayName,
                                DescrizioneSoggetto = soggetto.DescrizioneAggiuntiva,
                                Note = soggetto.Persona.Note,
                                Sesso = soggetto.Persona.Sesso,
                                Titolo = Library.Decodifica.Instance.GetElement("TitoloPersona", soggetto.Persona.Titolo).Descrizione,
                                TipoPersona = soggetto.Persona.TipoPersona,
                                OrdineUnitaImmobiliare = soggetto.UnitaImmobiliare.Ordine,
                                ImportoRaccomandata = importoRaccomandata,
                                Tipo = soggetto.Tipo,
                                InternoCompletoUnitaImmobiliare = soggetto.UnitaImmobiliare.InternoCompleto,
                                Principale = soggetto.Principale.GetValueOrDefault(),
                                SoggettoAccorpamento = soggetto.GetDescrizioneAccorpamento(),
                                ModalitaConvocazione = soggetto.ModalitaConvocazione,
                                ID = soggetto.Persona.ID,
                                Consigliere = soggetto.Consigliere,
                                IsResidente = soggetto.IsResidente,
                                IdCondominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID,
                                DescrizioneCondominio = soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.DisplayName,
                                Username = (soggetto.Persona.DatiAutenticazione != null) ? soggetto.Persona.DatiAutenticazione.Username : null,
                                Password = (soggetto.Persona.DatiAutenticazione != null) ? soggetto.Persona.DatiAutenticazione.Password : null,
                                Indirizzo = new AddressComunicazioneDTO { RecapitoResidenza = impostazioniAzienda.TipoIndirizzoComunicazioni }
                            };

                            if (soggetto.DirittoReale != null)
                                personaDto.DirittoReale = soggetto.DirittoReale.GetValueOrDefault().ToString();

                            var emailCertificata = contatti.GetFirstContatto<EmailCertificata>();
                            if (emailCertificata != null)
                            {
                                personaDto.ImportoRaccomandata = null;
                                personaDto.EmailCertificata = emailCertificata.Valore;
                            }

                            // ==================================================================
                            // Indirizzo
                            // ==================================================================
                            if (soggetto.Persona.IndirizzoResidenza != null)
                            {
                                personaDto.Indirizzo.PressoResidenza = soggetto.Persona.IndirizzoResidenza.Presso;
                                personaDto.Indirizzo.CapResidenza = soggetto.Persona.IndirizzoResidenza.Cap;
                                personaDto.Indirizzo.LocalitaResidenza = soggetto.Persona.IndirizzoResidenza.Localita;
                                // Località per ora viene stampata com campo singolo
//                                personaDto.Indirizzo.ComuneResidenza = soggetto.Persona.IndirizzoResidenza.Localita;
                                if (soggetto.Persona.IndirizzoResidenza.Comune != null)
                                {
                                    if (!string.IsNullOrEmpty(personaDto.Indirizzo.ComuneResidenza))
                                        personaDto.Indirizzo.ComuneResidenza += " - ";
                                    personaDto.Indirizzo.ComuneResidenza += soggetto.Persona.IndirizzoResidenza.Comune.Descrizione + " " + soggetto.Persona.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice;
                                }
                                personaDto.Indirizzo.ViaCivicoResidenza = soggetto.Persona.IndirizzoResidenza.Indirizzo + " " + soggetto.Persona.IndirizzoResidenza.Civico;
                            }

                            if (soggetto.Persona.Recapito != null)
                            {
                                personaDto.Indirizzo.PressoRecapito = soggetto.Persona.Recapito.Presso;
                                personaDto.Indirizzo.CapRecapito = soggetto.Persona.Recapito.Cap;
                                personaDto.Indirizzo.LocalitaRecapito = soggetto.Persona.Recapito.Localita;
                                // Località per ora viene stampata com campo singolo
                                //                                personaDto.Indirizzo.ComuneRecapito = soggetto.Persona.Recapito.Localita;
                                if (soggetto.Persona.Recapito.Comune != null)
                                {
                                    if (!string.IsNullOrEmpty(personaDto.Indirizzo.ComuneRecapito))
                                        personaDto.Indirizzo.ComuneRecapito += " - ";
                                    personaDto.Indirizzo.ComuneRecapito += soggetto.Persona.Recapito.Comune.Descrizione + " " + soggetto.Persona.Recapito.Comune.ProvinciaAppartenenza.Codice;
                                }
                                personaDto.Indirizzo.ViaCivicoRecapito = soggetto.Persona.Recapito.Indirizzo + " " + soggetto.Persona.Recapito.Civico;
                            }
                            else
                            {
                                personaDto.Indirizzo.ViaCivicoRecapito = personaDto.Indirizzo.ViaCivicoResidenza;
                                personaDto.Indirizzo.CapRecapito = personaDto.Indirizzo.CapResidenza;
                                personaDto.Indirizzo.ComuneRecapito = personaDto.Indirizzo.ComuneResidenza;
                                personaDto.Indirizzo.PressoRecapito = personaDto.Indirizzo.PressoResidenza;
                                personaDto.Indirizzo.LocalitaRecapito = personaDto.Indirizzo.LocalitaResidenza;
                            }

                            personaDto.Presso = personaDto.Indirizzo.PressoRecapito;
                            personaDto.ViaCivico = personaDto.Indirizzo.ViaCivicoRecapito;
                            personaDto.Cap = personaDto.Indirizzo.CapRecapito;
                            personaDto.Comune = personaDto.Indirizzo.ComuneRecapito;
                            personaDto.Localita = personaDto.Indirizzo.LocalitaRecapito;
                            // ==================================================================

                            if (soggetto.Persona.ComuneNascita != null)
                                personaDto.ComuneNascita = soggetto.Persona.ComuneNascita.Descrizione;

                            var gruppi = string.Empty;
                            foreach (var personaGruppo in soggetto.Persona.Gruppi)
                            {
                                if (!string.IsNullOrEmpty(gruppi))
                                    gruppi += ", ";
                                gruppi += personaGruppo.Gruppo.DescrizioneBreve;
                            }
                            personaDto.Gruppi = gruppi;

                            listaPersone.Add(personaDto);
                            persone.Add(soggetto.Persona);
                        }
                        else if (soggetto.Consigliere)
                        {
                            var persComunicazione = (listaPersone.Where(item => item.ID == soggetto.Persona.ID)).FirstOrDefault();
                            if (persComunicazione != null) 
                                persComunicazione.Consigliere = soggetto.Consigliere;
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.FatalFormat("Errore inaspettato durante la creazione della lista di persone per comunicazione - {0} - soggetto:{1}", ex, Library.Utility.GetMethodDescription(), soggetto.ID);
                        throw;
                    }
                }

                return listaPersone.OrderBy(rata => rata.OrdineUnitaImmobiliare).ToList();
            }
            catch (Exception ex)
            {
                
                _log.Fatal("Errore inaspettato durante la creazione della lista di persone per comunicazione - " + Library.Utility.GetMethodDescription(), ex);
                throw;
            }
        }
Ejemplo n.º 13
0
        private FornitoreDTO setDto(Fornitore item)
        {
            if (item != null)
            {
                var perRep = new PersonaRepository(_info, _windsorRepository);

                var dto = Conversione.IsTypeOf(item, typeof (AgenziaAssicurativa))
                              ? new AgenziaAssicurativaDTO()
                              : new FornitoreDTO();

                dto.ID = item.ID;
                dto.AgenziaAssicurativa = item.AgenziaAssicurativa;
                dto.AliquotaCassaProfessionisti = item.AliquotaCassaProfessionisti;
                dto.AliquotaIva = item.AliquotaIva;
                dto.AliquotaRitenutaAcconto = item.AliquotaRitenutaAcconto;
                dto.IsRitenutaCalcolataImponibile = item.IsRitenutaCalcolataImponibile;
                if (item.AziendaID != null)
                    dto.IdAzienda = item.AziendaID.Value;

                dto.CodiceTributo = item.CodiceTributo;
                dto.DisplayName = item.DisplayName;
                dto.ElencoFornitori = item.ElencoFornitori;
                dto.QuadroAc = item.QuadroAc;
                dto.InailIdentificativoAzienda = item.InailIdentificativoAzienda;
                dto.InailPat = item.InailPat;
                dto.Note = item.Note;
                dto.StatoFornitore = item.Stato;
                dto.NumeroPolizza = item.NumeroPolizza;
                dto.NumeroRegistroImprese = item.NumeroRegistroImprese;
                dto.FrequentlyAccessed = item.Preferito;
                dto.IsCompagniaAssicurativa = item.IsCompagniaAssicurativa;
                dto.PrestazioniOccasionali = item.PrestazioniOccasionali;
                dto.Version = item.Version;

                if (item.CompagniaAssicurativa != null)
                {
                    dto.CodiceCompagniaAssicurativa = item.CompagniaAssicurativa.ID;
                    dto.CompagniaAssicurativa = item.CompagniaAssicurativa.DisplayName;
                }

                if (item.ModalitaPagamento != null)
                {
                    dto.CodiceModalitaPagamento = item.ModalitaPagamento.ID;
                    dto.DescrizioneModalitaPagamento = item.ModalitaPagamento.Descrizione;
                    dto.DescrizioneBreveModalitaPagamento = item.ModalitaPagamento.DescrizioneBreve;
                }

                if (item.Qualita != null)
                {
                    dto.TempoIntervento = item.Qualita.TempoIntervento;
                    dto.Prezzo = item.Qualita.Prezzo;
                    dto.Servizio = item.Qualita.Servizio;
                    dto.Tracciabile = item.Qualita.Tracciabile;
                    dto.Certificazione = item.Qualita.Certificazione;
                    dto.Valutazione = item.Qualita.GetValutazione();
                }

                if (item.Tipo != null)
                {
                    dto.IdTipoFornitore = item.Tipo.ID;
                    dto.DescrizioneTipoFornitore = item.Tipo.Descrizione;
                }

                if (item.PersonaRiferimento != null)
                {
                    dto.PersonaRiferimento = perRep.GetByDomainEntity(item.PersonaRiferimento);

                    // Contatti
                    var contatti = new ContattoCollection(item.PersonaRiferimento.Contatti);
                    var tel = contatti.GetFirstContatto<Telefono>();
                    if (tel != null)
                        dto.Telefono = tel.Valore;
                    var cell = contatti.GetFirstContatto<Cellulare>();
                    if (cell != null)
                        dto.Cellulare = cell.Valore;
                    var mail = contatti.GetFirstContatto<Email>();
                    if (mail != null)
                        dto.Email = mail.Valore;

                    var www = contatti.GetFirstContatto<SitoInternet>();
                    if (www != null)
                        dto.SitoInternet = www.Valore;
                }

                if (dto is AgenziaAssicurativaDTO)
                {
                    ((AgenziaAssicurativaDTO) dto).Agenzia = ((AgenziaAssicurativa) item).Agenzia;
                    ((AgenziaAssicurativaDTO) dto).Nominativo = item.DisplayName;

                    if (((AgenziaAssicurativa) item).Fornitore != null)
                    {
                        ((AgenziaAssicurativaDTO) dto).CodiceFornitore = ((AgenziaAssicurativa) item).Fornitore.ID;
                        ((AgenziaAssicurativaDTO)dto).Fornitore = ((AgenziaAssicurativa)item).Fornitore.DisplayName;
                    }
                }

                return dto;
            }

            return new FornitoreDTO {IdAzienda = _info.Azienda};
        }
Ejemplo n.º 14
0
        private void notifyEmailAlert(ICondominioRiferimento alert, IDaoFactory daoFactory)
        {
            try
            {
                if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                    return;

                if(alert != null)
                {
                    Attivita attivita = null;
                    var alertAttivita = alert as AlertAttivita;
                    if (alertAttivita != null)
                        attivita = alertAttivita.Attivita;

                    if (alert.GetCondominio() != null && alert.Destinatario != null)
                    {
                        var referente = alert.Destinatario.GetReferenteEffettivo(alert.GetCondominio(), attivita);
                        if (referente != null && referente.Azienda.ID == alert.GetCondominio().Azienda.ID)
                        {
                            if (referente.PersonaRiferimento != null)
                            {
                                var emailAddress = new ContattoCollection(referente.PersonaRiferimento.Contatti).GetFirstContatto<Email>();
                                if (!string.IsNullOrEmpty(emailAddress?.Valore))
                                {
                                    // Destinatari
                                    var destinatari = new List<string>(1);
                                    if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                                        destinatari.Add("*****@*****.**");
                                    else
                                        destinatari.Add(emailAddress.Valore);

                                    // Mittente
                                    var mittente = ConfigurationManager.AppSettings["MailFrom"];

                                    int? idDelivery = null;
                                    if (_delivery != null)
                                        idDelivery = _delivery.Id;
                                    var result = _messageService.InvioMessaggio(alert.GetCondominio().Azienda.ID, new PersonaMessaggioDTO { ID = referente.PersonaRiferimento.ID, IdDelivery = idDelivery}, alert.GetCondominio(), null, null, null ,null, MotivoMessaggio.ScadenzaContratto, ConfigurationManager.AppSettings["MailSubject"], NVelocityTemplateEngine.ProcessAlert(alert), destinatari, mittente, mittente, null, new ParametriInvioLettera { Asincrono = true })[0];
                                    
                                    if (!result.InvioRiuscito)
                                    {
                                        _log.DebugFormat("Notify: Notifica alert NON ha avuto successo: {0} - il:{1} - ora:{2} - alert:{3}", result.MessaggioInvio, DateTime.Today.ToShortDateString(), DateTime.Now.ToShortTimeString(), alert.ID);
                                    }
                                    else
                                    {
                                        if (_delivery == null)
                                            _delivery = daoFactory.GetDeliveryPoDao().Find(result.IdDelivery, false);
                                    }
                                }
                            }
                            else
                            {
                                _log.DebugFormat("ATTENZIONE: Tentativo di inviare alert ad un referente per il quale non è associata nessuna persona fisica - {0} - idAlert:{1} - idReferente:{2}", Library.Utility.GetMethodDescription(), alert.ID, referente.ID);
                            }
                        }
                        else
                        {
                            _log.DebugFormat("ATTENZIONE: Tentativo di inviare alert a referente di una azienda diversa da quella del contratto - {0} - alert:{1} - referent:{2}", Library.Utility.GetMethodDescription(), alert.ID, referente?.ID.ToString() ?? "<NULL>");
                        }
                    }                    
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la notifica dell'alert - {0} - alert:{1}", ex, Library.Utility.GetMethodDescription(), alert?.ID.ToString() ?? "<NULL>");
                throw;
            }

        }
Ejemplo n.º 15
0
        private UtenteDTO setUtenteDto(Utente utente)
        {
            var dto = new UtenteDTO
            {
                ID = utente.ID,
                Password = utente.Password,
                Username = utente.Username,
                Version = utente.Version,
                Ruolo = utente.Ruolo
            };

            if (utente.Referente != null)
            {
                dto.IdReferente = utente.Referente.ID;
                dto.IdPersona = utente.Referente.PersonaRiferimento.ID;
                dto.Cognome = utente.Referente.PersonaRiferimento.Cognome;
                dto.Nome = utente.Referente.PersonaRiferimento.Nome;
                dto.Sigla = utente.Referente.Sigla;

                var contatti = new ContattoCollection(utente.Referente.PersonaRiferimento.Contatti);
                var email = contatti.GetFirstContatto<Email>();
                if(email != null)
                    dto.Email = email.Valore;
            }
            else
            {
                dto.Sigla = utente.Sigla;
                dto.Cognome = utente.Cognome;
                dto.Nome = utente.Nome;
            }
            
            return dto;
        }
Ejemplo n.º 16
0
        private ReferenteDTO setDto(Referente item)
        {
            if (item != null)
            {
                var dto = new ReferenteDTO
                {
                    Version = item.Version,
                    Sigla = item.Sigla,
                    ID = item.ID,
                    Dinamico = item.Dinamico,
                    IdAzienda = item.Azienda.ID
                };

                if (item.ReferenteSostitutivo != null)
                    dto.Sostitutivo = item.ReferenteSostitutivo.ID;

                dto.IsDeleteAllow = true;
                if (item.CondominiAssemblea.Count > 0 || item.CondominiContabilita.Count > 0 || item.Condomini.Count > 0)
                    dto.IsDeleteAllow = false;

                if (item.Dinamico != null && item.Dinamico.Value)
                {
                    var referenteEffettivo = item.GetReferenteEffettivo(null, null);
                    dto.DisplayName = item.DisplayName;
                    if (referenteEffettivo != null && !string.IsNullOrEmpty(referenteEffettivo.Sigla))
                        dto.DisplayName += " (" + referenteEffettivo.Sigla + ")";
                }
                else
                {
                    dto.DisplayName = item.DisplayName;
                    dto.DisplayNameCompleto = $"{dto.Sigla} - {dto.DisplayName}";
                }


                if (item.PersonaRiferimento != null)
                {
                    dto.Nome = item.PersonaRiferimento.Nome;
                    dto.Cognome = item.PersonaRiferimento.Cognome;
                    dto.PersonaId = item.PersonaRiferimento.ID;
                    dto.NominativoPersona = item.DisplayName;
                    dto.PartitaIva = item.PersonaRiferimento.PartitaIva;
                    dto.CodiceFiscale = item.PersonaRiferimento.CodiceFiscale;
                    dto.Sesso = item.PersonaRiferimento.Sesso.ToString();
                    dto.DataNascita = item.PersonaRiferimento.DataNascita;

                    if (item.PersonaRiferimento.ComuneNascita != null)
                    {
                        dto.CodiceComuneNascita = item.PersonaRiferimento.ComuneNascita.Codice;
                        dto.ComuneNascita = item.PersonaRiferimento.ComuneNascita.Descrizione;
                    }

                    // ----------------------------
                    // Contatti
                    // ----------------------------
                    var contatti = new ContattoDTO[item.PersonaRiferimento.Contatti.Count];
                    var index = 0;
                    foreach (var contatto in item.PersonaRiferimento.Contatti)
                    {
                        contatti[index] = getContattoRepository(item.PersonaRiferimento).GetByDomainEntity(contatto);
                        index++;
                    }
                    dto.Contatti = contatti;

                    // Per Lista
                    var contattiColl = new ContattoCollection(item.PersonaRiferimento.Contatti);
                    var cell = contattiColl.GetFirstContatto<Cellulare>();
                    if (cell != null)
                        dto.Cellulare = cell.Valore;
                    var tel = contattiColl.GetFirstContatto<Telefono>();
                    if (tel != null)
                        dto.Telefono = tel.Valore;
                    var mail = contattiColl.GetFirstContatto<Email>();
                    if (mail != null)
                        dto.Email = mail.Valore;
                }
                else
                    dto.Cognome = item.Descrizione;

                dto.NumeroCondominiAssemblea = item.CondominiAssemblea.Count;
                foreach (var condominio in item.CondominiAssemblea)
                {
                    if (condominio.NumeroUnitaImmobiliari != null)
                        dto.NumeroUnitaImmobiliariAssemblea += condominio.NumeroUnitaImmobiliari.Value;
                }

                // ----------------------------
                // Condomini Assemblea
                // ----------------------------
                var condominiAssemblea = new int[item.CondominiAssemblea.Count];
                var indexCondominiAssemblea = 0;
                foreach (var condominio in item.CondominiAssemblea)
                {
                    condominiAssemblea[indexCondominiAssemblea] = condominio.ID;
                    indexCondominiAssemblea++;
                }
                dto.CondominiAssemblea = condominiAssemblea;

                return dto;
            }

            return null;
        }