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;
            }
        }
        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;
            }
        }
Exemple #3
0
        public DocumentInfo GetFirmaAmministratore(int idAzienda)
        {
            try
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var azienda = daoFactory.GetAziendaDao().GetById(idAzienda, false);

                var docRep = new DocumentoRepository(_info, _windsorRepository);
                return docRep.GetDocumentInfo(azienda.FirmaAmministratore, TipoDocumentoArchiviazione.Contratto);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento della firma dell'Amministratore - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), idAzienda);
                throw;
            }
        }
Exemple #4
0
        public DocumentInfo GetLogoRtfEsercizio(int idAzienda)
        {
            try
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var azienda = daoFactory.GetAziendaDao().GetById(idAzienda, false);

                var docRep = new DocumentoRepository(_info, _windsorRepository);
                return docRep.GetDocumentInfo(azienda.LogoRtfReportEsercizio, TipoDocumentoArchiviazione.Contratto);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento del logo RTF ESERCIZIO dell'azienda - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), _info.Azienda);
                throw;
            }
        }
 public DocumentInfo GetDocumentoById(int id)
 {
     try
     {
         var documentInfo = new DocumentInfo();
         var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
         var item = daoFactory.GetPagamentoDao().Find(id, false);
         if (item != null)
         {
             if (!string.IsNullOrEmpty(item.Documento))
             {
                 documentInfo.BodyText = item.Documento;
                 documentInfo.FileExtension = ".rtf";
                 documentInfo.FileName = ContabilitaHelper.GetFileName("Bonifico", item.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento) + documentInfo.FileExtension;
             }
             else if(item.DisposizioneRiferimento != null)
             {
                 if (!string.IsNullOrEmpty(item.DisposizioneRiferimento.ContenutoFile))
                 {
                     documentInfo.BodyText = item.DisposizioneRiferimento.ContenutoFile;
                     documentInfo.FileExtension = ".txt";
                     documentInfo.FileName = ContabilitaHelper.GetFileName("Disposizione CBI", null);
                 }
                 else if (item.DisposizioneRiferimento.Documento != null)
                 {
                     var documentoRepository = new DocumentoRepository(_info, _windsorRepository);
                     documentInfo = documentoRepository.GetDocumentInfo(item.DisposizioneRiferimento.Documento, TipoDocumentoArchiviazione.Contratto);
                     documentInfo.FileExtension = ".zip";
                     documentInfo.FileName = ContabilitaHelper.GetFileName("Disposizione CBI", null);
                 }
             }
         }
         return documentInfo;
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nel caricamento dei pagamenti delle Fatture/Spese - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), id);
         throw;
     }
 }
Exemple #6
0
		public DocumentInfo GetDocument(int id, TipoDocumentoArchiviazione tipo, UserInfo userinfo)
		{
            var retryCount = 10;
            var success = false;
            var windsorRep = new WindsorConfigRepository();
            var item = new DocumentInfo();
            while (retryCount >= 0 && !success)
            {
                try
                {
                    windsorRep.BeginTransaction(userinfo);
                    var rep = new DocumentoRepository(userinfo, windsorRep);
                    item = rep.GetDocumentInfo(id, tipo);
                    windsorRep.Commit();
                    success = true;
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nella lettura di un documento - TENTATIVO:{0} - {1} - id:{2} - azienda:{3} - number:{4}", ex, (11 - retryCount), Utility.GetMethodDescription(), id, userinfo.Azienda, getExceptionId(ex));

                    windsorRep.Rollback();
                    if (!isRetryException(ex))
                        throw;

                    // Add delay here if you wish. 
                    System.Threading.Thread.Sleep(1000 * (11 - retryCount));
                    retryCount--;
                    _log.InfoFormat("Lettura di un documento - INIZIO TENTATIVO:{0} - {1} - id:{2} - azienda:{3}", (11 - retryCount), Utility.GetMethodDescription(), id, userinfo.Azienda);
                }
            }

            if (!success)
                windsorRep.Rollback();

            return item;
		}